From 432c0eaa8d928d2d2feb919521a2180bb4910a37 Mon Sep 17 00:00:00 2001 From: Ademola Fadumo Date: Fri, 7 Nov 2025 12:36:23 +0100 Subject: [PATCH 1/3] move existing sample app to e2eTest folder and create new sample app --- .../Sources/Strings/Localizable.xcstrings | 6542 +++++++++-------- .../project.pbxproj | 79 +- .../xcschemes/FirebaseSwiftUIExample.xcscheme | 0 .../FirebaseSwiftUIExampleTests.xcscheme | 0 .../FirebaseSwiftUIExampleUITests.xcscheme | 0 .../FirebaseSwiftUIExample/.firebaserc | 0 .../FirebaseSwiftUIExample/.gitignore | 0 .../App/ContentView.swift | 0 .../App/FirebaseSwiftUIExampleApp.swift | 0 .../AccentColor.colorset/Contents.json | 0 .../AppIcon.appiconset/Contents.json | 0 .../Assets.xcassets/Contents.json | 0 .../ic-line-logo.imageset/Contents.json | 0 .../fui-ic-line-logo-x2.png | Bin .../fui-ic-line-logo-x3.png | Bin .../fui-ic-line-logo.png | Bin .../line-button.colorset/Contents.json | 0 .../FirebaseSwiftUIExample.entitlements | 0 .../FirebaseSwiftUIExample/Info.plist | 0 .../Preview Assets.xcassets/Contents.json | 0 .../FirebaseSwiftUIExample/TestView.swift | 0 .../FirebaseSwiftUIExample/UITestUtils.swift | 0 .../FirebaseSwiftUIExample/firebase.json | 0 .../start-firebase-emulator.sh | 0 .../FirebaseSwiftUIExampleTests.swift | 0 .../TestHarness.swift | 0 .../FirebaseSwiftUIExampleUITests.swift | 0 .../MFAEnrolmentUITests.swift | 0 .../MFAResolutionUITests.swift | 0 .../ProviderUITests.swift | 0 .../TestUtils.swift | 0 .../UpgradeAccountUITests.swift | 0 .../GoogleService-Info.plist | 0 .../FirebaseUIApp.xcodeproj/project.pbxproj | 575 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 + .../Assets.xcassets/Contents.json | 6 + .../FirebaseUIApp/ContentView.swift | 24 + .../FirebaseUIApp/FirebaseUIAppApp.swift | 17 + .../FirebaseUIAppTests.swift | 36 + .../FirebaseUIAppUITests.swift | 41 + .../FirebaseUIAppUITestsLaunchTests.swift | 33 + 42 files changed, 4096 insertions(+), 3303 deletions(-) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj (90%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExampleTests.xcscheme (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExampleUITests.xcscheme (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/.firebaserc (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/.gitignore (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/App/ContentView.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/App/FirebaseSwiftUIExampleApp.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AccentColor.colorset/Contents.json (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/Contents.json (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/Contents.json (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/line-button.colorset/Contents.json (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Preview Content/Preview Assets.xcassets/Contents.json (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/TestView.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase.json (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAEnrolmentUITests.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAResolutionUITests.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/ProviderUITests.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/TestUtils.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/UpgradeAccountUITests.swift (100%) rename {samples/swiftui => e2eTest}/FirebaseSwiftUIExample/GoogleService-Info.plist (100%) create mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIApp.xcodeproj/project.pbxproj create mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/Contents.json create mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIApp/ContentView.swift create mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIApp/FirebaseUIAppApp.swift create mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIAppTests/FirebaseUIAppTests.swift create mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITests.swift create mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITestsLaunchTests.swift diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Strings/Localizable.xcstrings b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Strings/Localizable.xcstrings index 9f57074e39..746fadc043 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Strings/Localizable.xcstrings +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Strings/Localizable.xcstrings @@ -1,4961 +1,4967 @@ { - "sourceLanguage": "en", - "strings": { - "%@": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "%@" + "sourceLanguage" : "en", + "strings" : { + "%@" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "%@" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "%@" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "%@" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" } } } }, - "••••••%@": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "••••••%@" + "••••••%@" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "••••••%@" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "••••••%@" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "••••••%@" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" } } } }, - "Account: %@": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Konto: %@" + "Account: %@" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto: %@" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Account: %@" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cuenta: %@" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuenta: %@" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Compte : %@" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compte : %@" } } } }, - "AccountDisabledError": { - "comment": "Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "migrated", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese E-Mail-Adresse gehört zu einem deaktivierten Konto." + "AccountDisabledError" : { + "comment" : "Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "migrated", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse gehört zu einem deaktivierten Konto." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "That email address is for an account that has been disabled." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address is for an account that has been disabled." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esa dirección de correo es de una cuenta que ha sido deshabilitada." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esa dirección de correo es de una cuenta que ha sido deshabilitada." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette adresse e-mail correspond à un compte qui a été désactivé." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail correspond à un compte qui a été désactivé." } } } }, - "ActionCantBeUndone": { - "comment": "Alert message shown before account deletion.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese Aktion kann nicht rückgängig gemacht werden" + "ActionCantBeUndone" : { + "comment" : "Alert message shown before account deletion.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Aktion kann nicht rückgängig gemacht werden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "This action can't be undone" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action can't be undone" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esta acción no se puede deshacer" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta acción no se puede deshacer" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette action ne peut pas être annulée" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette action ne peut pas être annulée" } } } }, - "Add an extra layer of security to your account": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Füge deinem Konto eine zusätzliche Sicherheitsebene hinzu" + "Add an extra layer of security to your account" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Füge deinem Konto eine zusätzliche Sicherheitsebene hinzu" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Add an extra layer of security to your account" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add an extra layer of security to your account" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Agrega una capa adicional de seguridad a tu cuenta" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agrega una capa adicional de seguridad a tu cuenta" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ajoute une couche de sécurité supplémentaire à ton compte" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajoute une couche de sécurité supplémentaire à ton compte" } } } }, - "Add Another Method": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Weitere Methode hinzufügen" + "Add Another Method" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weitere Methode hinzufügen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Add Another Method" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Another Method" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Agregar otro método" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar otro método" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ajouter une autre méthode" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter une autre méthode" } } } }, - "AddPasswordAlertMessage": { - "comment": "Alert message shown when adding account password.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Um ein Passwort zu deinem Konto hinzuzufügen, musst du dich erneut anmelden." + "AddPasswordAlertMessage" : { + "comment" : "Alert message shown when adding account password.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um ein Passwort zu deinem Konto hinzuzufügen, musst du dich erneut anmelden." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "To add password to your account, you will need to sign in again." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To add password to your account, you will need to sign in again." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Para agregar una contraseña a tu cuenta, deberás iniciar sesión nuevamente." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para agregar una contraseña a tu cuenta, deberás iniciar sesión nuevamente." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Pour ajouter un mot de passe à ton compte, tu devras te reconnecter." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour ajouter un mot de passe à ton compte, tu devras te reconnecter." } } } }, - "AddPasswordTitle": { - "comment": "Controller title shown when adding password to account.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort hinzufügen" + "AddPasswordTitle" : { + "comment" : "Controller title shown when adding password to account.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort hinzufügen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Add password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Agregar contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ajouter un mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter un mot de passe" } } } }, - "Already have an account?": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Hast du bereits ein Konto?" + "Already have an account?" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hast du bereits ein Konto?" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Already have an account?" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Already have an account?" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Ya tienes una cuenta?" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Ya tienes una cuenta?" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Tu as déjà un compte ?" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu as déjà un compte ?" } } } }, - "AS_AddPassword": { - "comment": "Account Settings cell title Add Password.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort hinzufügen" + "AS_AddPassword" : { + "comment" : "Account Settings cell title Add Password.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort hinzufügen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Add password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Agregar contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ajouter un mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter un mot de passe" } } } }, - "AS_ChangePassword": { - "comment": "Account Settings cell title Change Password.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort ändern" + "AS_ChangePassword" : { + "comment" : "Account Settings cell title Change Password.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort ändern" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Change password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cambiar contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambiar contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Changer le mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Changer le mot de passe" } } } }, - "AS_DeleteAccount": { - "comment": "Account Settings cell title Delete Account.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Konto löschen" + "AS_DeleteAccount" : { + "comment" : "Account Settings cell title Delete Account.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete Account" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Eliminar cuenta" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar cuenta" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Supprimer le compte" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte" } } } }, - "AS_Email": { - "comment": "Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "E-Mail" + "AS_Email" : { + "comment" : "Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "E-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" } } } }, - "AS_Name": { - "comment": "Account Settings cell title Name.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Name" + "AS_Name" : { + "comment" : "Account Settings cell title Name.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Name" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nombre" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nombre" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nom" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom" } } } }, - "AS_SectionLinkedAccounts": { - "comment": "Account Settings section title Linked Accounts.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Verknüpfte Konten" + "AS_SectionLinkedAccounts" : { + "comment" : "Account Settings section title Linked Accounts.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfte Konten" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Linked Accounts" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked Accounts" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cuentas vinculadas" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuentas vinculadas" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Comptes liés" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comptes liés" } } } }, - "AS_SectionProfile": { - "comment": "Account Settings section title Profile.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Profil" + "AS_SectionProfile" : { + "comment" : "Account Settings section title Profile.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Profile" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profile" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Perfil" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perfil" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Profil" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" } } } }, - "AS_SectionSecurity": { - "comment": "Account Settings section title Security.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Sicherheit" + "AS_SectionSecurity" : { + "comment" : "Account Settings section title Security.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sicherheit" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Security" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Security" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Seguridad" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seguridad" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Sécurité" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sécurité" } } } }, - "AS_SignOut": { - "comment": "Account Settings cell title Sign Out.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Abmelden" + "AS_SignOut" : { + "comment" : "Account Settings cell title Sign Out.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign Out" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign Out" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cerrar sesión" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerrar sesión" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se déconnecter" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se déconnecter" } } } }, - "Authenticating...": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Authentifizierung läuft..." + "Authenticating..." : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierung läuft..." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Authenticating..." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticating..." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Autenticando..." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticando..." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Authentification..." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification..." } } } }, - "Authentication Method": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Authentifizierungsmethode" + "Authentication Method" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungsmethode" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Authentication Method" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentication Method" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Método de autenticación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Método de autenticación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Méthode d'authentification" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Méthode d'authentification" } } } }, - "Authenticator App": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Authentifizierungs-App" + "Authenticator App" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungs-App" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Authenticator App" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticator App" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Aplicación de autenticación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplicación de autenticación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Application d'authentification" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Application d'authentification" } } } }, - "AuthPickerTitle": { - "comment": "Title for auth picker screen.", - "extractionState": "stale", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Mit Firebase anmelden" + "AuthPickerTitle" : { + "comment" : "Title for auth picker screen.", + "extractionState" : "stale", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Firebase anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign in with Firebase" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Firebase" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión con Firebase" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con Firebase" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se connecter avec Firebase" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Firebase" } } } }, - "Back": { - "comment": "Back button title.", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Zurück" + "Back" : { + "comment" : "Back button title.", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zurück" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Back" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Back" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Atrás" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atrás" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Retour" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retour" } } } }, - "Cancel": { - "comment": "Cancel button title.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Abbrechen" + "Cancel" : { + "comment" : "Cancel button title.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Cancel" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cancelar" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Annuler" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuler" } } } }, - "CannotAuthenticateError": { - "comment": "Error message displayed when the app cannot authenticate user's account.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Dieser Kontotyp wird von dieser App nicht unterstützt" + "CannotAuthenticateError" : { + "comment" : "Error message displayed when the app cannot authenticate user's account.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dieser Kontotyp wird von dieser App nicht unterstützt" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "This type of account isn't supported by this app" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This type of account isn't supported by this app" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Este tipo de cuenta no es compatible con esta aplicación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Este tipo de cuenta no es compatible con esta aplicación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Ce type de compte n'est pas pris en charge par cette application" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ce type de compte n'est pas pris en charge par cette application" } } } }, - "CantFindProvider": { - "comment": "Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc)", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Anbieter für %@ kann nicht gefunden werden." + "CantFindProvider" : { + "comment" : "Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc)", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbieter für %@ kann nicht gefunden werden." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Can't find provider for %@." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Can't find provider for %@." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No se puede encontrar el proveedor para %@." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede encontrar el proveedor para %@." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Impossible de trouver le fournisseur pour %@." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de trouver le fournisseur pour %@." } } } }, - "Change number": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Nummer ändern" + "Change number" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nummer ändern" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Change number" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change number" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cambiar número" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambiar número" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Changer le numéro" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Changer le numéro" } } } }, - "Choose Authentication Method": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Authentifizierungsmethode wählen" + "Choose Authentication Method" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungsmethode wählen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Choose Authentication Method" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose Authentication Method" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Elige el método de autenticación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elige el método de autenticación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Choisir la méthode d'authentification" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisir la méthode d'authentification" } } } }, - "Choose verification method:": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Verifizierungsmethode wählen:" + "Choose verification method:" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierungsmethode wählen:" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Choose verification method:" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose verification method:" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Elige el método de verificación:" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elige el método de verificación:" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Choisis la méthode de vérification :" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisis la méthode de vérification :" } } } }, - "ChoosePassword": { - "comment": "Placeholder for the password text field in a sign up form.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort wählen" + "ChoosePassword" : { + "comment" : "Placeholder for the password text field in a sign up form.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wählen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Choose password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Elegir contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elegir contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Choisis un mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisis un mot de passe" } } } }, - "Close": { - "comment": "Alert button title Close.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Schließen" + "Close" : { + "comment" : "Alert button title Close.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Close" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cerrar" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerrar" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Fermer" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fermer" } } } }, - "Complete Setup": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Einrichtung abschließen" + "Complete Setup" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einrichtung abschließen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Complete Setup" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Setup" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Completar configuración" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completar configuración" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Terminer la configuration" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminer la configuration" } } } }, - "Complete Sign-In": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Anmeldung abschließen" + "Complete Sign-In" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmeldung abschließen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Complete Sign-In" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Sign-In" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Completar inicio de sesión" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completar inicio de sesión" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Terminer la connexion" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminer la connexion" } } } }, - "Complete sign-in with your second factor": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Schließe die Anmeldung mit deinem zweiten Faktor ab" + "Complete sign-in with your second factor" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließe die Anmeldung mit deinem zweiten Faktor ab" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Complete sign-in with your second factor" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete sign-in with your second factor" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Completa el inicio de sesión con tu segundo factor" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completa el inicio de sesión con tu segundo factor" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Termine la connexion avec ton deuxième facteur" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Termine la connexion avec ton deuxième facteur" } } } }, - "ConfirmEmail": { - "comment": "Title of confirm email label.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "E-Mail bestätigen" + "Confirm Password" : { + "comment" : "Field label for confirming password", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort bestätigen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Confirm Email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Confirmar correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Confirmer l'e-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmer le mot de passe" } } } }, - "Confirm Password": { - "comment": "Field label for confirming password", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort bestätigen" + "ConfirmEmail" : { + "comment" : "Title of confirm email label.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail bestätigen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Confirm Password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Confirmar contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Confirmer le mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmer l'e-mail" } } } }, - "ConfirmPasswordInputLabel": { - "comment": "Input label for confirming password when signing up", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort bestätigen" + "ConfirmPasswordInputLabel" : { + "comment" : "Input label for confirming password when signing up", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort bestätigen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Confirm Password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Confirmar contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Confirmer le mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmer le mot de passe" } } } }, - "Copied to clipboard!": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "In die Zwischenablage kopiert!" + "Copied to clipboard!" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In die Zwischenablage kopiert!" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Copied to clipboard!" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copied to clipboard!" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¡Copiado al portapapeles!" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Copiado al portapapeles!" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Copié dans le presse-papiers !" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copié dans le presse-papiers !" } } } }, - "Delete": { - "comment": "Text of Delete action button.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Löschen" + "Delete" : { + "comment" : "Text of Delete action button.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Löschen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Eliminar" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Supprimer" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer" } } } }, - "Delete Account": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Konto löschen" + "Delete Account" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete Account" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Eliminar cuenta" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar cuenta" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Supprimer le compte" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte" } } } }, - "Delete Account?": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Konto löschen?" + "Delete Account?" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen?" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete Account?" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account?" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Eliminar cuenta?" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Eliminar cuenta?" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Supprimer le compte ?" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte ?" } } } }, - "DeleteAccountBody": { - "comment": "Alert message body shown to confirm account deletion action.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Dies löscht alle mit deinem Konto verbundenen Daten und kann nicht rückgängig gemacht werden. Du musst dich erneut anmelden, um diese Aktion abzuschließen" + "DeleteAccountBody" : { + "comment" : "Alert message body shown to confirm account deletion action.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies löscht alle mit deinem Konto verbundenen Daten und kann nicht rückgängig gemacht werden. Du musst dich erneut anmelden, um diese Aktion abzuschließen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "This will erase all data associated with your account, and can't be undone You will need to sign in again to complete this action" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account, and can't be undone You will need to sign in again to complete this action" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esto borrará todos los datos asociados con tu cuenta y no se puede deshacer. Deberás iniciar sesión nuevamente para completar esta acción" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esto borrará todos los datos asociados con tu cuenta y no se puede deshacer. Deberás iniciar sesión nuevamente para completar esta acción" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cela effacera toutes les données associées à ton compte et ne peut pas être annulé. Tu devras te reconnecter pour effectuer cette action" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cela effacera toutes les données associées à ton compte et ne peut pas être annulé. Tu devras te reconnecter pour effectuer cette action" } } } }, - "DeleteAccountConfirmationMessage": { - "comment": "Explanation message shown before deleting account.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Dies löscht alle mit deinem Konto verbundenen Daten und kann nicht rückgängig gemacht werden. Bist du sicher, dass du dein Konto löschen möchtest?" + "DeleteAccountConfirmationMessage" : { + "comment" : "Explanation message shown before deleting account.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies löscht alle mit deinem Konto verbundenen Daten und kann nicht rückgängig gemacht werden. Bist du sicher, dass du dein Konto löschen möchtest?" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "This will erase all data associated with your account, and can't be undone. Are you sure you want to delete your account?" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account, and can't be undone. Are you sure you want to delete your account?" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esto borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que deseas eliminar tu cuenta?" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esto borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que deseas eliminar tu cuenta?" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cela effacera toutes les données associées à ton compte et ne peut pas être annulé. Es-tu sûr de vouloir supprimer ton compte ?" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cela effacera toutes les données associées à ton compte et ne peut pas être annulé. Es-tu sûr de vouloir supprimer ton compte ?" } } } }, - "DeleteAccountConfirmationTitle": { - "comment": "Alert message title shown to confirm account deletion action.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Konto löschen?" + "DeleteAccountConfirmationTitle" : { + "comment" : "Alert message title shown to confirm account deletion action.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen?" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete Account?" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account?" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Eliminar cuenta?" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Eliminar cuenta?" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Supprimer le compte ?" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte ?" } } } }, - "DeleteAccountControllerTitle": { - "comment": "Title of Controller shown before deleting account", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Konto löschen" + "DeleteAccountControllerTitle" : { + "comment" : "Title of Controller shown before deleting account", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Delete account" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete account" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Eliminar cuenta" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar cuenta" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Supprimer le compte" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte" } } } }, - "Display Name": { - "comment": "Field label for display name", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Anzeigename" + "Display Name" : { + "comment" : "Field label for display name", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anzeigename" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Display Name" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display Name" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nombre para mostrar" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nombre para mostrar" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nom affiché" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom affiché" } } } }, - "Don't have an account yet?": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Hast du noch kein Konto?" + "Don't have an account yet?" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hast du noch kein Konto?" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Don't have an account yet?" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Don't have an account yet?" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Aún no tienes una cuenta?" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Aún no tienes una cuenta?" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Tu n'as pas encore de compte ?" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu n'as pas encore de compte ?" } } } }, - "EditEmailTitle": { - "comment": "Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "E-Mail bearbeiten" + "EditEmailTitle" : { + "comment" : "Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail bearbeiten" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Edit email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Editar correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Editar correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Modifier l'e-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modifier l'e-mail" } } } }, - "EditNameTitle": { - "comment": "Controller title shown when editing account name.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Name bearbeiten" + "EditNameTitle" : { + "comment" : "Controller title shown when editing account name.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name bearbeiten" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Edit name" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit name" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Editar nombre" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Editar nombre" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Modifier le nom" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modifier le nom" } } } }, - "EditPasswordAlertMessage": { - "comment": "Alert message shown when editing account password.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Um das Passwort deines Kontos zu ändern, musst du dich erneut anmelden." + "EditPasswordAlertMessage" : { + "comment" : "Alert message shown when editing account password.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um das Passwort deines Kontos zu ändern, musst du dich erneut anmelden." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "To change password to your account, you will need to sign in again." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change password to your account, you will need to sign in again." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Para cambiar la contraseña de tu cuenta, deberás iniciar sesión nuevamente." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para cambiar la contraseña de tu cuenta, deberás iniciar sesión nuevamente." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Pour modifier le mot de passe de ton compte, tu devras te reconnecter." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier le mot de passe de ton compte, tu devras te reconnecter." } } } }, - "EditPasswordTitle": { - "comment": "Controller title shown when editing password to account.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort ändern" + "EditPasswordTitle" : { + "comment" : "Controller title shown when editing password to account.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort ändern" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Change password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cambiar contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambiar contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Changer le mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Changer le mot de passe" } } } }, - "Email": { - "comment": "Field label for email", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "E-Mail" + "Email" : { + "comment" : "Field label for email", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "E-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" } } } }, - "EmailAlreadyInUseError": { - "comment": "Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "migrated", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet." + "EmailAlreadyInUseError" : { + "comment" : "Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "migrated", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "The email address is already in use by another account." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email address is already in use by another account." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "La dirección de correo ya está en uso por otra cuenta." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La dirección de correo ya está en uso por otra cuenta." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette adresse e-mail est déjà utilisée par un autre compte." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail est déjà utilisée par un autre compte." } } } }, - "Enter code from app": { - "comment": "Prompt for entering code from authenticator app", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Code aus der App eingeben" + "EmailLinkSignInLabel" : { + "comment" : "Button label to push user to email link sign-in", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lieber mit E-Mail-Link anmelden?" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter code from app" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefer Email link sign-in?" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa el código de la aplicación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Prefieres iniciar sesión con enlace por correo?" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis le code de l'application" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préfères-tu la connexion par lien e-mail ?" } } } }, - "Enter display name for this authenticator": { - "comment": "Prompt for entering display name for authenticator", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Anzeigename für diesen Authentifikator eingeben" + "EmailLinkSignInTitle" : { + "comment" : "Sign in with email link View title", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit E-Mail-Link anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter display name for this authenticator" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email link" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa el nombre para mostrar de este autenticador" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con enlace por correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis le nom affiché pour cet authentificateur" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec un lien e-mail" } } } }, - "Enter display name for this device": { - "comment": "Prompt for entering display name for device", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Anzeigename für dieses Gerät eingeben" + "EmailsDontMatch" : { + "comment" : "Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mails stimmen nicht überein" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter display name for this device" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emails don't match" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa el nombre para mostrar de este dispositivo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los correos no coinciden" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis le nom affiché pour cet appareil" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les e-mails ne correspondent pas" } } } }, - "Enter phone number": { - "comment": "Prompt for entering phone number", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Telefonnummer eingeben" + "EmailSentConfirmationMessage" : { + "comment" : "Message displayed after email is sent. The placeholder is the email address that the email is sent to.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eine Anmelde-E-Mail mit zusätzlichen Anweisungen wurde an %@ gesendet. Überprüfe deine E-Mails, um die Anmeldung abzuschließen." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter phone number" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa el número de teléfono" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se envió un correo de inicio de sesión con instrucciones adicionales a %@. Revisa tu correo para completar el inicio de sesión." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis le numéro de téléphone" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un e-mail de connexion avec des instructions supplémentaires a été envoyé à %@. Vérifie tes e-mails pour terminer la connexion." } } } }, - "EmailLinkSignInLabel": { - "comment": "Button label to push user to email link sign-in", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Lieber mit E-Mail-Link anmelden?" + "Enrolled Methods" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrierte Methoden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Prefer Email link sign-in?" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled Methods" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Prefieres iniciar sesión con enlace por correo?" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Métodos registrados" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Préfères-tu la connexion par lien e-mail ?" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Méthodes inscrites" } } } }, - "EmailLinkSignInTitle": { - "comment": "Sign in with email link View title", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Mit E-Mail-Link anmelden" + "Enrolled: %@" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registriert: %@" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign in with email link" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled: %@" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión con enlace por correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrado: %@" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se connecter avec un lien e-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inscrit : %@" } } } }, - "EmailsDontMatch": { - "comment": "Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "E-Mails stimmen nicht überein" + "Enter 6-digit code" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "6-stelligen Code eingeben" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Emails don't match" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter 6-digit code" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Los correos no coinciden" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el código de 6 dígitos" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Les e-mails ne correspondent pas" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le code à 6 chiffres" } } } }, - "EmailSentConfirmationMessage": { - "comment": "Message displayed after email is sent. The placeholder is the email address that the email is sent to.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Eine Anmelde-E-Mail mit zusätzlichen Anweisungen wurde an %@ gesendet. Überprüfe deine E-Mails, um die Anmeldung abzuschließen." + "Enter code from app" : { + "comment" : "Prompt for entering code from authenticator app", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code aus der App eingeben" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter code from app" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Se envió un correo de inicio de sesión con instrucciones adicionales a %@. Revisa tu correo para completar el inicio de sesión." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el código de la aplicación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Un e-mail de connexion avec des instructions supplémentaires a été envoyé à %@. Vérifie tes e-mails pour terminer la connexion." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le code de l'application" } } } }, - "Enrolled Methods": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Registrierte Methoden" + "Enter display name for this authenticator" : { + "comment" : "Prompt for entering display name for authenticator", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anzeigename für diesen Authentifikator eingeben" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enrolled Methods" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this authenticator" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Métodos registrados" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el nombre para mostrar de este autenticador" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Méthodes inscrites" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le nom affiché pour cet authentificateur" } } } }, - "Enrolled: %@": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Registriert: %@" + "Enter display name for this device" : { + "comment" : "Prompt for entering display name for device", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anzeigename für dieses Gerät eingeben" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enrolled: %@" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this device" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Registrado: %@" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el nombre para mostrar de este dispositivo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Inscrit : %@" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le nom affiché pour cet appareil" } } } }, - "Enter 6-digit code": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "6-stelligen Code eingeben" + "Enter phone number" : { + "comment" : "Prompt for entering phone number", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer eingeben" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter 6-digit code" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter phone number" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa el código de 6 dígitos" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el número de teléfono" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis le code à 6 chiffres" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le numéro de téléphone" } } } }, - "Enter the 6-digit code from your authenticator app": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Gib den 6-stelligen Code aus deiner Authentifizierungs-App ein" + "Enter the 6-digit code from your authenticator app" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib den 6-stelligen Code aus deiner Authentifizierungs-App ein" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter the 6-digit code from your authenticator app" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter the 6-digit code from your authenticator app" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa el código de 6 dígitos de tu aplicación de autenticación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el código de 6 dígitos de tu aplicación de autenticación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis le code à 6 chiffres de ton application d'authentification" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le code à 6 chiffres de ton application d'authentification" } } } }, - "Enter Verification Code": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Bestätigungscode eingeben" + "Enter Verification Code" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätigungscode eingeben" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter Verification Code" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Verification Code" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa el código de verificación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el código de verificación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis le code de vérification" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le code de vérification" } } } }, - "Enter Your Phone Number": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Gib deine Telefonnummer ein" + "Enter Your Phone Number" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib deine Telefonnummer ein" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter Your Phone Number" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Your Phone Number" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa tu número de teléfono" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu número de teléfono" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis ton numéro de téléphone" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton numéro de téléphone" } } } }, - "EnterYourEmail": { - "comment": "Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Gib deine E-Mail ein" + "EnterYourEmail" : { + "comment" : "Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib deine E-Mail ein" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter your email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa tu correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis ton e-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton e-mail" } } } }, - "EnterYourPassword": { - "comment": "Password text field placeholder.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Gib dein Passwort ein" + "EnterYourPassword" : { + "comment" : "Password text field placeholder.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib dein Passwort ein" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter your password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa tu contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis ton mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton mot de passe" } } } }, - "Error": { - "comment": "Alert title Error.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Fehler" + "Error" : { + "comment" : "Alert title Error.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Error" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Error" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Erreur" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erreur" } } } }, - "ExistingAccountTitle": { - "comment": "Title of an alert shown to an existing user coming back to the app.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Du hast bereits ein Konto" + "ExistingAccountTitle" : { + "comment" : "Title of an alert shown to an existing user coming back to the app.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast bereits ein Konto" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "You already have an account" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You already have an account" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ya tienes una cuenta" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ya tienes una cuenta" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Tu as déjà un compte" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu as déjà un compte" } } } }, - "FirstAndLastName": { - "comment": "Name text field placeholder.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Vor- und Nachname" + "FirstAndLastName" : { + "comment" : "Name text field placeholder.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vor- und Nachname" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "First & last name" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "First & last name" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nombre y apellido" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nombre y apellido" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Prénom et nom" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prénom et nom" } } } }, - "ForgotPassword": { - "comment": "Button text for 'Forgot Password' action.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort-Wiederherstellungs-E-Mail senden" + "ForgotPassword" : { + "comment" : "Button text for 'Forgot Password' action.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort-Wiederherstellungs-E-Mail senden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Send password recovery email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send password recovery email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviar correo de recuperación de contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar correo de recuperación de contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Envoyer un e-mail de récupération de mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer un e-mail de récupération de mot de passe" } } } }, - "ForgotPasswordTitle": { - "comment": "Title of forgot password button.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Probleme beim Anmelden?" + "ForgotPasswordTitle" : { + "comment" : "Title of forgot password button.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleme beim Anmelden?" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Trouble signing in?" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble signing in?" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Problemas para iniciar sesión?" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Problemas para iniciar sesión?" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Problème de connexion ?" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problème de connexion ?" } } } }, - "Get Started": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Loslegen" + "Get Started" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loslegen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Get Started" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get Started" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Comenzar" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comenzar" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Commencer" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Commencer" } } } }, - "InvalidEmailError": { - "comment": "Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "migrated", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese E-Mail-Adresse ist nicht korrekt." + "Invalid OAuth Provider" : { + "comment" : "Error message displayed when OAuth provider configuration is invalid.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültiger OAuth-Anbieter" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "That email address isn't correct." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid OAuth Provider" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esa dirección de correo no es correcta." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Proveedor OAuth inválido" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette adresse e-mail n'est pas correcte." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fournisseur OAuth invalide" } } } }, - "Invalid OAuth Provider": { - "comment": "Error message displayed when OAuth provider configuration is invalid.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Ungültiger OAuth-Anbieter" + "InvalidEmailError" : { + "comment" : "Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "migrated", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse ist nicht korrekt." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Invalid OAuth Provider" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address isn't correct." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Proveedor OAuth inválido" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esa dirección de correo no es correcta." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Fournisseur OAuth invalide" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail n'est pas correcte." } } } }, - "InvalidPasswordError": { - "comment": "Error message displayed when user enters an empty password.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort darf nicht leer sein." + "InvalidPasswordError" : { + "comment" : "Error message displayed when user enters an empty password.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort darf nicht leer sein." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Password cannot be empty." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password cannot be empty." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "La contraseña no puede estar vacía." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La contraseña no puede estar vacía." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Le mot de passe ne peut pas être vide." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le mot de passe ne peut pas être vide." } } } }, - "Login": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Anmelden" + "Login" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Login" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Connexion" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connexion" } } } }, - "Manage Two-Factor Authentication": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Zwei-Faktor-Authentifizierung verwalten" + "Manage Two-Factor Authentication" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung verwalten" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Manage Two-Factor Authentication" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage Two-Factor Authentication" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Administrar autenticación de dos factores" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrar autenticación de dos factores" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Gérer l'authentification à deux facteurs" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gérer l'authentification à deux facteurs" } } } }, - "Manage your authentication methods": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Verwalte deine Authentifizierungsmethoden" + "Manage your authentication methods" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwalte deine Authentifizierungsmethoden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Manage your authentication methods" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage your authentication methods" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Administra tus métodos de autenticación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administra tus métodos de autenticación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Gère tes méthodes d'authentification" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gère tes méthodes d'authentification" } } } }, - "Manual Entry Key:": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Manueller Eingabeschlüssel:" + "Manual Entry Key:" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manueller Eingabeschlüssel:" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Manual Entry Key:" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manual Entry Key:" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Clave de entrada manual:" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clave de entrada manual:" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Clé de saisie manuelle :" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clé de saisie manuelle :" } } } }, - "MFA is not enabled in the current configuration. Please contact your administrator.": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "MFA ist in der aktuellen Konfiguration nicht aktiviert. Bitte kontaktiere deinen Administrator." + "MFA is not enabled in the current configuration. Please contact your administrator." : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA ist in der aktuellen Konfiguration nicht aktiviert. Bitte kontaktiere deinen Administrator." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "MFA is not enabled in the current configuration. Please contact your administrator." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA is not enabled in the current configuration. Please contact your administrator." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "MFA no está habilitado en la configuración actual. Por favor, contacta a tu administrador." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA no está habilitado en la configuración actual. Por favor, contacta a tu administrador." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "L'authentification multifacteur n'est pas activée dans la configuration actuelle. Contacte ton administrateur." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'authentification multifacteur n'est pas activée dans la configuration actuelle. Contacte ton administrateur." } } } }, - "Multi-Factor Authentication Disabled": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Mehr-Faktor-Authentifizierung deaktiviert" + "Multi-Factor Authentication Disabled" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mehr-Faktor-Authentifizierung deaktiviert" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Multi-Factor Authentication Disabled" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Factor Authentication Disabled" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Autenticación multifactor deshabilitada" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticación multifactor deshabilitada" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Authentification multifacteur désactivée" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification multifacteur désactivée" } } } }, - "Name": { - "comment": "Label next to a name text field.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Name" + "Name" : { + "comment" : "Label next to a name text field.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Name" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nombre" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nombre" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nom" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom" } } } }, - "Next": { - "comment": "Next button title.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Weiter" + "Next" : { + "comment" : "Next button title.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weiter" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Next" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Next" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Siguiente" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siguiente" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Suivant" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suivant" } } } }, - "No Authentication Methods": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Keine Authentifizierungsmethoden" + "No Authentication Methods" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Authentifizierungsmethoden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "No Authentication Methods" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Sin métodos de autenticación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sin métodos de autenticación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Aucune méthode d'authentification" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune méthode d'authentification" } } } }, - "No Authentication Methods Available": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Keine Authentifizierungsmethoden verfügbar" + "No Authentication Methods Available" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Authentifizierungsmethoden verfügbar" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "No Authentication Methods Available" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods Available" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No hay métodos de autenticación disponibles" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hay métodos de autenticación disponibles" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Aucune méthode d'authentification disponible" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune méthode d'authentification disponible" } } } }, - "No MFA methods are configured as allowed. Please contact your administrator.": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Keine MFA-Methoden sind als erlaubt konfiguriert. Bitte kontaktiere deinen Administrator." + "No MFA methods are configured as allowed. Please contact your administrator." : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine MFA-Methoden sind als erlaubt konfiguriert. Bitte kontaktiere deinen Administrator." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "No MFA methods are configured as allowed. Please contact your administrator." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No MFA methods are configured as allowed. Please contact your administrator." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No hay métodos MFA configurados como permitidos. Por favor, contacta a tu administrador." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hay métodos MFA configurados como permitidos. Por favor, contacta a tu administrador." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Aucune méthode d'authentification multifacteur n'est configurée comme autorisée. Contacte ton administrateur." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune méthode d'authentification multifacteur n'est configurée comme autorisée. Contacte ton administrateur." } } } }, - "OK": { - "comment": "OK button title.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "OK" + "OK" : { + "comment" : "OK button title.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "OK" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Aceptar" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aceptar" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "OK" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" } } } }, - "Password": { - "comment": "Field label for password", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort" + "Password" : { + "comment" : "Field label for password", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mot de passe" } } } }, - "PasswordRecoveryEmailSentMessage": { - "comment": "Message displayed when the email for password recovery has been sent.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Folge den Anweisungen, die an %@ gesendet wurden, um dein Passwort wiederherzustellen." + "Password Updated" : { + + }, + "PasswordRecoveryEmailSentMessage" : { + "comment" : "Message displayed when the email for password recovery has been sent.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folge den Anweisungen, die an %@ gesendet wurden, um dein Passwort wiederherzustellen." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Follow the instructions sent to %@ to recover your password." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follow the instructions sent to %@ to recover your password." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Sigue las instrucciones enviadas a %@ para recuperar tu contraseña." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sigue las instrucciones enviadas a %@ para recuperar tu contraseña." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Suis les instructions envoyées à %@ pour récupérer ton mot de passe." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suis les instructions envoyées à %@ pour récupérer ton mot de passe." } } } }, - "PasswordRecoveryEmailSentTitle": { - "comment": "Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Überprüfe deine E-Mails" + "PasswordRecoveryEmailSentTitle" : { + "comment" : "Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Überprüfe deine E-Mails" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Check your email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check your email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Revisa tu correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Revisa tu correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Vérifie tes e-mails" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifie tes e-mails" } } } }, - "PasswordRecoveryMessage": { - "comment": "Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Erhalte Anweisungen an diese E-Mail, die erklären, wie du dein Passwort zurücksetzen kannst." + "PasswordRecoveryMessage" : { + "comment" : "Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erhalte Anweisungen an diese E-Mail, die erklären, wie du dein Passwort zurücksetzen kannst." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Get instructions sent to this email that explain how to reset your password." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get instructions sent to this email that explain how to reset your password." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Recibe instrucciones enviadas a este correo que explican cómo restablecer tu contraseña." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recibe instrucciones enviadas a este correo que explican cómo restablecer tu contraseña." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Reçois des instructions envoyées à cet e-mail qui expliquent comment réinitialiser ton mot de passe." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reçois des instructions envoyées à cet e-mail qui expliquent comment réinitialiser ton mot de passe." } } } }, - "PasswordRecoveryTitle": { - "comment": "Title for password recovery screen.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort wiederherstellen" + "PasswordRecoveryTitle" : { + "comment" : "Title for password recovery screen.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wiederherstellen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Recover password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recover password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Recuperar contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recuperar contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Récupérer le mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Récupérer le mot de passe" } } } }, - "PasswordVerificationMessage": { - "comment": "Message to explain to the user that password is needed for an account with this email address.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Du hast bereits %@ verwendet, um dich anzumelden. Gib dein Passwort für dieses Konto ein." + "PasswordVerificationMessage" : { + "comment" : "Message to explain to the user that password is needed for an account with this email address.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast bereits %@ verwendet, um dich anzumelden. Gib dein Passwort für dieses Konto ein." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "You've already used %@ to sign in. Enter your password for that account." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@ to sign in. Enter your password for that account." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ya has usado %@ para iniciar sesión. Ingresa tu contraseña para esa cuenta." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ya has usado %@ para iniciar sesión. Ingresa tu contraseña para esa cuenta." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Tu as déjà utilisé %@ pour te connecter. Saisis ton mot de passe pour ce compte." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu as déjà utilisé %@ pour te connecter. Saisis ton mot de passe pour ce compte." } } } }, - "Phone": { - "comment": "Field label for phone", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Telefon" + "Phone" : { + "comment" : "Field label for phone", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Phone" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Teléfono" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Teléfono" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Téléphone" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Téléphone" } } } }, - "Phone Number": { - "comment": "Field label for phone number", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Telefonnummer" + "Phone Number" : { + "comment" : "Field label for phone number", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Phone Number" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone Number" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Número de teléfono" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Número de teléfono" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Numéro de téléphone" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Numéro de téléphone" } } } }, - "PlaceholderChosePassword": { - "comment": "Placeholder of secret input cell when user changes password.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort wählen" + "PlaceholderChosePassword" : { + "comment" : "Placeholder of secret input cell when user changes password.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wählen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Choose password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Elegir contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elegir contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Choisis un mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisis un mot de passe" } } } }, - "PlaceholderEnterEmail": { - "comment": "Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Gib deine E-Mail ein" + "PlaceholderEnterEmail" : { + "comment" : "Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib deine E-Mail ein" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter your email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa tu correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis ton e-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton e-mail" } } } }, - "PlaceholderEnterName": { - "comment": "Placeholder of input cell when user changes name.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Gib deinen Namen ein" + "PlaceholderEnterName" : { + "comment" : "Placeholder of input cell when user changes name.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib deinen Namen ein" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter your name" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your name" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa tu nombre" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu nombre" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis ton nom" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton nom" } } } }, - "PlaceholderEnterPassword": { - "comment": "Placeholder of secret input cell when user changes password.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Gib dein Passwort ein" + "PlaceholderEnterPassword" : { + "comment" : "Placeholder of secret input cell when user changes password.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib dein Passwort ein" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Enter your password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ingresa tu contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Saisis ton mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton mot de passe" } } } }, - "PlaceholderNewPassword": { - "comment": "Placeholder of secret input cell when user confirms password.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Neues Passwort" + "PlaceholderNewPassword" : { + "comment" : "Placeholder of secret input cell when user confirms password.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neues Passwort" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "New password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Nueva contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nueva contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nouveau mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nouveau mot de passe" } } } }, - "PrivacyPolicy": { - "comment": "Text linked to a web page with the Privacy Policy content.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Datenschutzrichtlinie" + "PrivacyPolicy" : { + "comment" : "Text linked to a web page with the Privacy Policy content.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datenschutzrichtlinie" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Privacy Policy" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy Policy" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Política de privacidad" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Política de privacidad" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Politique de confidentialité" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Politique de confidentialité" } } } }, - "ProviderTitleFacebook": { - "comment": "Title of Facebook provider", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Facebook" + "ProviderTitleFacebook" : { + "comment" : "Title of Facebook provider", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Facebook" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Facebook" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Facebook" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" } } } }, - "ProviderTitleGoogle": { - "comment": "Title of Google provider", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Google" + "ProviderTitleGoogle" : { + "comment" : "Title of Google provider", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Google" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Google" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Google" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" } } } }, - "ProviderTitlePassword": { - "comment": "Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "E-Mail" + "ProviderTitlePassword" : { + "comment" : "Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "E-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" } } } }, - "ProviderTitleTwitter": { - "comment": "Title of Twitter provider", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Twitter" + "ProviderTitleTwitter" : { + "comment" : "Title of Twitter provider", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Twitter" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Twitter" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Twitter" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" } } } }, - "ProviderUsedPreviouslyMessage": { - "comment": "Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder).", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Du hast bereits %@ verwendet. Melde dich mit %@ an, um fortzufahren." + "ProviderUsedPreviouslyMessage" : { + "comment" : "Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder).", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast bereits %@ verwendet. Melde dich mit %@ an, um fortzufahren." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "You've already used %@. Sign in with %@ to continue." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@. Sign in with %@ to continue." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ya has usado %@. Inicia sesión con %@ para continuar." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ya has usado %@. Inicia sesión con %@ para continuar." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Tu as déjà utilisé %@. Connecte-toi avec %@ pour continuer." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu as déjà utilisé %@. Connecte-toi avec %@ pour continuer." } } } }, - "ReauthenticateEditPasswordAlertMessage": { - "comment": "Alert message shown when re-authenticating before editing account password.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Um dein Passwort zu ändern, musst du zuerst dein aktuelles Passwort eingeben." + "ReauthenticateEditPasswordAlertMessage" : { + "comment" : "Alert message shown when re-authenticating before editing account password.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um dein Passwort zu ändern, musst du zuerst dein aktuelles Passwort eingeben." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "In order to change your password, you first need to enter your current password." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "In order to change your password, you first need to enter your current password." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Para cambiar tu contraseña, primero debes ingresar tu contraseña actual." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para cambiar tu contraseña, primero debes ingresar tu contraseña actual." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Pour modifier ton mot de passe, tu dois d'abord saisir ton mot de passe actuel." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier ton mot de passe, tu dois d'abord saisir ton mot de passe actuel." } } } }, - "Remove": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Entfernen" + "Remove" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entfernen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Remove" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Eliminar" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Retirer" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retirer" } } } }, - "Resend": { - "comment": "Resend button title.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Erneut senden" + "Resend" : { + "comment" : "Resend button title.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erneut senden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Resend" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Reenviar" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reenviar" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Renvoyer" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Renvoyer" } } } }, - "Resend Code": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Code erneut senden" + "Resend Code" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code erneut senden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Resend Code" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend Code" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Reenviar código" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reenviar código" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Renvoyer le code" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Renvoyer le code" } } } }, - "Save": { - "comment": "Save button title.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Speichern" + "Save" : { + "comment" : "Save button title.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Save" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Guardar" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Guardar" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Enregistrer" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enregistrer" } } } }, - "Scan QR Code": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "QR-Code scannen" + "Scan QR Code" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-Code scannen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Scan QR Code" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan QR Code" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Escanear código QR" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escanear código QR" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Scanner le code QR" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scanner le code QR" } } } }, - "Scan with your authenticator app or tap to open directly": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Scanne mit deiner Authentifizierungs-App oder tippe, um direkt zu öffnen" + "Scan with your authenticator app or tap to open directly" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scanne mit deiner Authentifizierungs-App oder tippe, um direkt zu öffnen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Scan with your authenticator app or tap to open directly" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan with your authenticator app or tap to open directly" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Escanea con tu aplicación de autenticación o toca para abrir directamente" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escanea con tu aplicación de autenticación o toca para abrir directamente" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Scanne avec ton application d'authentification ou appuie pour ouvrir directement" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scanne avec ton application d'authentification ou appuie pour ouvrir directement" } } } }, - "Send": { - "comment": "Send button title.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Senden" + "Send" : { + "comment" : "Send button title.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Send" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviar" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Envoyer" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer" } } } }, - "Send Code": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Code senden" + "Send a password recovery link to your email" : { + "comment" : "Field label for password recovery email", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort-Wiederherstellungslink an deine E-Mail senden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Send Code" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a password recovery link to your email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviar código" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar un enlace de recuperación de contraseña a tu correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Envoyer le code" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer un lien de récupération de mot de passe à ton e-mail" } } } }, - "SendEmailSignInLinkButtonLabel": { - "comment": "Button label for sending email sign-in link", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "E-Mail-Anmeldelink senden" + "Send a sign-in link to your email" : { + "comment" : "Field label for sign-in email link", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmeldelink an deine E-Mail senden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Send email sign-in link" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a sign-in link to your email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviar enlace de inicio de sesión por correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar un enlace de inicio de sesión a tu correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Envoyer le lien de connexion par e-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer un lien de connexion à ton e-mail" } } } }, - "Set Up Two-Factor Authentication": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Zwei-Faktor-Authentifizierung einrichten" + "Send Code" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code senden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Set Up Two-Factor Authentication" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send Code" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Configurar autenticación de dos factores" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar código" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Configurer l'authentification à deux facteurs" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer le code" } } } }, - "Set up two-factor authentication to add an extra layer of security to your account.": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Richte die Zwei-Faktor-Authentifizierung ein, um deinem Konto eine zusätzliche Sicherheitsebene hinzuzufügen." + "SendEmailSignInLinkButtonLabel" : { + "comment" : "Button label for sending email sign-in link", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Anmeldelink senden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Set up two-factor authentication to add an extra layer of security to your account." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send email sign-in link" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Configura la autenticación de dos factores para agregar una capa adicional de seguridad a tu cuenta." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar enlace de inicio de sesión por correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Configure l'authentification à deux facteurs pour ajouter une couche de sécurité supplémentaire à ton compte." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer le lien de connexion par e-mail" } } } }, - "Sign up": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Registrieren" + "Set Up Two-Factor Authentication" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung einrichten" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign up" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set Up Two-Factor Authentication" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Registrarse" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurar autenticación de dos factores" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "S'inscrire" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurer l'authentification à deux facteurs" } } } }, - "SignedIn": { - "comment": "Title of successfully signed in label.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Angemeldet!" + "Set up two-factor authentication to add an extra layer of security to your account." : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Richte die Zwei-Faktor-Authentifizierung ein, um deinem Konto eine zusätzliche Sicherheitsebene hinzuzufügen." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Signed in!" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set up two-factor authentication to add an extra layer of security to your account." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¡Sesión iniciada!" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configura la autenticación de dos factores para agregar una capa adicional de seguridad a tu cuenta." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Connecté !" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configure l'authentification à deux facteurs pour ajouter une couche de sécurité supplémentaire à ton compte." } } } }, - "SignInEmailSent": { - "comment": "Message displayed after the email of sign-in link is sent.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Anmelde-E-Mail gesendet" + "Sign in with Apple" : { + "comment" : "Sign in with Apple button label.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Apple anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign-in email Sent" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Apple" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Correo de inicio de sesión enviado" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con Apple" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "E-mail de connexion envoyé" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Apple" } } } }, - "SignInTitle": { - "comment": "Title for sign in screen and sign in button.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Anmelden" + "Sign in with Facebook" : { + "comment" : "Sign in with Facebook button label.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Facebook anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign in" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Facebook" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con Facebook" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se connecter" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Facebook" } } } }, - "SignInTooManyTimesError": { - "comment": "Error message displayed after user trying to sign in too many times.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Du hast zu oft ein falsches Passwort eingegeben. Versuche es in ein paar Minuten erneut." + "Sign in with Google" : { + "comment" : "Sign in with Google button label.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Google anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "You've entered an incorrect password too many times. Try again in a few minutes." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Google" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Has ingresado una contraseña incorrecta demasiadas veces. Intenta nuevamente en unos minutos." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con Google" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Tu as saisi un mot de passe incorrect trop de fois. Réessaie dans quelques minutes." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Google" } } } }, - "Sign in with Apple": { - "comment": "Sign in with Apple button label.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Mit Apple anmelden" + "Sign in with Phone" : { + "comment" : "Sign in with Phone button label.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Telefon anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign in with Apple" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Phone" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión con Apple" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con teléfono" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se connecter avec Apple" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec un téléphone" } } } }, - "Sign in with Facebook": { - "comment": "Sign in with Facebook button label.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Mit Facebook anmelden" + "Sign in with X" : { + "comment" : "Sign in with X (Twitter) button label.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit X anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign in with Facebook" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with X" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión con Facebook" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con X" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se connecter avec Facebook" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec X" } } } }, - "Sign in with Google": { - "comment": "Sign in with Google button label.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Mit Google anmelden" + "Sign up" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrieren" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign in with Google" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign up" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión con Google" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrarse" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se connecter avec Google" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'inscrire" } } } }, - "Sign in with Phone": { - "comment": "Sign in with Phone button label.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Mit Telefon anmelden" + "SignedIn" : { + "comment" : "Title of successfully signed in label.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angemeldet!" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign in with Phone" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Signed in!" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión con teléfono" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Sesión iniciada!" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se connecter avec un téléphone" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connecté !" } } } }, - "Sign in with X": { - "comment": "Sign in with X (Twitter) button label.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Mit X anmelden" + "SignInEmailSent" : { + "comment" : "Message displayed after the email of sign-in link is sent.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelde-E-Mail gesendet" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign in with X" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign-in email Sent" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión con X" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correo de inicio de sesión enviado" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se connecter avec X" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail de connexion envoyé" } } } }, - "SignInWithEmail": { - "comment": "Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Mit E-Mail anmelden" + "SignInTitle" : { + "comment" : "Title for sign in screen and sign in button.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign in with email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión con correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se connecter avec un e-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter" } } } }, - "SignInWithProvider": { - "comment": "Sign in with provider button label.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Mit %@ anmelden" + "SignInTooManyTimesError" : { + "comment" : "Error message displayed after user trying to sign in too many times.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast zu oft ein falsches Passwort eingegeben. Versuche es in ein paar Minuten erneut." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Sign in with %@" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've entered an incorrect password too many times. Try again in a few minutes." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Iniciar sesión con %@" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Has ingresado una contraseña incorrecta demasiadas veces. Intenta nuevamente en unos minutos." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Se connecter avec %@" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu as saisi un mot de passe incorrect trop de fois. Réessaie dans quelques minutes." } } } }, - "SignUpTitle": { - "comment": "Title for sign up screen.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Konto erstellen" + "SignInWithEmail" : { + "comment" : "Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit E-Mail anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Create account" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Crear cuenta" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con correo" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Créer un compte" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec un e-mail" } } } }, - "SignUpTooManyTimesError": { - "comment": "Error message displayed when many accounts have been created from same IP address.", - "extractionState": "migrated", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Zu viele Kontoanfragen kommen von deiner IP-Adresse. Versuche es in ein paar Minuten erneut." + "SignInWithProvider" : { + "comment" : "Sign in with provider button label.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit %@ anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Too many account requests are coming from your IP address. Try again in a few minutes." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with %@" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Demasiadas solicitudes de cuenta provienen de tu dirección IP. Intenta nuevamente en unos minutos." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con %@" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Trop de demandes de compte proviennent de ton adresse IP. Réessaie dans quelques minutes." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec %@" } } } }, - "SMS Authentication": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "SMS-Authentifizierung" + "SignUpTitle" : { + "comment" : "Title for sign up screen.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto erstellen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "SMS Authentication" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create account" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Autenticación por SMS" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crear cuenta" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Authentification par SMS" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Créer un compte" } } } }, - "SMS Verification": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "SMS-Verifizierung" + "SignUpTooManyTimesError" : { + "comment" : "Error message displayed when many accounts have been created from same IP address.", + "extractionState" : "migrated", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zu viele Kontoanfragen kommen von deiner IP-Adresse. Versuche es in ein paar Minuten erneut." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "SMS Verification" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Too many account requests are coming from your IP address. Try again in a few minutes." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Verificación por SMS" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Demasiadas solicitudes de cuenta provienen de tu dirección IP. Intenta nuevamente en unos minutos." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Vérification par SMS" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trop de demandes de compte proviennent de ton adresse IP. Réessaie dans quelques minutes." } } } }, - "SMS: %@": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "SMS: %@" + "SMS Authentication" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-Authentifizierung" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "SMS: %@" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Authentication" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "SMS: %@" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticación por SMS" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "SMS : %@" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification par SMS" } } } }, - "Tap to open in authenticator app": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Tippe, um in der Authentifizierungs-App zu öffnen" + "SMS Verification" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-Verifizierung" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Tap to open in authenticator app" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Verification" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Toca para abrir en la aplicación de autenticación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificación por SMS" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Appuie pour ouvrir dans l'application d'authentification" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérification par SMS" } } } }, - "TermsOfService": { - "comment": "Text linked to a web page with the Terms of Service content.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Nutzungsbedingungen" + "SMS: %@" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Terms of Service" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Términos de servicio" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Conditions d'utilisation" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS : %@" } } } }, - "TermsOfServiceMessage": { - "comment": "A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Indem du fortfährst, bestätigst du, dass du unsere %@ und %@ akzeptierst." + "Tap to open in authenticator app" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippe, um in der Authentifizierungs-App zu öffnen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "By continuing, you are indicating that you accept our %@ and %@." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap to open in authenticator app" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Al continuar, indicas que aceptas nuestros %@ y %@." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toca para abrir en la aplicación de autenticación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "En continuant, tu indiques que tu acceptes nos %@ et notre %@." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appuie pour ouvrir dans l'application d'authentification" } } } }, - "This action cannot be undone. All your data will be permanently deleted. You may need to reauthenticate to complete this action.": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese Aktion kann nicht rückgängig gemacht werden. Alle deine Daten werden dauerhaft gelöscht. Du musst dich möglicherweise erneut authentifizieren, um diese Aktion abzuschließen." + "TermsOfService" : { + "comment" : "Text linked to a web page with the Terms of Service content.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nutzungsbedingungen" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "This action cannot be undone. All your data will be permanently deleted. You may need to reauthenticate to complete this action." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terms of Service" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esta acción no se puede deshacer. Todos tus datos se eliminarán permanentemente. Es posible que debas volver a autenticarte para completar esta acción." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Términos de servicio" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette action ne peut pas être annulée. Toutes tes données seront définitivement supprimées. Tu devras peut-être te réauthentifier pour effectuer cette action." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conditions d'utilisation" } } } }, - "TroubleGettingEmailMessage": { - "comment": "Alert message displayed when user having trouble getting email.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Versuche diese gängigen Lösungen: \n - Überprüfe, ob die E-Mail als Spam markiert oder gefiltert wurde.\n - Überprüfe deine Internetverbindung.\n - Überprüfe, ob du deine E-Mail nicht falsch geschrieben hast.\n - Überprüfe, ob dein Postfach voll ist oder andere Probleme mit den Postfacheinstellungen vorliegen.\n Wenn die obigen Schritte nicht funktioniert haben, kannst du die E-Mail erneut senden. Beachte, dass dadurch der Link in der älteren E-Mail deaktiviert wird." + "TermsOfServiceMessage" : { + "comment" : "A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indem du fortfährst, bestätigst du, dass du unsere %@ und %@ akzeptierst." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Try these common fixes: \n - Check if the email was marked as spam or filtered.\n - Check your internet connection.\n - Check that you did not misspell your email.\n - Check that your inbox space is not running out or other inbox settings related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "By continuing, you are indicating that you accept our %@ and %@." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Prueba estas soluciones comunes: \n - Verifica si el correo fue marcado como spam o filtrado.\n - Verifica tu conexión a internet.\n - Verifica que no hayas escrito mal tu correo.\n - Verifica que tu bandeja de entrada no esté llena u otros problemas relacionados con la configuración de la bandeja de entrada.\n Si los pasos anteriores no funcionaron, puedes reenviar el correo. Ten en cuenta que esto desactivará el enlace del correo anterior." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Al continuar, indicas que aceptas nuestros %@ y %@." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Essaie ces solutions courantes :\n - Vérifie si l'e-mail a été marqué comme spam ou filtré.\n - Vérifie ta connexion Internet.\n - Vérifie que tu n'as pas mal orthographié ton e-mail.\n - Vérifie que l'espace de ta boîte de réception n'est pas saturé ou qu'il n'y a pas d'autres problèmes de paramètres de boîte de réception.\n Si les étapes ci-dessus n'ont pas fonctionné, tu peux renvoyer l'e-mail. Note que cela désactivera le lien dans l'ancien e-mail." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En continuant, tu indiques que tu acceptes nos %@ et notre %@." } } } }, - "TroubleGettingEmailTitle": { - "comment": "Title used in trouble getting email alert view.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Probleme beim Empfang von E-Mails?" + "This action cannot be undone. All your data will be permanently deleted. You may need to reauthenticate to complete this action." : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Aktion kann nicht rückgängig gemacht werden. Alle deine Daten werden dauerhaft gelöscht. Du musst dich möglicherweise erneut authentifizieren, um diese Aktion abzuschließen." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Trouble getting emails?" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action cannot be undone. All your data will be permanently deleted. You may need to reauthenticate to complete this action." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Problemas para recibir correos?" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta acción no se puede deshacer. Todos tus datos se eliminarán permanentemente. Es posible que debas volver a autenticarte para completar esta acción." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Problème pour recevoir les e-mails ?" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette action ne peut pas être annulée. Toutes tes données seront définitivement supprimées. Tu devras peut-être te réauthentifier pour effectuer cette action." } } } }, - "Two-Factor Authentication": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Zwei-Faktor-Authentifizierung" + "TroubleGettingEmailMessage" : { + "comment" : "Alert message displayed when user having trouble getting email.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versuche diese gängigen Lösungen: \n - Überprüfe, ob die E-Mail als Spam markiert oder gefiltert wurde.\n - Überprüfe deine Internetverbindung.\n - Überprüfe, ob du deine E-Mail nicht falsch geschrieben hast.\n - Überprüfe, ob dein Postfach voll ist oder andere Probleme mit den Postfacheinstellungen vorliegen.\n Wenn die obigen Schritte nicht funktioniert haben, kannst du die E-Mail erneut senden. Beachte, dass dadurch der Link in der älteren E-Mail deaktiviert wird." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Two-Factor Authentication" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Try these common fixes: \n - Check if the email was marked as spam or filtered.\n - Check your internet connection.\n - Check that you did not misspell your email.\n - Check that your inbox space is not running out or other inbox settings related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Autenticación de dos factores" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prueba estas soluciones comunes: \n - Verifica si el correo fue marcado como spam o filtrado.\n - Verifica tu conexión a internet.\n - Verifica que no hayas escrito mal tu correo.\n - Verifica que tu bandeja de entrada no esté llena u otros problemas relacionados con la configuración de la bandeja de entrada.\n Si los pasos anteriores no funcionaron, puedes reenviar el correo. Ten en cuenta que esto desactivará el enlace del correo anterior." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Authentification à deux facteurs" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Essaie ces solutions courantes :\n - Vérifie si l'e-mail a été marqué comme spam ou filtré.\n - Vérifie ta connexion Internet.\n - Vérifie que tu n'as pas mal orthographié ton e-mail.\n - Vérifie que l'espace de ta boîte de réception n'est pas saturé ou qu'il n'y a pas d'autres problèmes de paramètres de boîte de réception.\n Si les étapes ci-dessus n'ont pas fonctionné, tu peux renvoyer l'e-mail. Note que cela désactivera le lien dans l'ancien e-mail." } } } }, - "Unable to generate QR Code": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "QR-Code kann nicht generiert werden" + "TroubleGettingEmailTitle" : { + "comment" : "Title used in trouble getting email alert view.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleme beim Empfang von E-Mails?" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Unable to generate QR Code" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble getting emails?" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "No se puede generar el código QR" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Problemas para recibir correos?" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Impossible de générer le code QR" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problème pour recevoir les e-mails ?" } } } }, - "UnlinkAction": { - "comment": "Button title for unlinking account action.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Verknüpfung aufheben" + "Two-Factor Authentication" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Unlink" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Two-Factor Authentication" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Desvincular" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticación de dos factores" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Délier" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification à deux facteurs" } } } }, - "UnlinkConfirmationActionTitle": { - "comment": "Alert action title shown before unlinking action.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Kontoverknüpfung aufheben" + "Unable to generate QR Code" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-Code kann nicht generiert werden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Unlink account" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to generate QR Code" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Desvincular cuenta" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede generar el código QR" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Délier le compte" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de générer le code QR" } } } }, - "UnlinkConfirmationMessage": { - "comment": "Alert message shown before unlinking action.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Du kannst dich nicht mehr mit deinem Konto anmelden" + "UnlinkAction" : { + "comment" : "Button title for unlinking account action.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfung aufheben" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "You will no longer be able to sign in using your account" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Ya no podrás iniciar sesión usando tu cuenta" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincular" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Tu ne pourras plus te connecter en utilisant ton compte" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Délier" } } } }, - "UnlinkConfirmationTitle": { - "comment": "Alert title shown before unlinking action.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Kontoverknüpfung aufheben?" + "UnlinkConfirmationActionTitle" : { + "comment" : "Alert action title shown before unlinking action.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontoverknüpfung aufheben" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Unlink account?" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Desvincular cuenta?" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincular cuenta" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Délier le compte ?" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Délier le compte" } } } }, - "UnlinkTitle": { - "comment": "Controller title shown for unlinking account action.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Verknüpftes Konto" + "UnlinkConfirmationMessage" : { + "comment" : "Alert message shown before unlinking action.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du kannst dich nicht mehr mit deinem Konto anmelden" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Linked account" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You will no longer be able to sign in using your account" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Cuenta vinculada" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ya no podrás iniciar sesión usando tu cuenta" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Compte lié" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu ne pourras plus te connecter en utilisant ton compte" } } } }, - "Update password": { - "comment": "Update password button label", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort aktualisieren" + "UnlinkConfirmationTitle" : { + "comment" : "Alert title shown before unlinking action.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontoverknüpfung aufheben?" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Update password" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account?" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Actualizar contraseña" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Desvincular cuenta?" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Mettre à jour le mot de passe" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Délier le compte ?" } } } }, - "UpdateEmailAlertMessage": { - "comment": "Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Um die mit deinem Konto verknüpfte E-Mail-Adresse zu ändern, musst du dich erneut anmelden." + "UnlinkTitle" : { + "comment" : "Controller title shown for unlinking account action.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpftes Konto" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "To change email address associated with your account, you will need to sign in again." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked account" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Para cambiar la dirección de correo asociada con tu cuenta, deberás iniciar sesión nuevamente." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuenta vinculada" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Pour modifier l'adresse e-mail associée à ton compte, tu devras te reconnecter." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compte lié" } } } }, - "UpdateEmailVerificationAlertMessage": { - "comment": "Alert action message shown before confirmation of updating email action.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Um dein Passwort zu ändern, musst du zuerst dein aktuelles Passwort eingeben." + "Update password" : { + "comment" : "Update password button label", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort aktualisieren" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "In order to change your password, you first need to enter your current password." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update password" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Para cambiar tu contraseña, primero debes ingresar tu contraseña actual." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualizar contraseña" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Pour modifier ton mot de passe, tu dois d'abord saisir ton mot de passe actuel." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mettre à jour le mot de passe" } } } }, - "Use an authenticator app like Google Authenticator or Authy to generate verification codes.": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Verwende eine Authentifizierungs-App wie Google Authenticator oder Authy, um Bestätigungscodes zu generieren." + "UpdateEmailAlertMessage" : { + "comment" : "Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um die mit deinem Konto verknüpfte E-Mail-Adresse zu ändern, musst du dich erneut anmelden." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Use an authenticator app like Google Authenticator or Authy to generate verification codes." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change email address associated with your account, you will need to sign in again." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Usa una aplicación de autenticación como Google Authenticator o Authy para generar códigos de verificación." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para cambiar la dirección de correo asociada con tu cuenta, deberás iniciar sesión nuevamente." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Utilise une application d'authentification comme Google Authenticator ou Authy pour générer des codes de vérification." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier l'adresse e-mail associée à ton compte, tu devras te reconnecter." } } } }, - "UserNotFoundError": { - "comment": "Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "migrated", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Diese E-Mail-Adresse stimmt mit keinem vorhandenen Konto überein." + "UpdateEmailVerificationAlertMessage" : { + "comment" : "Alert action message shown before confirmation of updating email action.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um dein Passwort zu ändern, musst du zuerst dein aktuelles Passwort eingeben." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "That email address doesn't match an existing account." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "In order to change your password, you first need to enter your current password." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Esa dirección de correo no coincide con una cuenta existente." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para cambiar tu contraseña, primero debes ingresar tu contraseña actual." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Cette adresse e-mail ne correspond à aucun compte existant." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier ton mot de passe, tu dois d'abord saisir ton mot de passe actuel." } } } }, - "Send a password recovery link to your email": { - "comment": "Field label for password recovery email", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort-Wiederherstellungslink an deine E-Mail senden" + "Use an authenticator app like Google Authenticator or Authy to generate verification codes." : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwende eine Authentifizierungs-App wie Google Authenticator oder Authy, um Bestätigungscodes zu generieren." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Send a password recovery link to your email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use an authenticator app like Google Authenticator or Authy to generate verification codes." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviar un enlace de recuperación de contraseña a tu correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usa una aplicación de autenticación como Google Authenticator o Authy para generar códigos de verificación." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Envoyer un lien de récupération de mot de passe à ton e-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilise une application d'authentification comme Google Authenticator ou Authy pour générer des codes de vérification." } } } }, - "Send a sign-in link to your email": { - "comment": "Field label for sign-in email link", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Anmeldelink an deine E-Mail senden" + "UserNotFoundError" : { + "comment" : "Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "migrated", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse stimmt mit keinem vorhandenen Konto überein." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Send a sign-in link to your email" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address doesn't match an existing account." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviar un enlace de inicio de sesión a tu correo" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esa dirección de correo no coincide con una cuenta existente." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Envoyer un lien de connexion à ton e-mail" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail ne correspond à aucun compte existant." } } } }, - "Verification Code": { - "comment": "Field label for verification code", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Bestätigungscode" + "Verification Code" : { + "comment" : "Field label for verification code", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätigungscode" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Verification Code" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verification Code" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Código de verificación" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Código de verificación" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Code de vérification" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code de vérification" } } } }, - "Verify email address?": { - "comment": "Label for sending email verification to user.", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "E-Mail-Adresse verifizieren?" + "Verify email address?" : { + "comment" : "Label for sending email verification to user.", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Adresse verifizieren?" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Verify email address?" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify email address?" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "¿Verificar dirección de correo?" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Verificar dirección de correo?" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Vérifier l'adresse e-mail ?" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifier l'adresse e-mail ?" } } } }, - "VerifyItsYou": { - "comment": "Alert message title show for re-authorization.", - "extractionState": "manual", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Bestätige, dass du es bist" + "VerifyItsYou" : { + "comment" : "Alert message title show for re-authorization.", + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätige, dass du es bist" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Verify it's you" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify it's you" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Verifica que eres tú" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifica que eres tú" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Vérifie que c'est toi" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifie que c'est toi" } } } }, - "We sent a code to %@": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Wir haben einen Code an %@ gesendet" + "We sent a code to %@" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir haben einen Code an %@ gesendet" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "We sent a code to %@" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sent a code to %@" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviamos un código a %@" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviamos un código a %@" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nous avons envoyé un code à %@" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous avons envoyé un code à %@" } } } }, - "We'll send a code to ••••••%@": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Wir senden einen Code an ••••••%@" + "We'll send a code to ••••••%@" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Code an ••••••%@" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "We'll send a code to ••••••%@" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a code to ••••••%@" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviaremos un código a ••••••%@" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos un código a ••••••%@" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nous enverrons un code à ••••••%@" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code à ••••••%@" } } } }, - "We'll send a verification code to this number": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Wir senden einen Bestätigungscode an diese Nummer" + "We'll send a verification code to this number" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Bestätigungscode an diese Nummer" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "We'll send a verification code to this number" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to this number" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviaremos un código de verificación a este número" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos un código de verificación a este número" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nous enverrons un code de vérification à ce numéro" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code de vérification à ce numéro" } } } }, - "We'll send a verification code to your phone": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Wir senden einen Bestätigungscode an dein Telefon" + "We'll send a verification code to your phone" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Bestätigungscode an dein Telefon" } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "We'll send a verification code to your phone" + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone" } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviaremos un código de verificación a tu teléfono" + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos un código de verificación a tu teléfono" } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nous enverrons un code de vérification à ton téléphone" + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code de vérification à ton téléphone" } } } }, - "We'll send a verification code to your phone number each time you sign in.": { - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Wir senden jedes Mal einen Bestätigungscode an deine Telefonnummer, wenn du dich anmeldest." + "We'll send a verification code to your phone number each time you sign in." : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden jedes Mal einen Bestätigungscode an deine Telefonnummer, wenn du dich anmeldest." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "We'll send a verification code to your phone number each time you sign in." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone number each time you sign in." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "Enviaremos un código de verificación a tu número de teléfono cada vez que inicies sesión." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos un código de verificación a tu número de teléfono cada vez que inicies sesión." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Nous enverrons un code de vérification à ton numéro de téléphone chaque fois que tu te connectes." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code de vérification à ton numéro de téléphone chaque fois que tu te connectes." } } } }, - "WeakPasswordError": { - "comment": "Error message displayed when the password is too weak.", - "extractionState": "migrated", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Passwort muss mindestens 6 Zeichen lang sein." + "WeakPasswordError" : { + "comment" : "Error message displayed when the password is too weak.", + "extractionState" : "migrated", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort muss mindestens 6 Zeichen lang sein." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "Password must be at least 6 characters long." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password must be at least 6 characters long." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "La contraseña debe tener al menos 6 caracteres." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La contraseña debe tener al menos 6 caracteres." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "Le mot de passe doit contenir au moins 6 caractères." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le mot de passe doit contenir au moins 6 caractères." } } } }, - "WrongPasswordError": { - "comment": "Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState": "migrated", - "localizations": { - "de": { - "stringUnit": { - "state": "translated", - "value": "Die E-Mail und das Passwort, die du eingegeben hast, stimmen nicht überein." + "WrongPasswordError" : { + "comment" : "Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "migrated", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die E-Mail und das Passwort, die du eingegeben hast, stimmen nicht überein." } }, - "en": { - "stringUnit": { - "state": "translated", - "value": "The email and password you entered don't match." + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email and password you entered don't match." } }, - "es": { - "stringUnit": { - "state": "translated", - "value": "El correo y la contraseña que ingresaste no coinciden." + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El correo y la contraseña que ingresaste no coinciden." } }, - "fr": { - "stringUnit": { - "state": "translated", - "value": "L'e-mail et le mot de passe que tu as saisis ne correspondent pas." + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'e-mail et le mot de passe que tu as saisis ne correspondent pas." } } } + }, + "Your password has been successfully updated." : { + } }, - "version": "1.0" + "version" : "1.0" } \ No newline at end of file diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj similarity index 90% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj index abec964899..c24cabddd6 100644 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj @@ -11,14 +11,16 @@ 4600E5542DD777BE00EED5F3 /* FirebaseCore in Frameworks */ = {isa = PBXBuildFile; productRef = 4600E5532DD777BE00EED5F3 /* FirebaseCore */; }; 4607CC9C2D9BFE29009EC3F5 /* FirebaseAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 4607CC9B2D9BFE29009EC3F5 /* FirebaseAuthSwiftUI */; }; 4607CC9E2D9BFE29009EC3F5 /* FirebaseGoogleSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 4607CC9D2D9BFE29009EC3F5 /* FirebaseGoogleSwiftUI */; }; - 4610DD2A2EA796360084B32B /* FirebaseAppleSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 4610DD292EA796360084B32B /* FirebaseAppleSwiftUI */; }; - 464938E92EA8E6BD0013A9E3 /* FirebaseOAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 464938E82EA8E6BD0013A9E3 /* FirebaseOAuthSwiftUI */; }; - 4681E0002E97F22B00387C88 /* FirebaseTwitterSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 4681DFFF2E97F22B00387C88 /* FirebaseTwitterSwiftUI */; }; 46CB7B252D773F2100F1FD0A /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 46CB7B242D773F2100F1FD0A /* GoogleService-Info.plist */; }; 46F89C392D64B04E000F8BC0 /* FirebaseAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 46F89C382D64B04E000F8BC0 /* FirebaseAuthSwiftUI */; }; 46F89C4D2D64BB9B000F8BC0 /* FirebaseAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 46F89C4C2D64BB9B000F8BC0 /* FirebaseAuthSwiftUI */; }; - 8D808CB72DB0811900D2293F /* FirebaseFacebookSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 8D808CB62DB0811900D2293F /* FirebaseFacebookSwiftUI */; }; - 8D808CB92DB081F900D2293F /* FirebasePhoneAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 8D808CB82DB081F900D2293F /* FirebasePhoneAuthSwiftUI */; }; + 7EBF264D2EBE10DB000F0BB3 /* FirebaseAppleSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF264C2EBE10DB000F0BB3 /* FirebaseAppleSwiftUI */; }; + 7EBF264F2EBE10DB000F0BB3 /* FirebaseAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF264E2EBE10DB000F0BB3 /* FirebaseAuthSwiftUI */; }; + 7EBF26512EBE10DB000F0BB3 /* FirebaseFacebookSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF26502EBE10DB000F0BB3 /* FirebaseFacebookSwiftUI */; }; + 7EBF26532EBE10DB000F0BB3 /* FirebaseGoogleSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF26522EBE10DB000F0BB3 /* FirebaseGoogleSwiftUI */; }; + 7EBF26552EBE10DB000F0BB3 /* FirebaseOAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF26542EBE10DB000F0BB3 /* FirebaseOAuthSwiftUI */; }; + 7EBF26572EBE10DB000F0BB3 /* FirebasePhoneAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF26562EBE10DB000F0BB3 /* FirebasePhoneAuthSwiftUI */; }; + 7EBF26592EBE10DB000F0BB3 /* FirebaseTwitterSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF26582EBE10DB000F0BB3 /* FirebaseTwitterSwiftUI */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -81,15 +83,17 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8D808CB72DB0811900D2293F /* FirebaseFacebookSwiftUI in Frameworks */, + 7EBF26572EBE10DB000F0BB3 /* FirebasePhoneAuthSwiftUI in Frameworks */, 46F89C392D64B04E000F8BC0 /* FirebaseAuthSwiftUI in Frameworks */, - 4610DD2A2EA796360084B32B /* FirebaseAppleSwiftUI in Frameworks */, + 7EBF26512EBE10DB000F0BB3 /* FirebaseFacebookSwiftUI in Frameworks */, + 7EBF264D2EBE10DB000F0BB3 /* FirebaseAppleSwiftUI in Frameworks */, 46F89C4D2D64BB9B000F8BC0 /* FirebaseAuthSwiftUI in Frameworks */, 4607CC9E2D9BFE29009EC3F5 /* FirebaseGoogleSwiftUI in Frameworks */, - 8D808CB92DB081F900D2293F /* FirebasePhoneAuthSwiftUI in Frameworks */, - 4681E0002E97F22B00387C88 /* FirebaseTwitterSwiftUI in Frameworks */, + 7EBF26592EBE10DB000F0BB3 /* FirebaseTwitterSwiftUI in Frameworks */, 4607CC9C2D9BFE29009EC3F5 /* FirebaseAuthSwiftUI in Frameworks */, - 464938E92EA8E6BD0013A9E3 /* FirebaseOAuthSwiftUI in Frameworks */, + 7EBF26532EBE10DB000F0BB3 /* FirebaseGoogleSwiftUI in Frameworks */, + 7EBF264F2EBE10DB000F0BB3 /* FirebaseAuthSwiftUI in Frameworks */, + 7EBF26552EBE10DB000F0BB3 /* FirebaseOAuthSwiftUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -165,11 +169,13 @@ 46F89C4C2D64BB9B000F8BC0 /* FirebaseAuthSwiftUI */, 4607CC9B2D9BFE29009EC3F5 /* FirebaseAuthSwiftUI */, 4607CC9D2D9BFE29009EC3F5 /* FirebaseGoogleSwiftUI */, - 8D808CB62DB0811900D2293F /* FirebaseFacebookSwiftUI */, - 8D808CB82DB081F900D2293F /* FirebasePhoneAuthSwiftUI */, - 4681DFFF2E97F22B00387C88 /* FirebaseTwitterSwiftUI */, - 4610DD292EA796360084B32B /* FirebaseAppleSwiftUI */, - 464938E82EA8E6BD0013A9E3 /* FirebaseOAuthSwiftUI */, + 7EBF264C2EBE10DB000F0BB3 /* FirebaseAppleSwiftUI */, + 7EBF264E2EBE10DB000F0BB3 /* FirebaseAuthSwiftUI */, + 7EBF26502EBE10DB000F0BB3 /* FirebaseFacebookSwiftUI */, + 7EBF26522EBE10DB000F0BB3 /* FirebaseGoogleSwiftUI */, + 7EBF26542EBE10DB000F0BB3 /* FirebaseOAuthSwiftUI */, + 7EBF26562EBE10DB000F0BB3 /* FirebasePhoneAuthSwiftUI */, + 7EBF26582EBE10DB000F0BB3 /* FirebaseTwitterSwiftUI */, ); productName = FirebaseSwiftUIExample; productReference = 46F89C082D64A86C000F8BC0 /* FirebaseSwiftUIExample.app */; @@ -256,8 +262,8 @@ mainGroup = 46F89BFF2D64A86C000F8BC0; minimizedProjectReferenceProxies = 1; packageReferences = ( - 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */, 4600E5502DD777BE00EED5F3 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + 7EBF264B2EBE10DB000F0BB3 /* XCLocalSwiftPackageReference "../../../FirebaseUI-iOS" */, ); preferredProjectObjectVersion = 77; productRefGroup = 46F89C092D64A86C000F8BC0 /* Products */; @@ -633,9 +639,9 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */ = { + 7EBF264B2EBE10DB000F0BB3 /* XCLocalSwiftPackageReference "../../../FirebaseUI-iOS" */ = { isa = XCLocalSwiftPackageReference; - relativePath = "../../../../FirebaseUI-iOS"; + relativePath = "../../../FirebaseUI-iOS"; }; /* End XCLocalSwiftPackageReference section */ @@ -669,39 +675,42 @@ isa = XCSwiftPackageProductDependency; productName = FirebaseGoogleSwiftUI; }; - 4610DD292EA796360084B32B /* FirebaseAppleSwiftUI */ = { + 46F89C382D64B04E000F8BC0 /* FirebaseAuthSwiftUI */ = { isa = XCSwiftPackageProductDependency; - package = 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */; - productName = FirebaseAppleSwiftUI; + productName = FirebaseAuthSwiftUI; }; - 464938E82EA8E6BD0013A9E3 /* FirebaseOAuthSwiftUI */ = { + 46F89C4C2D64BB9B000F8BC0 /* FirebaseAuthSwiftUI */ = { isa = XCSwiftPackageProductDependency; - package = 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */; - productName = FirebaseOAuthSwiftUI; + productName = FirebaseAuthSwiftUI; }; - 4681DFFF2E97F22B00387C88 /* FirebaseTwitterSwiftUI */ = { + 7EBF264C2EBE10DB000F0BB3 /* FirebaseAppleSwiftUI */ = { isa = XCSwiftPackageProductDependency; - package = 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */; - productName = FirebaseTwitterSwiftUI; + productName = FirebaseAppleSwiftUI; }; - 46F89C382D64B04E000F8BC0 /* FirebaseAuthSwiftUI */ = { + 7EBF264E2EBE10DB000F0BB3 /* FirebaseAuthSwiftUI */ = { isa = XCSwiftPackageProductDependency; productName = FirebaseAuthSwiftUI; }; - 46F89C4C2D64BB9B000F8BC0 /* FirebaseAuthSwiftUI */ = { + 7EBF26502EBE10DB000F0BB3 /* FirebaseFacebookSwiftUI */ = { isa = XCSwiftPackageProductDependency; - productName = FirebaseAuthSwiftUI; + productName = FirebaseFacebookSwiftUI; }; - 8D808CB62DB0811900D2293F /* FirebaseFacebookSwiftUI */ = { + 7EBF26522EBE10DB000F0BB3 /* FirebaseGoogleSwiftUI */ = { isa = XCSwiftPackageProductDependency; - package = 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */; - productName = FirebaseFacebookSwiftUI; + productName = FirebaseGoogleSwiftUI; + }; + 7EBF26542EBE10DB000F0BB3 /* FirebaseOAuthSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseOAuthSwiftUI; }; - 8D808CB82DB081F900D2293F /* FirebasePhoneAuthSwiftUI */ = { + 7EBF26562EBE10DB000F0BB3 /* FirebasePhoneAuthSwiftUI */ = { isa = XCSwiftPackageProductDependency; - package = 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */; productName = FirebasePhoneAuthSwiftUI; }; + 7EBF26582EBE10DB000F0BB3 /* FirebaseTwitterSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseTwitterSwiftUI; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 46F89C002D64A86C000F8BC0 /* Project object */; diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExampleTests.xcscheme b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExampleTests.xcscheme similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExampleTests.xcscheme rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExampleTests.xcscheme diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExampleUITests.xcscheme b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExampleUITests.xcscheme similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExampleUITests.xcscheme rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExampleUITests.xcscheme diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/.firebaserc b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/.firebaserc similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/.firebaserc rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/.firebaserc diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/.gitignore b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/.gitignore similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/.gitignore rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/.gitignore diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/App/ContentView.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/App/ContentView.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/App/ContentView.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/App/ContentView.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/App/FirebaseSwiftUIExampleApp.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/App/FirebaseSwiftUIExampleApp.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/App/FirebaseSwiftUIExampleApp.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/App/FirebaseSwiftUIExampleApp.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AccentColor.colorset/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AccentColor.colorset/Contents.json rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AppIcon.appiconset/Contents.json rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/Contents.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/Contents.json rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/Contents.json diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/Contents.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/Contents.json rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/Contents.json diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/line-button.colorset/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/line-button.colorset/Contents.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/line-button.colorset/Contents.json rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/line-button.colorset/Contents.json diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Preview Content/Preview Assets.xcassets/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Preview Content/Preview Assets.xcassets/Contents.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Preview Content/Preview Assets.xcassets/Contents.json rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Preview Content/Preview Assets.xcassets/Contents.json diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/TestView.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/TestView.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/TestView.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/TestView.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase.json rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase.json diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAEnrolmentUITests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAEnrolmentUITests.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAEnrolmentUITests.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAEnrolmentUITests.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAResolutionUITests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAResolutionUITests.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAResolutionUITests.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAResolutionUITests.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/ProviderUITests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/ProviderUITests.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/ProviderUITests.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/ProviderUITests.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/TestUtils.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/TestUtils.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/TestUtils.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/TestUtils.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/UpgradeAccountUITests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/UpgradeAccountUITests.swift similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/UpgradeAccountUITests.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/UpgradeAccountUITests.swift diff --git a/samples/swiftui/FirebaseSwiftUIExample/GoogleService-Info.plist b/e2eTest/FirebaseSwiftUIExample/GoogleService-Info.plist similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/GoogleService-Info.plist rename to e2eTest/FirebaseSwiftUIExample/GoogleService-Info.plist diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp.xcodeproj/project.pbxproj b/samples/swiftui/FirebaseUIApp/FirebaseUIApp.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..feab87f9fa --- /dev/null +++ b/samples/swiftui/FirebaseUIApp/FirebaseUIApp.xcodeproj/project.pbxproj @@ -0,0 +1,575 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXContainerItemProxy section */ + 7EBF26042EBE0F84000F0BB3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EBF25EE2EBE0F83000F0BB3 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7EBF25F52EBE0F83000F0BB3; + remoteInfo = FirebaseUIApp; + }; + 7EBF260E2EBE0F84000F0BB3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EBF25EE2EBE0F83000F0BB3 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7EBF25F52EBE0F83000F0BB3; + remoteInfo = FirebaseUIApp; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 7EBF25F62EBE0F83000F0BB3 /* FirebaseUIApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FirebaseUIApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7EBF26032EBE0F84000F0BB3 /* FirebaseUIAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseUIAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 7EBF260D2EBE0F84000F0BB3 /* FirebaseUIAppUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseUIAppUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 7EBF25F82EBE0F83000F0BB3 /* FirebaseUIApp */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = FirebaseUIApp; + sourceTree = ""; + }; + 7EBF26062EBE0F84000F0BB3 /* FirebaseUIAppTests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = FirebaseUIAppTests; + sourceTree = ""; + }; + 7EBF26102EBE0F84000F0BB3 /* FirebaseUIAppUITests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = FirebaseUIAppUITests; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7EBF25F32EBE0F83000F0BB3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7EBF26002EBE0F84000F0BB3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7EBF260A2EBE0F84000F0BB3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7EBF25ED2EBE0F83000F0BB3 = { + isa = PBXGroup; + children = ( + 7EBF25F82EBE0F83000F0BB3 /* FirebaseUIApp */, + 7EBF26062EBE0F84000F0BB3 /* FirebaseUIAppTests */, + 7EBF26102EBE0F84000F0BB3 /* FirebaseUIAppUITests */, + 7EBF25F72EBE0F83000F0BB3 /* Products */, + ); + sourceTree = ""; + }; + 7EBF25F72EBE0F83000F0BB3 /* Products */ = { + isa = PBXGroup; + children = ( + 7EBF25F62EBE0F83000F0BB3 /* FirebaseUIApp.app */, + 7EBF26032EBE0F84000F0BB3 /* FirebaseUIAppTests.xctest */, + 7EBF260D2EBE0F84000F0BB3 /* FirebaseUIAppUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 7EBF25F52EBE0F83000F0BB3 /* FirebaseUIApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7EBF26172EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIApp" */; + buildPhases = ( + 7EBF25F22EBE0F83000F0BB3 /* Sources */, + 7EBF25F32EBE0F83000F0BB3 /* Frameworks */, + 7EBF25F42EBE0F83000F0BB3 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 7EBF25F82EBE0F83000F0BB3 /* FirebaseUIApp */, + ); + name = FirebaseUIApp; + packageProductDependencies = ( + ); + productName = FirebaseUIApp; + productReference = 7EBF25F62EBE0F83000F0BB3 /* FirebaseUIApp.app */; + productType = "com.apple.product-type.application"; + }; + 7EBF26022EBE0F84000F0BB3 /* FirebaseUIAppTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7EBF261A2EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIAppTests" */; + buildPhases = ( + 7EBF25FF2EBE0F84000F0BB3 /* Sources */, + 7EBF26002EBE0F84000F0BB3 /* Frameworks */, + 7EBF26012EBE0F84000F0BB3 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 7EBF26052EBE0F84000F0BB3 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 7EBF26062EBE0F84000F0BB3 /* FirebaseUIAppTests */, + ); + name = FirebaseUIAppTests; + packageProductDependencies = ( + ); + productName = FirebaseUIAppTests; + productReference = 7EBF26032EBE0F84000F0BB3 /* FirebaseUIAppTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 7EBF260C2EBE0F84000F0BB3 /* FirebaseUIAppUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7EBF261D2EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIAppUITests" */; + buildPhases = ( + 7EBF26092EBE0F84000F0BB3 /* Sources */, + 7EBF260A2EBE0F84000F0BB3 /* Frameworks */, + 7EBF260B2EBE0F84000F0BB3 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 7EBF260F2EBE0F84000F0BB3 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 7EBF26102EBE0F84000F0BB3 /* FirebaseUIAppUITests */, + ); + name = FirebaseUIAppUITests; + packageProductDependencies = ( + ); + productName = FirebaseUIAppUITests; + productReference = 7EBF260D2EBE0F84000F0BB3 /* FirebaseUIAppUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7EBF25EE2EBE0F83000F0BB3 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 2610; + LastUpgradeCheck = 2610; + TargetAttributes = { + 7EBF25F52EBE0F83000F0BB3 = { + CreatedOnToolsVersion = 26.1; + }; + 7EBF26022EBE0F84000F0BB3 = { + CreatedOnToolsVersion = 26.1; + TestTargetID = 7EBF25F52EBE0F83000F0BB3; + }; + 7EBF260C2EBE0F84000F0BB3 = { + CreatedOnToolsVersion = 26.1; + TestTargetID = 7EBF25F52EBE0F83000F0BB3; + }; + }; + }; + buildConfigurationList = 7EBF25F12EBE0F83000F0BB3 /* Build configuration list for PBXProject "FirebaseUIApp" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 7EBF25ED2EBE0F83000F0BB3; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + productRefGroup = 7EBF25F72EBE0F83000F0BB3 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7EBF25F52EBE0F83000F0BB3 /* FirebaseUIApp */, + 7EBF26022EBE0F84000F0BB3 /* FirebaseUIAppTests */, + 7EBF260C2EBE0F84000F0BB3 /* FirebaseUIAppUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7EBF25F42EBE0F83000F0BB3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7EBF26012EBE0F84000F0BB3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7EBF260B2EBE0F84000F0BB3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7EBF25F22EBE0F83000F0BB3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7EBF25FF2EBE0F84000F0BB3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7EBF26092EBE0F84000F0BB3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 7EBF26052EBE0F84000F0BB3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 7EBF25F52EBE0F83000F0BB3 /* FirebaseUIApp */; + targetProxy = 7EBF26042EBE0F84000F0BB3 /* PBXContainerItemProxy */; + }; + 7EBF260F2EBE0F84000F0BB3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 7EBF25F52EBE0F83000F0BB3 /* FirebaseUIApp */; + targetProxy = 7EBF260E2EBE0F84000F0BB3 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 7EBF26152EBE0F84000F0BB3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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 = 26.1; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 7EBF26162EBE0F84000F0BB3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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 = 26.1; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7EBF26182EBE0F84000F0BB3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7EBF26192EBE0F84000F0BB3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 7EBF261B2EBE0F84000F0BB3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.1; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIAppTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FirebaseUIApp.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FirebaseUIApp"; + }; + name = Debug; + }; + 7EBF261C2EBE0F84000F0BB3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.1; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIAppTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FirebaseUIApp.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FirebaseUIApp"; + }; + name = Release; + }; + 7EBF261E2EBE0F84000F0BB3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIAppUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = FirebaseUIApp; + }; + name = Debug; + }; + 7EBF261F2EBE0F84000F0BB3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIAppUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = FirebaseUIApp; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7EBF25F12EBE0F83000F0BB3 /* Build configuration list for PBXProject "FirebaseUIApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7EBF26152EBE0F84000F0BB3 /* Debug */, + 7EBF26162EBE0F84000F0BB3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7EBF26172EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7EBF26182EBE0F84000F0BB3 /* Debug */, + 7EBF26192EBE0F84000F0BB3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7EBF261A2EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIAppTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7EBF261B2EBE0F84000F0BB3 /* Debug */, + 7EBF261C2EBE0F84000F0BB3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7EBF261D2EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIAppUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7EBF261E2EBE0F84000F0BB3 /* Debug */, + 7EBF261F2EBE0F84000F0BB3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 7EBF25EE2EBE0F83000F0BB3 /* Project object */; +} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AccentColor.colorset/Contents.json b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000000..eb87897008 --- /dev/null +++ b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..2305880107 --- /dev/null +++ b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/Contents.json b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/Contents.json new file mode 100644 index 0000000000..73c00596a7 --- /dev/null +++ b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/ContentView.swift b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/ContentView.swift new file mode 100644 index 0000000000..3f09fe88fd --- /dev/null +++ b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/ContentView.swift @@ -0,0 +1,24 @@ +// +// ContentView.swift +// FirebaseUIApp +// +// Created by Ademola Fadumo on 07/11/2025. +// + +import SwiftUI + +struct ContentView: View { + var body: some View { + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundStyle(.tint) + Text("Hello, world!") + } + .padding() + } +} + +#Preview { + ContentView() +} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/FirebaseUIAppApp.swift b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/FirebaseUIAppApp.swift new file mode 100644 index 0000000000..9d2928f487 --- /dev/null +++ b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/FirebaseUIAppApp.swift @@ -0,0 +1,17 @@ +// +// FirebaseUIAppApp.swift +// FirebaseUIApp +// +// Created by Ademola Fadumo on 07/11/2025. +// + +import SwiftUI + +@main +struct FirebaseUIAppApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIAppTests/FirebaseUIAppTests.swift b/samples/swiftui/FirebaseUIApp/FirebaseUIAppTests/FirebaseUIAppTests.swift new file mode 100644 index 0000000000..2a37f2fe3c --- /dev/null +++ b/samples/swiftui/FirebaseUIApp/FirebaseUIAppTests/FirebaseUIAppTests.swift @@ -0,0 +1,36 @@ +// +// FirebaseUIAppTests.swift +// FirebaseUIAppTests +// +// Created by Ademola Fadumo on 07/11/2025. +// + +import XCTest +@testable import FirebaseUIApp + +final class FirebaseUIAppTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITests.swift b/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITests.swift new file mode 100644 index 0000000000..c4fb341ebd --- /dev/null +++ b/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITests.swift @@ -0,0 +1,41 @@ +// +// FirebaseUIAppUITests.swift +// FirebaseUIAppUITests +// +// Created by Ademola Fadumo on 07/11/2025. +// + +import XCTest + +final class FirebaseUIAppUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + @MainActor + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + @MainActor + func testLaunchPerformance() throws { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } +} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITestsLaunchTests.swift b/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITestsLaunchTests.swift new file mode 100644 index 0000000000..805cf9737b --- /dev/null +++ b/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITestsLaunchTests.swift @@ -0,0 +1,33 @@ +// +// FirebaseUIAppUITestsLaunchTests.swift +// FirebaseUIAppUITests +// +// Created by Ademola Fadumo on 07/11/2025. +// + +import XCTest + +final class FirebaseUIAppUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + @MainActor + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +} From 9f15c725fb0aa21cf234761bc43778852cd2f9bc Mon Sep 17 00:00:00 2001 From: Ademola Fadumo Date: Fri, 7 Nov 2025 16:23:54 +0100 Subject: [PATCH 2/3] sample app for FirebaseUI demo --- e2eTest/firebase-debug.log | 35 ++ .../swiftui/FirebaseSwiftUISample/.gitignore | 110 ++++ .../project.pbxproj | 423 +++++++++++++ .../Application/AppDelegate.swift | 72 +++ .../Application/ContentView.swift | 128 ++++ .../FirebaseSwiftUISampleApp.swift | 26 + .../AccentColor.colorset/Contents.json | 0 .../AppIcon.appiconset/Contents.json | 0 .../Assets.xcassets/Contents.json | 0 .../ic-line-logo.imageset/Contents.json | 23 + .../fui-ic-line-logo-x2.png | Bin 0 -> 3092 bytes .../fui-ic-line-logo-x3.png | Bin 0 -> 4825 bytes .../fui-ic-line-logo.png | Bin 0 -> 1432 bytes .../line-button.colorset/Contents.json | 38 ++ .../Examples/AuthPickerViewExample.swift | 64 ++ .../Examples/CustomViewExample.swift | 263 ++++++++ .../FirebaseSwiftUISample.entitlements | 12 + .../FirebaseSwiftUISample/Info.plist | 52 ++ .../GoogleService-Info.plist | 38 ++ .../FirebaseUIApp.xcodeproj/project.pbxproj | 575 ------------------ .../FirebaseUIApp/ContentView.swift | 24 - .../FirebaseUIApp/FirebaseUIAppApp.swift | 17 - .../FirebaseUIAppTests.swift | 36 -- .../FirebaseUIAppUITests.swift | 41 -- .../FirebaseUIAppUITestsLaunchTests.swift | 33 - 25 files changed, 1284 insertions(+), 726 deletions(-) create mode 100644 e2eTest/firebase-debug.log create mode 100644 samples/swiftui/FirebaseSwiftUISample/.gitignore create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample.xcodeproj/project.pbxproj create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/AppDelegate.swift create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/ContentView.swift create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/FirebaseSwiftUISampleApp.swift rename samples/swiftui/{FirebaseUIApp/FirebaseUIApp => FirebaseSwiftUISample/FirebaseSwiftUISample}/Assets.xcassets/AccentColor.colorset/Contents.json (100%) rename samples/swiftui/{FirebaseUIApp/FirebaseUIApp => FirebaseSwiftUISample/FirebaseSwiftUISample}/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename samples/swiftui/{FirebaseUIApp/FirebaseUIApp => FirebaseSwiftUISample/FirebaseSwiftUISample}/Assets.xcassets/Contents.json (100%) create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/Contents.json create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/line-button.colorset/Contents.json create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Examples/AuthPickerViewExample.swift create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Examples/CustomViewExample.swift create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements create mode 100644 samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Info.plist create mode 100644 samples/swiftui/FirebaseSwiftUISample/GoogleService-Info.plist delete mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIApp.xcodeproj/project.pbxproj delete mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIApp/ContentView.swift delete mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIApp/FirebaseUIAppApp.swift delete mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIAppTests/FirebaseUIAppTests.swift delete mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITests.swift delete mode 100644 samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITestsLaunchTests.swift diff --git a/e2eTest/firebase-debug.log b/e2eTest/firebase-debug.log new file mode 100644 index 0000000000..cb5bd2446b --- /dev/null +++ b/e2eTest/firebase-debug.log @@ -0,0 +1,35 @@ +[debug] [2025-11-07T15:17:13.233Z] ---------------------------------------------------------------------- +[debug] [2025-11-07T15:17:13.237Z] Command: /opt/homebrew/Cellar/node/25.1.0_1/bin/node /Users/ademolafadumo/.npm-global/bin/firebase emulators:start --only auth +[debug] [2025-11-07T15:17:13.237Z] CLI Version: 14.23.0 +[debug] [2025-11-07T15:17:13.237Z] Platform: darwin +[debug] [2025-11-07T15:17:13.237Z] Node Version: v25.1.0 +[debug] [2025-11-07T15:17:13.237Z] Time: Fri Nov 07 2025 16:17:13 GMT+0100 (West Africa Standard Time) +[debug] [2025-11-07T15:17:13.237Z] ---------------------------------------------------------------------- +[debug] +[debug] [2025-11-07T15:17:13.257Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] +[debug] [2025-11-07T15:17:13.257Z] > authorizing via signed-in user (demolafadumo@gmail.com) +[warn] ⚠ Could not find config (firebase.json) so using defaults. +[info] i emulators: Starting emulators: auth {"metadata":{"emulator":{"name":"hub"},"message":"Starting emulators: auth"}} +[info] i emulators: Detected demo project ID "demo-no-project", emulated services will use a demo configuration and attempts to access non-emulated services for this project will fail. {"metadata":{"emulator":{"name":"hub"},"message":"Detected demo project ID \"demo-no-project\", emulated services will use a demo configuration and attempts to access non-emulated services for this project will fail."}} +[debug] [2025-11-07T15:17:13.690Z] [logging] Logging Emulator only supports listening on one address (127.0.0.1). Not listening on ::1 +[debug] [2025-11-07T15:17:13.690Z] [auth] Authentication Emulator only supports listening on one address (127.0.0.1). Not listening on ::1 +[debug] [2025-11-07T15:17:13.690Z] assigned listening specs for emulators {"user":{"hub":[{"address":"127.0.0.1","family":"IPv4","port":4400},{"address":"::1","family":"IPv6","port":4400}],"ui":[{"address":"127.0.0.1","family":"IPv4","port":4000},{"address":"::1","family":"IPv6","port":4000}],"logging":[{"address":"127.0.0.1","family":"IPv4","port":4500}],"auth":[{"address":"127.0.0.1","family":"IPv4","port":9099}]},"metadata":{"message":"assigned listening specs for emulators"}} +[debug] [2025-11-07T15:17:13.693Z] Emulator locator file path: /var/folders/pw/cv4hgr3x2fbcrxbj9s2d60dw0000gn/T/hub-demo-no-project.json +[debug] [2025-11-07T15:17:13.693Z] [hub] writing locator at /var/folders/pw/cv4hgr3x2fbcrxbj9s2d60dw0000gn/T/hub-demo-no-project.json +[debug] [2025-11-07T15:17:17.123Z] Could not find VSCode notification endpoint: FetchError: request to http://localhost:40001/vscode/notify failed, reason: . If you are not running the Firebase Data Connect VSCode extension, this is expected and not an issue. +[info] +┌─────────────────────────────────────────────────────────────┐ +│ ✔ All emulators ready! It is now safe to connect your app. │ +│ i View Emulator UI at http://127.0.0.1:4000/ │ +└─────────────────────────────────────────────────────────────┘ + +┌────────────────┬────────────────┬────────────────────────────┐ +│ Emulator │ Host:Port │ View in Emulator UI │ +├────────────────┼────────────────┼────────────────────────────┤ +│ Authentication │ 127.0.0.1:9099 │ http://127.0.0.1:4000/auth │ +└────────────────┴────────────────┴────────────────────────────┘ + Emulator Hub host: 127.0.0.1 port: 4400 + Other reserved ports: 4500 + +Issues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files. + diff --git a/samples/swiftui/FirebaseSwiftUISample/.gitignore b/samples/swiftui/FirebaseSwiftUISample/.gitignore new file mode 100644 index 0000000000..7c074c1f19 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/.gitignore @@ -0,0 +1,110 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ +# +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +# Firebase +GoogleService-Info.plist + +# macOS +.DS_Store + +# Swift +*.swiftpm +.swiftpm + +# Backup files +*~.nib +*.swp +*.swo +*~ + +# IDE +.vscode/ +.idea/ diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample.xcodeproj/project.pbxproj b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..c4cf9fadf6 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample.xcodeproj/project.pbxproj @@ -0,0 +1,423 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 7EDAD81D2EBE23A5002EC70E /* FirebaseAppleSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD81C2EBE23A5002EC70E /* FirebaseAppleSwiftUI */; }; + 7EDAD81F2EBE23A5002EC70E /* FirebaseAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD81E2EBE23A5002EC70E /* FirebaseAuthSwiftUI */; }; + 7EDAD8212EBE23A5002EC70E /* FirebaseFacebookSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD8202EBE23A5002EC70E /* FirebaseFacebookSwiftUI */; }; + 7EDAD8232EBE23A5002EC70E /* FirebaseGoogleSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD8222EBE23A5002EC70E /* FirebaseGoogleSwiftUI */; }; + 7EDAD8252EBE23A5002EC70E /* FirebaseOAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD8242EBE23A5002EC70E /* FirebaseOAuthSwiftUI */; }; + 7EDAD8272EBE23A5002EC70E /* FirebasePhoneAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD8262EBE23A5002EC70E /* FirebasePhoneAuthSwiftUI */; }; + 7EDAD8292EBE23A5002EC70E /* FirebaseTwitterSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD8282EBE23A5002EC70E /* FirebaseTwitterSwiftUI */; }; + 7EDAD82B2EBE23C3002EC70E /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7EDAD82A2EBE23C3002EC70E /* GoogleService-Info.plist */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 7EDAD7E42EBE2363002EC70E /* FirebaseSwiftUISample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FirebaseSwiftUISample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7EDAD82A2EBE23C3002EC70E /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 7EDAD8DF2EBE2F7C002EC70E /* Exceptions for "FirebaseSwiftUISample" folder in "FirebaseSwiftUISample" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = 7EDAD7E32EBE2363002EC70E /* FirebaseSwiftUISample */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 7EDAD7E62EBE2363002EC70E /* FirebaseSwiftUISample */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 7EDAD8DF2EBE2F7C002EC70E /* Exceptions for "FirebaseSwiftUISample" folder in "FirebaseSwiftUISample" target */, + ); + path = FirebaseSwiftUISample; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7EDAD7E12EBE2363002EC70E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7EDAD81D2EBE23A5002EC70E /* FirebaseAppleSwiftUI in Frameworks */, + 7EDAD81F2EBE23A5002EC70E /* FirebaseAuthSwiftUI in Frameworks */, + 7EDAD8232EBE23A5002EC70E /* FirebaseGoogleSwiftUI in Frameworks */, + 7EDAD8212EBE23A5002EC70E /* FirebaseFacebookSwiftUI in Frameworks */, + 7EDAD8272EBE23A5002EC70E /* FirebasePhoneAuthSwiftUI in Frameworks */, + 7EDAD8292EBE23A5002EC70E /* FirebaseTwitterSwiftUI in Frameworks */, + 7EDAD8252EBE23A5002EC70E /* FirebaseOAuthSwiftUI in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7EDAD7DB2EBE2363002EC70E = { + isa = PBXGroup; + children = ( + 7EDAD82A2EBE23C3002EC70E /* GoogleService-Info.plist */, + 7EDAD7E62EBE2363002EC70E /* FirebaseSwiftUISample */, + 7EDAD7E52EBE2363002EC70E /* Products */, + ); + sourceTree = ""; + }; + 7EDAD7E52EBE2363002EC70E /* Products */ = { + isa = PBXGroup; + children = ( + 7EDAD7E42EBE2363002EC70E /* FirebaseSwiftUISample.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 7EDAD7E32EBE2363002EC70E /* FirebaseSwiftUISample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7EDAD7EF2EBE2364002EC70E /* Build configuration list for PBXNativeTarget "FirebaseSwiftUISample" */; + buildPhases = ( + 7EDAD7E02EBE2363002EC70E /* Sources */, + 7EDAD7E12EBE2363002EC70E /* Frameworks */, + 7EDAD7E22EBE2363002EC70E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 7EDAD7E62EBE2363002EC70E /* FirebaseSwiftUISample */, + ); + name = FirebaseSwiftUISample; + packageProductDependencies = ( + 7EDAD81C2EBE23A5002EC70E /* FirebaseAppleSwiftUI */, + 7EDAD81E2EBE23A5002EC70E /* FirebaseAuthSwiftUI */, + 7EDAD8202EBE23A5002EC70E /* FirebaseFacebookSwiftUI */, + 7EDAD8222EBE23A5002EC70E /* FirebaseGoogleSwiftUI */, + 7EDAD8242EBE23A5002EC70E /* FirebaseOAuthSwiftUI */, + 7EDAD8262EBE23A5002EC70E /* FirebasePhoneAuthSwiftUI */, + 7EDAD8282EBE23A5002EC70E /* FirebaseTwitterSwiftUI */, + ); + productName = FirebaseSwiftUISample; + productReference = 7EDAD7E42EBE2363002EC70E /* FirebaseSwiftUISample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7EDAD7DC2EBE2363002EC70E /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 2610; + LastUpgradeCheck = 2610; + TargetAttributes = { + 7EDAD7E32EBE2363002EC70E = { + CreatedOnToolsVersion = 26.1; + }; + }; + }; + buildConfigurationList = 7EDAD7DF2EBE2363002EC70E /* Build configuration list for PBXProject "FirebaseSwiftUISample" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 7EDAD7DB2EBE2363002EC70E; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 7EDAD81B2EBE23A5002EC70E /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 7EDAD7E52EBE2363002EC70E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7EDAD7E32EBE2363002EC70E /* FirebaseSwiftUISample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7EDAD7E22EBE2363002EC70E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7EDAD82B2EBE23C3002EC70E /* GoogleService-Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7EDAD7E02EBE2363002EC70E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 7EDAD7ED2EBE2364002EC70E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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 = 26.1; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 7EDAD7EE2EBE2364002EC70E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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 = 26.1; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7EDAD7F02EBE2364002EC70E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = FirebaseSwiftUISample/Info.plist; + INFOPLIST_KEY_NSUserTrackingUsageDescription = "Testing - need to authorize User tracking for Facebook classic login."; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7EDAD7F12EBE2364002EC70E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = FirebaseSwiftUISample/Info.plist; + INFOPLIST_KEY_NSUserTrackingUsageDescription = "Testing - need to authorize User tracking for Facebook classic login."; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7EDAD7DF2EBE2363002EC70E /* Build configuration list for PBXProject "FirebaseSwiftUISample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7EDAD7ED2EBE2364002EC70E /* Debug */, + 7EDAD7EE2EBE2364002EC70E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7EDAD7EF2EBE2364002EC70E /* Build configuration list for PBXNativeTarget "FirebaseSwiftUISample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7EDAD7F02EBE2364002EC70E /* Debug */, + 7EDAD7F12EBE2364002EC70E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 7EDAD81B2EBE23A5002EC70E /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = "../../../../FirebaseUI-iOS"; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 7EDAD81C2EBE23A5002EC70E /* FirebaseAppleSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseAppleSwiftUI; + }; + 7EDAD81E2EBE23A5002EC70E /* FirebaseAuthSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseAuthSwiftUI; + }; + 7EDAD8202EBE23A5002EC70E /* FirebaseFacebookSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseFacebookSwiftUI; + }; + 7EDAD8222EBE23A5002EC70E /* FirebaseGoogleSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseGoogleSwiftUI; + }; + 7EDAD8242EBE23A5002EC70E /* FirebaseOAuthSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseOAuthSwiftUI; + }; + 7EDAD8262EBE23A5002EC70E /* FirebasePhoneAuthSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebasePhoneAuthSwiftUI; + }; + 7EDAD8282EBE23A5002EC70E /* FirebaseTwitterSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseTwitterSwiftUI; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 7EDAD7DC2EBE2363002EC70E /* Project object */; +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/AppDelegate.swift b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/AppDelegate.swift new file mode 100644 index 0000000000..8d16d1070c --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/AppDelegate.swift @@ -0,0 +1,72 @@ +// 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 +// +// 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 FacebookCore +import FirebaseAuth +import FirebaseCore +import GoogleSignIn + +class AppDelegate: NSObject, UIApplicationDelegate { + func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [ + UIApplication.LaunchOptionsKey: Any + ]? + ) -> Bool { + FirebaseApp.configure() + + ApplicationDelegate.shared.application( + application, + didFinishLaunchingWithOptions: launchOptions + ) + return true + } + + func application(_: UIApplication, + didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + Auth.auth().setAPNSToken(deviceToken, type: .prod) + } + + func application( + _: UIApplication, + didReceiveRemoteNotification notification: [AnyHashable: Any], + fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) + -> Void + ) { + if Auth.auth().canHandleNotification(notification) { + completionHandler(.noData) + return + } + } + + func application( + _ app: UIApplication, + open url: URL, + options: [UIApplication.OpenURLOptionsKey: Any] = [:] + ) -> Bool { + if Auth.auth().canHandle(url) { return true } + + if ApplicationDelegate.shared.application( + app, + open: url, + sourceApplication: options[UIApplication.OpenURLOptionsKey + .sourceApplication] as? String, + annotation: options[UIApplication.OpenURLOptionsKey.annotation] + ) { + return true + } + + return GIDSignIn.sharedInstance.handle(url) + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/ContentView.swift b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/ContentView.swift new file mode 100644 index 0000000000..293e12dde7 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/ContentView.swift @@ -0,0 +1,128 @@ +// 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 +// +// 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 SwiftUI +import FirebaseAuth +import FirebaseAppleSwiftUI +import FirebasePhoneAuthSwiftUI +import FirebaseGoogleSwiftUI +import FirebaseTwitterSwiftUI +import FirebaseAuthSwiftUI +import FirebaseFacebookSwiftUI +import FirebaseOAuthSwiftUI + + +struct ContentView: View { + init() { + Auth.auth().useEmulator(withHost: "127.0.0.1", port: 9099) + Auth.auth().settings?.isAppVerificationDisabledForTesting = true + //Auth.auth().signInAnonymously() + let actionCodeSettings = ActionCodeSettings() + actionCodeSettings.handleCodeInApp = true + actionCodeSettings.url = URL(string: "https://flutterfire-e2e-tests.firebaseapp.com") + actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!) + actionCodeSettings.linkDomain = "flutterfire-e2e-tests.firebaseapp.com" + let configuration = AuthConfiguration( + shouldAutoUpgradeAnonymousUsers: true, + tosUrl: URL(string: "https://example.com/tos"), + privacyPolicyUrl: URL(string: "https://example.com/privacy"), + emailLinkSignInActionCodeSettings: actionCodeSettings, + mfaEnabled: true + ) + + authService = AuthService( + configuration: configuration + ) + .withAppleSignIn() + .withPhoneSignIn() + .withGoogleSignIn() + .withFacebookSignIn(FacebookProviderSwift()) + .withTwitterSignIn() + .withOAuthSignIn(OAuthProviderSwift.github()) + .withOAuthSignIn(OAuthProviderSwift.microsoft()) + .withOAuthSignIn(OAuthProviderSwift.yahoo()) + .withOAuthSignIn( + OAuthProviderSwift( + providerId: "oidc.line", + displayName: "Sign in with LINE", + buttonIcon: Image(.icLineLogo), + buttonBackgroundColor: .lineButton, + buttonForegroundColor: .white + ) + ) + .withEmailSignIn() + } + + let authService: AuthService + + var body: some View { + NavigationStack { + VStack(spacing: 24) { + NavigationLink { + AuthPickerViewExample() + .navigationTitle("Using AuthPickerView") + } label: { + VStack(alignment: .leading, spacing: 16) { + Text("AuthPickerView example") + .font(.headline) + .fontWeight(.bold) + Text("How to use with AuthPickerView") + Text("• Pre-built authentication UI\n• Automatic flow management\n• Quick integration") + .font(.caption) + .foregroundColor(.secondary) + } + .multilineTextAlignment(.leading) + .padding() + .frame(maxWidth: .infinity, alignment: .leading) + .background { + RoundedRectangle(cornerRadius: 16) + .fill(Color(UIColor.secondarySystemBackground)) + .frame(maxWidth: .infinity) + } + } + .tint(Color(.label)) + NavigationLink { + CustomViewExample() + .navigationTitle("Using AuthService") + } label: { + VStack(alignment: .leading, spacing: 16) { + Text("Custom View example") + .font(.headline) + .fontWeight(.bold) + Text("How to use with AuthService with a custom view") + Text("• Build custom authentication UI\n• Direct AuthService method calls\n• Full control over user experience") + .font(.caption) + .foregroundColor(.secondary) + } + .multilineTextAlignment(.leading) + .padding() + .frame(maxWidth: .infinity, alignment: .leading) + .background { + RoundedRectangle(cornerRadius: 16) + .fill(Color(UIColor.secondarySystemBackground)) + } + } + .tint(Color(.label)) + } + .padding() + .navigationTitle("FirebaseUI Demo") + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + } + .environment(authService) + } +} + +#Preview { + ContentView() +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/FirebaseSwiftUISampleApp.swift b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/FirebaseSwiftUISampleApp.swift new file mode 100644 index 0000000000..b73ad9e225 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/FirebaseSwiftUISampleApp.swift @@ -0,0 +1,26 @@ +// 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 +// +// 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 SwiftUI + +@main +struct FirebaseSwiftUISampleApp: App { + @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate + + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AccentColor.colorset/Contents.json b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AccentColor.colorset/Contents.json rename to samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json rename to samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/Contents.json b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/Contents.json similarity index 100% rename from samples/swiftui/FirebaseUIApp/FirebaseUIApp/Assets.xcassets/Contents.json rename to samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/Contents.json diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/Contents.json b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/Contents.json new file mode 100644 index 0000000000..216d35cbec --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui-ic-line-logo.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui-ic-line-logo-x2.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui-ic-line-logo-x3.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png new file mode 100644 index 0000000000000000000000000000000000000000..924fd4adbc54b34919ac4fde3835261e0d4239ae GIT binary patch literal 3092 zcmV+v4D0iWP)PDN;RMMkkt%u!yH%*Rma5cRE7q;mgC0w(Slb?t zsNtZtAd9Gl6wn}wAS9rH2oW=6B?*&dGMUW&-s}JWGjAA@H%LrD zSsmgjX;RSyAmmFcSFTCSH@-H|;s_w$`$5QyKtco(CnmE!^%w7|{Bgxjk<;LIQUc(6 zLg_w4KG*n~tIffoI}H3kAV44?UCZ`cdl&AVQ?VN)Oi79uU9xkctj@e?mYd>jSIW%XKVo& zf!SbEJR;fc>jgLO0khHs*$Ek7Rv1Am(~$Wb{(fllbb@uD6>Q#a(69-RB-aO*8iofp zr<7@_>}LzUP&FPrh$Bs?0C-W{sARY*ziCqCVyn22!Y;N8KIqLDl3c+gR(D!ZU z>Z-*%Dh3O{pwvJ%YkRr7?_3WLQQ|x%Z$qY%qZtox6s`|zjvnQ%^$a{496~e`;nr>CTb(vnE_NKLzBENcqq`M;gS7rk-b3hr zicB82V@5#iE2mjlo^d<0doDtC@2TiQph)2BcJWy#b8L9$)IP$CT(f~yOia2n8XJ7O z(bWnY^4GzNj61@b8!KSt;4#-tdI0X9u!Q(kG{p$K0Hzx<*NW8e3Q)yQ%zv0xDM|&7 zm+WQtJK(;oB~YF|A59~SDR~jZx6r3ZKZW>Lv-<+Dlw=U3I5$VDay6$qDjUxbZ%&<; z`v~s~NN&~GNN~uzZ~Wqr=0|Tb!vQM>&+)?K-@yQKaE6jrlz+g>TS^N4guV*&#Oo*O zSd}atqBw4Ys|8-4_WYQeO*Du?Y?{6vTHNhXo5{?|$xu`zqh&Mn*SRkaNVdYudM#Q~ zv(gwQ9}q5OxY53Qd0+TD-iagslD52bmK+ecun>4pG0Kyp`hu_5139^#d{GM^jp zOE$v0>*JGtNg{$c5Vp%DDCD(y+Tru!t>L!#{sUh>3CHcVP(AxYC^@_mJiHeU-@J{G z$5Cs>!3A)mVFqj{SO?QSy$v!{X3`g@8b00+RmJay$HQ~pow*R+YI+}3jB=>3eLm1+ z8%t=dMSr~@NFRQjoEr*slZI+R5F|AdbZ{o5MG6ub4Xirxdt%E1>cgOq5cx}xT2>9xkX~Afig=FxIof%FJ^v>x1*A72|G)#pBAt_ps?HkTAjC6r?DUNZ5=9wN{hM3VuN!tpV1|=r<|> z(okZjK$?C0%u6uunwv>^LPP?if;XGD!K>B^vUhrrK-IH%Up4}ZPf)Q^G6S7VqvcdZ zd+tZhHf)j=13i8_Y%bb>cvG4zz3>NRWIhqNOtI!Y+AyGvE5^mPvt!b8ynsx`-uqb;CH6YgJsB!#2|qkIno!p zeRdcQEb8Y%{S%}fs#pb_bv8g@;^fOr2_IB+GA&H2Dnky+K%2W0YG!{BentdCe*>Z5 zuq6F9_z3wym#;4zPL;?!-)P(hFP+O63vXAZ4Mh%vUBNYDzo~QXufJ4XollRyZE4j zC&mO>YN%sj&5B!pWHiAW9Nr@$cXDiYEIrhE#j$bQ24@SDA72CGRH@R$5MjsnJ=^Gk zmcFAD9X--aK*z&JPp>EBu_mO*V?^dHB6$okA&X2yq{s)`GQ@Fl+n=9Y2brpLhz3SR zgT0~aFl|3=+rw(*Q5)jJ__5wvIM{U*t~SWw2r1%)@BTp)!pEvEYEg)7_3oz~C)$py zOq!SjJ z-4Tg$b#--tj!&#>QGGrxOTZH=898x0gFF#c6uRJm?Jz7j`imjtxe)n(o_`N+J$yIW zW0=tXG7>0~lx*wAXK#mK6>&&qj!3k$M*WS_B@A{p`L^vXctUEH0?RD8ca@6lf;}Ck~Zi z{__1MC_Yq9%nau@agq-hrWlzJc^O31ga_Mt;KD~W-o}b=igcD_oWR8O#!!S;@Ifx} z1&k`&QJ7J+04h5VA>Wt~_x^#&>+?-)?Q>t^0kKtFc7Tuef&6DmarKJ5MFA|jksZj5|<;~sa-aa)WWqK-$Pj~PGK|pzR zQh|xB`}?u1SmZHc#e1^m)$8`wHkExL(_|(#%QP|=tzV1?sJ91f9wV+7-E+2+ZD&J@KAYr_K-sDH048Ig%QO!=vf+j@^4r|ZJwms*bs(GgBKOrud{8jt0 zN3_1eqD70C8ui)9x^zRSq0n@rT8mEo20De}$)+n1EpeZbJ9 iu0I%j<9J0sxA`Al@6`OnX?ZpP00004$t;PomH4Qju;sjH%XYwaJJwpac4>CLA*LgUdE zfH+-9tia!7wpg0rjZ%+|tLM&MMZgwHLlI#u6nzlNPhd7Of~b-CEhCm!(T!PD&wzBxprJZ#6X>e|r1qeXs5do10?a6petG zBcA`wvKhvFb7|+%)&M8+BU3PaA<0tGWUEl~U;7F}Ca2heD-{q^&s%pqxX3gv`K_*6 z8=4e1vP^0a$o_you`pG{=z8rZQ(xZ+3WcOZ14wiHH+}KIqviq>PEF_kJK+#e+r^IR zR-f5w`Rb0c#WzAwID=k4r{Ht>)*TNoGUr>~a@3)4gc0V9ql6p)pDE9xa-8a%vH6-i~0#+^pmOH-0%hLXtw+Me~+*W6Y0R%MA1q)aH zbdDvVD0ye+@m3!va4Lu~`~eAkvJX4~FaGsIAP{s3JTHJ6tysgWLBzizAKTOlQxa82 zWut%6eZfNt{puyb;wOwc6g!2@fb2ots?@_WQ5rwB>`wbhIRASJn z-+pAhFW`qauUwD*B^O5tFoDGr;W55xKLAS)u7WIWI;i>ReUxBULEw;U!AIZw z(dysD!h0~VfE*t`lK|-3IG#UPO z-N#I0TfOa3k1g4}0n_c7??6yEJqP!WPIA`zNx$lBvCV)e{EmpHIOeQ{XNrCTKSW=H z{4$$dtjtLXxX=%2&D~kILX)SJX_Q56R<23N?MgPEI_I|hnwpJ=D#CB`z5l9;Og|%r z4irMf%<-tR240)84i;E%WOq`4OGgLMjqziu{PS_kVfpCqV~{u-l_vQ;zCiYM`M-x= zTGVqjvtF71eLg{TSHLSNy7e^hNpz4eOjreTQ?9-!{zeISOqC^^%T<;MU`L-=-dPDo zL9g_1E+ENTU8eribKB|~*!dt7`?D7mtnt}Biu94xxy@&T`?Kf6jcKz+jBvsrpD3Xw zJz206#u@Wirmht3cBh)7WYc3&iFE6>z84M&O63j~z zpN2E&j}$=$&e!7R+ph7=rB_TqsaIq!mi&?;^P&|0ru3OGN@pFBn$s5)#bzf@g><2|S%1NST~mB8n4K6F6BJ zRX{5(GBv3XH?V6%e{uM?@QcfSI^dj|-EFXH+@o;0xsY*A1TV6a1^T>xk0~;aQJxcF z%<=@J38INl$_^-83_*pUMu?8+QVNdENdmKIf=!KIz-<|G;hLl?`rV({$D70sxwyB-RSqhay>m9T&A zrhXTPkjXt>xsC}nJfm}-7EBDEgQ>_WM1qPJ*)=Gf5ZH{)6kev4T?!G98x)%gFcF;v`#P$azgS=W8k(H}oc`|f_NULtrzEIN*y{>9^fpWt3b6L- zcm95NkH1oisQO%;UOTuY4;aOPt7B^4L{UNafDh#<>x-X)89VR6aV()k@(%N>voQ$wzE!**&O$D1+XQ+47!_gFW}L!)He-HV{+7YyUgNM8`|+=UMLyfLKih-C)Nl}eTaomGkpRvM?{cv}-U@BM{a z^rK8S%K>HHy#YI%uOrnl8Ec+Mg9WqM3qco5%|bE<;%SISqSt=xf{^c_J{tK4wtOw* zi^#MnO1T3brd1TCX-p4}!3{7*Bp>ur&0Fx-v!8)MROTCz8-uok&A;cp4tIqd#ad9x zKh_?7iA^9b`eG9vXd5L8JTXe_tY^40HF zoD+>|D(4lanB+sUH0f|(`Hz_yNP&?jBr+{ZChskOj786A2|gXDTUvJ?bFk&SuBNU^ z=GUTtiWji5kYfIr#E`*?RWz*|N*}<2HYaK=CkK7Htacmy&pcw|*4kH9 zMs-vtq5F}nN`!6AU!&805rxE$2y>G{mHdLe%Rnb;hE!Z@5_RCL?syqOT@9|e?AUvT z99FYNrH6E|a>YNo?g%NPfx( zowc^`lS6X2Ea!9?=2Iyp*8AyMuAzYP5FKW*zpdWD?0+hz{NahmGaZmaKeX)Ty509P z8!(8vp)ICD7;`P$iC6aB)wJgft1!YdXN!gwIaWD44mD|E7>^c^inn1Y;YF@^Rnc-J z?yrYYi&JA>V*Q`3>vJL0k{5bD!Z(tqSiQP5!;P{u zbn~FeQ9VRi>u1fo;E#11!HG2z5ns_{vV(zA4HCwuO<$qUc?{c8V_5k;9B5PYT;2a3 z`Ch}P)wR%57JrA}@;m!e-i|{p0>tP+I5ID%?LTi3XJ0d7%YK`;o|&f2HVd>w7UGC7O-AGx@ja0c)(+CRf86^h z{N}_4wxl>#!ok$ZpExN)*tgNfQcqCd=i zv?ut~ThOHbdUh*ZwPQYXBPm8~VGMIDS#42^tz~B(u70=L4iO%Y>dz~(W%>6tuQ+Qz z(VBi9NfQUOq4t!{dJn?ux4!c=ZLs9PQ*2d67PgzESSvJo`^18b^0!l;od*3pPTt>z zQ?@AXeWqe`(v(b|9!7&WflPfCuc8dO#)eAgX+1vB%7>~rel$67daO-Yk7d?DeG zLPQ*3AkFYszqG~I^gk5^mZCI~Y!%`F*31hTF)@Gd)Ng{4ul|8G2gnhJ_lfD4UP(&6 z!Yb}r`z5ja13v6KSmMEIwL8j|&M;(~b~#RU`iL=w7{iO9pYo+vG&Lf&sCyEC__#h< zmi@^End1Hzx91;v_Umv$*zaIUiX;~H=6}272EEm?)lp{~d5?fAgp37S@?}=B()m^K zf!tk3!fy|Bj1uR|LjQ*)8$NfQvCm3m<`zGn6fdA~q~xot;=$kT9D~9+3JSkDCYmyv zY0_0|=8d_0#f+1!`_2Z*m*~!M2|#U1PEMSV?%w+!l^MrYd>CHc5YxxPd+*P~nl>m6g**HLgIbS-cI{3^3rH0Gp~zis*V68J7!DRywt<~K4MV9gqCW7_(${%-#| zdKfL>3q&>OMF54yK+?oC(N%9-(n~mgh;p98{&JJcA1}$7vigRd_H!M1QitzSKa;?| zc}AOV;03Mv(7qMBW>mkshZZHW<^&7@vG{r%Hu(Hai{~5XrEhc|x9R;ZkIeD>#q~|7 zG1@c(uS(E#oY{C_e(7Uhl)?~9sxM-75n-(f+_d@bMH#aTpLaGoQatV5IBhxn9YZk( z5$qUIIRnz9yeKr)ymeslo+m&5r1yMan27bnd%n=9?BK>` zGz?0dz=PVN1zoD%XRonst^Uu0Pab}0&tZtecbUcWOWxQ-=ggTScFdLL<=j~G1AUfp zrl?n2yd5sK4jJ!1NRrg^xWIX!;4B2EM+*r=+LBNxpt04Lo&3~R+4={=R^RR&J9d!c z9TD`b1MjlQYtJ6*hSfhQJmcnUgp&nFuHvM1n}b7!Ae{jT#d*B#1^)BMAbE zJhB*t2r9B6VQdJ<1Y(dm7_2<&9<1F~+V0Wb_8$Lp`k;HkPJ5Gc&%NjSzwiIQ`yT=W z4*@TlHf4&OzBKhkOK$oq?Fij?0HOzi55mM3bouLB&Nc1q{;_e7!{Jb(`_#TbWB_o< zUSyZ1d|6s8TXh9~r-$M;((g^mX;4F!nfPvWocL|_w?()j;uRh&0GpG!-z{B`xj5&L z_p(a`fe0{^5eC&X$s#y*)fU&RKU|F~p@9O3^D9=qWyntXDA?9bX(UZU9w<>AW|f7` z8=hAyiude*s1h*-K4{VD_ zEX5$%qEV?E>bJmg_n%xLUk}r;K%nx_oSh|N#`Fw1XHDKV#TVcxo#AeHZS)FQo%Jkd zMFuolEboy~Xvv3w8iYFURX~nF&>V&_!?XS8n?4q7rDI>}bb1*X&eW1*hUZ3>-WRxk zAOf%0mt%dzxLW@$518^tJ|j+EKWnQbYeq7>wx9>LPumDaO)}gGxS=)B2Iiy`a0lC= z9iJV(a{_XWW1-%64RoRw4z*O`+`;E58UxHQ<-&pH-y`)x%937dme5+`Vq|;N9>~&V z@cAWg12pxt!kFYtaQJUSYtRj!G;D*r=pd~aanHspTcK>m=a~Cst|CWo2an@Hu*SASDLW-1_ zONAwH1V`q~`voVKKz4Fgd|i+PwfT&5yU=>%dYL}U zL=xEyM{DL)l|sG$+I_)US}3-~N2;HKQRqIlH#U+pO~SvQo!&3{ntdVr;)zB0W+v}s zQ6*-~|Nf>5*y}t9AuO;~7zWm1sd1(3@94Y@g{PK54ysNBXOVjvz2yyi|M?-(?215G zaqwNG<8mv-%J=$&*^P=U-Prg(82>typrcr=HeC4%4mVd}qqA`(iNZ|dtwNc36Yp~Z zk5>)Q@cqSkI;*~4f8Y&`l^?Hs^HiwCelx9VA)M=|1)J8=2b@wl%^=imIXfF7M*;11 z;4G+IwN}nFejRXkseKO|X2+I*3uOF?jgp}+YgP-YA7LcT*KWP=NAZDu5IxoUGL~j- zE_pP2b>6X#OD>fR(Wg|UVe>?rSij@1g7a@5{~HE5GVhVav@NVzdlcPO>|=+1hz@w@ z6N!MqZie;?Ex#U_zjqNMmtfY>@=CtY4w;q&I1>1*UPY+M@Az$zRHgglC?ySAmq mxr0`Cey*#lQ|^WBJ^lyYJqeJ0ENk-s0000= 6 + } + + private func handleAuthentication() async { + errorMessage = nil + isLoading = true + + do { + if isSignUp { + _ = try await authService.createUser(email: email, password: password) + } else { + _ = try await authService.signIn(email: email, password: password) + } + } catch { + errorMessage = error.localizedDescription + } + + isLoading = false + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements new file mode 100644 index 0000000000..80b5221de7 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements @@ -0,0 +1,12 @@ + + + + + aps-environment + development + com.apple.developer.applesignin + + Default + + + diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Info.plist b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Info.plist new file mode 100644 index 0000000000..972c78a5b8 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Info.plist @@ -0,0 +1,52 @@ + + + + + CFBundleLocalizations + + en + es + de + fr + + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in + fb128693022464535 + + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + app-1-406099696497-ios-58cbc26aca8e5cf83574d0 + + + + + FacebookAppID + 128693022464535 + FacebookClientToken + 16dbbdf0cfb309034a6ad98ac2a21688 + FacebookDisplayName + Firebase Swift UI App + FirebaseAppDelegateProxyEnabled + + LSApplicationQueriesSchemes + + fbapi + fb-messenger-share-api + + UIBackgroundModes + + fetch + remote-notification + + + diff --git a/samples/swiftui/FirebaseSwiftUISample/GoogleService-Info.plist b/samples/swiftui/FirebaseSwiftUISample/GoogleService-Info.plist new file mode 100644 index 0000000000..f325ead98d --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/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/samples/swiftui/FirebaseUIApp/FirebaseUIApp.xcodeproj/project.pbxproj b/samples/swiftui/FirebaseUIApp/FirebaseUIApp.xcodeproj/project.pbxproj deleted file mode 100644 index feab87f9fa..0000000000 --- a/samples/swiftui/FirebaseUIApp/FirebaseUIApp.xcodeproj/project.pbxproj +++ /dev/null @@ -1,575 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXContainerItemProxy section */ - 7EBF26042EBE0F84000F0BB3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7EBF25EE2EBE0F83000F0BB3 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7EBF25F52EBE0F83000F0BB3; - remoteInfo = FirebaseUIApp; - }; - 7EBF260E2EBE0F84000F0BB3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7EBF25EE2EBE0F83000F0BB3 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7EBF25F52EBE0F83000F0BB3; - remoteInfo = FirebaseUIApp; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 7EBF25F62EBE0F83000F0BB3 /* FirebaseUIApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FirebaseUIApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 7EBF26032EBE0F84000F0BB3 /* FirebaseUIAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseUIAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 7EBF260D2EBE0F84000F0BB3 /* FirebaseUIAppUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseUIAppUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 7EBF25F82EBE0F83000F0BB3 /* FirebaseUIApp */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = FirebaseUIApp; - sourceTree = ""; - }; - 7EBF26062EBE0F84000F0BB3 /* FirebaseUIAppTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = FirebaseUIAppTests; - sourceTree = ""; - }; - 7EBF26102EBE0F84000F0BB3 /* FirebaseUIAppUITests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = FirebaseUIAppUITests; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 7EBF25F32EBE0F83000F0BB3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7EBF26002EBE0F84000F0BB3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7EBF260A2EBE0F84000F0BB3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 7EBF25ED2EBE0F83000F0BB3 = { - isa = PBXGroup; - children = ( - 7EBF25F82EBE0F83000F0BB3 /* FirebaseUIApp */, - 7EBF26062EBE0F84000F0BB3 /* FirebaseUIAppTests */, - 7EBF26102EBE0F84000F0BB3 /* FirebaseUIAppUITests */, - 7EBF25F72EBE0F83000F0BB3 /* Products */, - ); - sourceTree = ""; - }; - 7EBF25F72EBE0F83000F0BB3 /* Products */ = { - isa = PBXGroup; - children = ( - 7EBF25F62EBE0F83000F0BB3 /* FirebaseUIApp.app */, - 7EBF26032EBE0F84000F0BB3 /* FirebaseUIAppTests.xctest */, - 7EBF260D2EBE0F84000F0BB3 /* FirebaseUIAppUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 7EBF25F52EBE0F83000F0BB3 /* FirebaseUIApp */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7EBF26172EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIApp" */; - buildPhases = ( - 7EBF25F22EBE0F83000F0BB3 /* Sources */, - 7EBF25F32EBE0F83000F0BB3 /* Frameworks */, - 7EBF25F42EBE0F83000F0BB3 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 7EBF25F82EBE0F83000F0BB3 /* FirebaseUIApp */, - ); - name = FirebaseUIApp; - packageProductDependencies = ( - ); - productName = FirebaseUIApp; - productReference = 7EBF25F62EBE0F83000F0BB3 /* FirebaseUIApp.app */; - productType = "com.apple.product-type.application"; - }; - 7EBF26022EBE0F84000F0BB3 /* FirebaseUIAppTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7EBF261A2EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIAppTests" */; - buildPhases = ( - 7EBF25FF2EBE0F84000F0BB3 /* Sources */, - 7EBF26002EBE0F84000F0BB3 /* Frameworks */, - 7EBF26012EBE0F84000F0BB3 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 7EBF26052EBE0F84000F0BB3 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 7EBF26062EBE0F84000F0BB3 /* FirebaseUIAppTests */, - ); - name = FirebaseUIAppTests; - packageProductDependencies = ( - ); - productName = FirebaseUIAppTests; - productReference = 7EBF26032EBE0F84000F0BB3 /* FirebaseUIAppTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 7EBF260C2EBE0F84000F0BB3 /* FirebaseUIAppUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7EBF261D2EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIAppUITests" */; - buildPhases = ( - 7EBF26092EBE0F84000F0BB3 /* Sources */, - 7EBF260A2EBE0F84000F0BB3 /* Frameworks */, - 7EBF260B2EBE0F84000F0BB3 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 7EBF260F2EBE0F84000F0BB3 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 7EBF26102EBE0F84000F0BB3 /* FirebaseUIAppUITests */, - ); - name = FirebaseUIAppUITests; - packageProductDependencies = ( - ); - productName = FirebaseUIAppUITests; - productReference = 7EBF260D2EBE0F84000F0BB3 /* FirebaseUIAppUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 7EBF25EE2EBE0F83000F0BB3 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 2610; - LastUpgradeCheck = 2610; - TargetAttributes = { - 7EBF25F52EBE0F83000F0BB3 = { - CreatedOnToolsVersion = 26.1; - }; - 7EBF26022EBE0F84000F0BB3 = { - CreatedOnToolsVersion = 26.1; - TestTargetID = 7EBF25F52EBE0F83000F0BB3; - }; - 7EBF260C2EBE0F84000F0BB3 = { - CreatedOnToolsVersion = 26.1; - TestTargetID = 7EBF25F52EBE0F83000F0BB3; - }; - }; - }; - buildConfigurationList = 7EBF25F12EBE0F83000F0BB3 /* Build configuration list for PBXProject "FirebaseUIApp" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 7EBF25ED2EBE0F83000F0BB3; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 7EBF25F72EBE0F83000F0BB3 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 7EBF25F52EBE0F83000F0BB3 /* FirebaseUIApp */, - 7EBF26022EBE0F84000F0BB3 /* FirebaseUIAppTests */, - 7EBF260C2EBE0F84000F0BB3 /* FirebaseUIAppUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 7EBF25F42EBE0F83000F0BB3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7EBF26012EBE0F84000F0BB3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7EBF260B2EBE0F84000F0BB3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 7EBF25F22EBE0F83000F0BB3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7EBF25FF2EBE0F84000F0BB3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7EBF26092EBE0F84000F0BB3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 7EBF26052EBE0F84000F0BB3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7EBF25F52EBE0F83000F0BB3 /* FirebaseUIApp */; - targetProxy = 7EBF26042EBE0F84000F0BB3 /* PBXContainerItemProxy */; - }; - 7EBF260F2EBE0F84000F0BB3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7EBF25F52EBE0F83000F0BB3 /* FirebaseUIApp */; - targetProxy = 7EBF260E2EBE0F84000F0BB3 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 7EBF26152EBE0F84000F0BB3 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - 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; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - 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 = 26.1; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 7EBF26162EBE0F84000F0BB3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - 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; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - 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 = 26.1; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 7EBF26182EBE0F84000F0BB3 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 7EBF26192EBE0F84000F0BB3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 7EBF261B2EBE0F84000F0BB3 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.1; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIAppTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = NO; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FirebaseUIApp.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FirebaseUIApp"; - }; - name = Debug; - }; - 7EBF261C2EBE0F84000F0BB3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.1; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIAppTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = NO; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FirebaseUIApp.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FirebaseUIApp"; - }; - name = Release; - }; - 7EBF261E2EBE0F84000F0BB3 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIAppUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = NO; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FirebaseUIApp; - }; - name = Debug; - }; - 7EBF261F2EBE0F84000F0BB3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.FirebaseUIAppUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = NO; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FirebaseUIApp; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 7EBF25F12EBE0F83000F0BB3 /* Build configuration list for PBXProject "FirebaseUIApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7EBF26152EBE0F84000F0BB3 /* Debug */, - 7EBF26162EBE0F84000F0BB3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7EBF26172EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7EBF26182EBE0F84000F0BB3 /* Debug */, - 7EBF26192EBE0F84000F0BB3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7EBF261A2EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIAppTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7EBF261B2EBE0F84000F0BB3 /* Debug */, - 7EBF261C2EBE0F84000F0BB3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7EBF261D2EBE0F84000F0BB3 /* Build configuration list for PBXNativeTarget "FirebaseUIAppUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7EBF261E2EBE0F84000F0BB3 /* Debug */, - 7EBF261F2EBE0F84000F0BB3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 7EBF25EE2EBE0F83000F0BB3 /* Project object */; -} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/ContentView.swift b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/ContentView.swift deleted file mode 100644 index 3f09fe88fd..0000000000 --- a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/ContentView.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ContentView.swift -// FirebaseUIApp -// -// Created by Ademola Fadumo on 07/11/2025. -// - -import SwiftUI - -struct ContentView: View { - var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundStyle(.tint) - Text("Hello, world!") - } - .padding() - } -} - -#Preview { - ContentView() -} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/FirebaseUIAppApp.swift b/samples/swiftui/FirebaseUIApp/FirebaseUIApp/FirebaseUIAppApp.swift deleted file mode 100644 index 9d2928f487..0000000000 --- a/samples/swiftui/FirebaseUIApp/FirebaseUIApp/FirebaseUIAppApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// FirebaseUIAppApp.swift -// FirebaseUIApp -// -// Created by Ademola Fadumo on 07/11/2025. -// - -import SwiftUI - -@main -struct FirebaseUIAppApp: App { - var body: some Scene { - WindowGroup { - ContentView() - } - } -} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIAppTests/FirebaseUIAppTests.swift b/samples/swiftui/FirebaseUIApp/FirebaseUIAppTests/FirebaseUIAppTests.swift deleted file mode 100644 index 2a37f2fe3c..0000000000 --- a/samples/swiftui/FirebaseUIApp/FirebaseUIAppTests/FirebaseUIAppTests.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// FirebaseUIAppTests.swift -// FirebaseUIAppTests -// -// Created by Ademola Fadumo on 07/11/2025. -// - -import XCTest -@testable import FirebaseUIApp - -final class FirebaseUIAppTests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testExample() throws { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. - // Any test you write for XCTest can be annotated as throws and async. - // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. - // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. - } - - func testPerformanceExample() throws { - // This is an example of a performance test case. - self.measure { - // Put the code you want to measure the time of here. - } - } - -} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITests.swift b/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITests.swift deleted file mode 100644 index c4fb341ebd..0000000000 --- a/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITests.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// FirebaseUIAppUITests.swift -// FirebaseUIAppUITests -// -// Created by Ademola Fadumo on 07/11/2025. -// - -import XCTest - -final class FirebaseUIAppUITests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - @MainActor - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - @MainActor - func testLaunchPerformance() throws { - // This measures how long it takes to launch your application. - measure(metrics: [XCTApplicationLaunchMetric()]) { - XCUIApplication().launch() - } - } -} diff --git a/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITestsLaunchTests.swift b/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITestsLaunchTests.swift deleted file mode 100644 index 805cf9737b..0000000000 --- a/samples/swiftui/FirebaseUIApp/FirebaseUIAppUITests/FirebaseUIAppUITestsLaunchTests.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// FirebaseUIAppUITestsLaunchTests.swift -// FirebaseUIAppUITests -// -// Created by Ademola Fadumo on 07/11/2025. -// - -import XCTest - -final class FirebaseUIAppUITestsLaunchTests: XCTestCase { - - override class var runsForEachTargetApplicationUIConfiguration: Bool { - true - } - - override func setUpWithError() throws { - continueAfterFailure = false - } - - @MainActor - func testLaunch() throws { - let app = XCUIApplication() - app.launch() - - // Insert steps here to perform after app launch but before taking a screenshot, - // such as logging into a test account or navigating somewhere in the app - - let attachment = XCTAttachment(screenshot: app.screenshot()) - attachment.name = "Launch Screen" - attachment.lifetime = .keepAlways - add(attachment) - } -} From f953e0c2e5e29adb99ea6bb6699c8a38bb710269 Mon Sep 17 00:00:00 2001 From: Ademola Fadumo Date: Fri, 7 Nov 2025 16:41:41 +0100 Subject: [PATCH 3/3] fix: ci failing directory change to e2eTest --- .github/workflows/swiftui-auth.yml | 22 ++++++++++--------- e2eTest/firebase-debug.log | 35 ------------------------------ 2 files changed, 12 insertions(+), 45 deletions(-) delete mode 100644 e2eTest/firebase-debug.log diff --git a/.github/workflows/swiftui-auth.yml b/.github/workflows/swiftui-auth.yml index 44f17a59c5..a9fef9d711 100644 --- a/.github/workflows/swiftui-auth.yml +++ b/.github/workflows/swiftui-auth.yml @@ -6,6 +6,7 @@ on: paths: - '.github/workflows/swiftui-auth.yml' - 'samples/swiftui/**' + - 'e2eTest/**' - 'FirebaseSwiftUI/**' - 'Package.swift' pull_request: @@ -13,6 +14,7 @@ on: paths: - '.github/workflows/swiftui-auth.yml' - 'samples/swiftui/**' + - 'e2eTest/**' - 'FirebaseSwiftUI/**' - 'Package.swift' @@ -83,7 +85,7 @@ jobs: - name: Start Firebase Emulator run: | sudo chown -R 501:20 "/Users/runner/.npm" - cd ./samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample + cd ./e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample ./start-firebase-emulator.sh - name: Install xcpretty @@ -94,7 +96,7 @@ jobs: - name: Build for Integration Tests run: | - cd ./samples/swiftui/FirebaseSwiftUIExample + cd ./e2eTest/FirebaseSwiftUIExample set -o pipefail xcodebuild build-for-testing \ -scheme FirebaseSwiftUIExampleTests \ @@ -103,7 +105,7 @@ jobs: - name: Run Integration Tests run: | - cd ./samples/swiftui/FirebaseSwiftUIExample + cd ./e2eTest/FirebaseSwiftUIExample set -o pipefail xcodebuild test-without-building \ -scheme FirebaseSwiftUIExampleTests \ @@ -116,14 +118,14 @@ jobs: uses: actions/upload-artifact@v4 with: name: integration-tests-logs - path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.log + path: e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.log - name: Upload test results if: failure() uses: actions/upload-artifact@v4 with: name: integration-tests-results - path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.xcresult + path: e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.xcresult # UI Tests (requires emulator) ui-tests: @@ -149,7 +151,7 @@ jobs: - name: Start Firebase Emulator run: | sudo chown -R 501:20 "/Users/runner/.npm" - cd ./samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample + cd ./e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample ./start-firebase-emulator.sh - name: Install xcpretty @@ -160,7 +162,7 @@ jobs: - name: Build for UI Tests run: | - cd ./samples/swiftui/FirebaseSwiftUIExample + cd ./e2eTest/FirebaseSwiftUIExample set -o pipefail xcodebuild build-for-testing \ -scheme FirebaseSwiftUIExampleUITests \ @@ -169,7 +171,7 @@ jobs: - name: Run UI Tests run: | - cd ./samples/swiftui/FirebaseSwiftUIExample + cd ./e2eTest/FirebaseSwiftUIExample set -o pipefail xcodebuild test-without-building \ -scheme FirebaseSwiftUIExampleUITests \ @@ -184,11 +186,11 @@ jobs: uses: actions/upload-artifact@v4 with: name: firebase-emulator-logs - path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase-debug.log + path: e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase-debug.log - name: Upload test results if: failure() uses: actions/upload-artifact@v4 with: name: FirebaseSwiftUIExampleUITests.xcresult - path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests.xcresult \ No newline at end of file + path: e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests.xcresult \ No newline at end of file diff --git a/e2eTest/firebase-debug.log b/e2eTest/firebase-debug.log deleted file mode 100644 index cb5bd2446b..0000000000 --- a/e2eTest/firebase-debug.log +++ /dev/null @@ -1,35 +0,0 @@ -[debug] [2025-11-07T15:17:13.233Z] ---------------------------------------------------------------------- -[debug] [2025-11-07T15:17:13.237Z] Command: /opt/homebrew/Cellar/node/25.1.0_1/bin/node /Users/ademolafadumo/.npm-global/bin/firebase emulators:start --only auth -[debug] [2025-11-07T15:17:13.237Z] CLI Version: 14.23.0 -[debug] [2025-11-07T15:17:13.237Z] Platform: darwin -[debug] [2025-11-07T15:17:13.237Z] Node Version: v25.1.0 -[debug] [2025-11-07T15:17:13.237Z] Time: Fri Nov 07 2025 16:17:13 GMT+0100 (West Africa Standard Time) -[debug] [2025-11-07T15:17:13.237Z] ---------------------------------------------------------------------- -[debug] -[debug] [2025-11-07T15:17:13.257Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"] -[debug] [2025-11-07T15:17:13.257Z] > authorizing via signed-in user (demolafadumo@gmail.com) -[warn] ⚠ Could not find config (firebase.json) so using defaults. -[info] i emulators: Starting emulators: auth {"metadata":{"emulator":{"name":"hub"},"message":"Starting emulators: auth"}} -[info] i emulators: Detected demo project ID "demo-no-project", emulated services will use a demo configuration and attempts to access non-emulated services for this project will fail. {"metadata":{"emulator":{"name":"hub"},"message":"Detected demo project ID \"demo-no-project\", emulated services will use a demo configuration and attempts to access non-emulated services for this project will fail."}} -[debug] [2025-11-07T15:17:13.690Z] [logging] Logging Emulator only supports listening on one address (127.0.0.1). Not listening on ::1 -[debug] [2025-11-07T15:17:13.690Z] [auth] Authentication Emulator only supports listening on one address (127.0.0.1). Not listening on ::1 -[debug] [2025-11-07T15:17:13.690Z] assigned listening specs for emulators {"user":{"hub":[{"address":"127.0.0.1","family":"IPv4","port":4400},{"address":"::1","family":"IPv6","port":4400}],"ui":[{"address":"127.0.0.1","family":"IPv4","port":4000},{"address":"::1","family":"IPv6","port":4000}],"logging":[{"address":"127.0.0.1","family":"IPv4","port":4500}],"auth":[{"address":"127.0.0.1","family":"IPv4","port":9099}]},"metadata":{"message":"assigned listening specs for emulators"}} -[debug] [2025-11-07T15:17:13.693Z] Emulator locator file path: /var/folders/pw/cv4hgr3x2fbcrxbj9s2d60dw0000gn/T/hub-demo-no-project.json -[debug] [2025-11-07T15:17:13.693Z] [hub] writing locator at /var/folders/pw/cv4hgr3x2fbcrxbj9s2d60dw0000gn/T/hub-demo-no-project.json -[debug] [2025-11-07T15:17:17.123Z] Could not find VSCode notification endpoint: FetchError: request to http://localhost:40001/vscode/notify failed, reason: . If you are not running the Firebase Data Connect VSCode extension, this is expected and not an issue. -[info] -┌─────────────────────────────────────────────────────────────┐ -│ ✔ All emulators ready! It is now safe to connect your app. │ -│ i View Emulator UI at http://127.0.0.1:4000/ │ -└─────────────────────────────────────────────────────────────┘ - -┌────────────────┬────────────────┬────────────────────────────┐ -│ Emulator │ Host:Port │ View in Emulator UI │ -├────────────────┼────────────────┼────────────────────────────┤ -│ Authentication │ 127.0.0.1:9099 │ http://127.0.0.1:4000/auth │ -└────────────────┴────────────────┴────────────────────────────┘ - Emulator Hub host: 127.0.0.1 port: 4400 - Other reserved ports: 4500 - -Issues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files. -