2
votes

Comment éviter de coder en dur REVERSED_CLIENT_ID dans iOS Info.plist pour la connexion dev / prod Google?

Je développe une application mobile Flutter avec Firebase.

J'ai besoin d'un environnement Firebase distinct pour le développement et la production.

Je suis ceci guide pour la configuration.

Le problème se produit lorsque j'implémente l'authentification Google pour iOS car dans Runner doit copier REVERSED_CLIENT_ID de GoogleServices-Info.plist dans Fichier Info.plist .

Je ne peux pas simplement coder en dur ce REVERSED_CLIENT_ID dans Info.plist car il est différent pour mes environnements de développement et de production.

Est-il possible de spécifier une variable dans Info.plist pour obtenir le REVERSED_CLIENT_ID correct pour différents environnements?

J'utilise ceci script pour copier correct GoogleServices-Info.plist:

if [ "${CONFIGURATION}" == "Debug-prod" ] || [ "${CONFIGURATION}" == "Release-prod" ] || [ "${CONFIGURATION}" == "Release" ]; then
cp -r "${PROJECT_DIR}/Runner/Firebase/Prod/GoogleService-Info.plist" "${PROJECT_DIR}/Runner/GoogleService-Info.plist"

echo "Production plist copied"

elif [ "${CONFIGURATION}" == "Debug-dev" ] || [ "${CONFIGURATION}" == "Release-dev" ] || [ "${CONFIGURATION}" == "Debug" ]; then

cp -r "${PROJECT_DIR}/Runner/Firebase/Dev/GoogleService-Info.plist" "${PROJECT_DIR}/Runner/GoogleService-Info.plist"

echo "Development plist copied"
fi

Je cherche une réponse partout mais je ne trouve pas! Je suis complètement bloqué à cause de cela.

Merci!


1 commentaires

Des mises à jour sur ce problème?


4 Réponses :


0
votes

Je ne peux pas faire de commentaire, mais la réponse la plus proche que j'ai pu trouver est la suivante: https://stackoverflow.com/a/48789232 (Ci-dessous un exemple modifié pour le flutter, vérifiez vos chemins avant de suivre ça!)

  1. Créez un dossier avec tous vos fichiers Google.plist (avec des noms différents) dans le projet
  2. Ajouter un script d'exécution
PATH_TO_GOOGLE_PLISTS="${PROJECT_DIR}/Runner/Firebase"
    case "${CONFIGURATION}" in

   "Debug_Staging" | "AdHoc_Staging" )
        cp -r "$PATH_TO_GOOGLE_PLISTS/GoogleService-Info-dev.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;

   "Debug_Poduction" | "AdHoc_Poduction" | "Distribution" | "Test_Poduction" )
        cp -r "$PATH_TO_GOOGLE_PLISTS/GoogleService-Info-prod.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;

    *)
        ;;
esac
  1. Noms des schémas de construction (conformément aux différents cas de $ {CONFIGURATION} du code ci-dessus)
  1. De plus, vous devrez peut-être ajouter un GoogleService-Info.plist par défaut dans le dossier Runner bien qu'il soit remplacé par une copie du script à partir dudit lien, si un avis apparaît depuis la console où il demande Impossible de localiser le fichier de configuration: 'GoogleService-Info.plist'.


0 commentaires

0
votes

Pour le développement Swift, vous pouvez ajouter à la fois vos REVERSED_CLIENT_ID s de développement et de production à vos schémas d'URL, et votre application utilisera celui que vous initialisez dans votre AppDelegate .


0 commentaires

1
votes

Je pense que la façon dont vous avez différents fichiers GoogleService-Info.plist pour les environnements de développement et de production, conservez différents fichiers Info.plist avec les ID de client inversés corrects pour les environnements de développement et de production également. Dans votre script, incluez une ligne pour copier le fichier Info.plist dans le répertoire iOS / Runner /.


1 commentaires

Ce n'est pas vraiment une réponse mais un commentaire sur un autre article. Veuillez déplacer ceci dans la section des commentaires.



0
votes

J'ai pu résoudre ce problème en créant une variable définie par l'utilisateur qui est spécifique à l'environnement et en tirant cette variable dans Info.plist

J'ai configuré mon application pour me connecter à deux projets Firebase (dev et prod) en suivant les instructions de cet article: https://medium.com/@animeshjain/build-flavors-in-flutter-android-and-ios-with-different-firebase-projects-per-flavor-27c5c5dac10b

Le résumé de 1000 pieds est que vous vous retrouvez avec un fichier GoogleServices-Info.plist pour chaque développement et production qui est copié au bon emplacement au moment de la construction.

Pour définir deux REVERSE_CLIENT_IDS:

  1. Créez une variable définie par l'utilisateur en l'ajoutant à ios / Flutter / Debug.xcconfig et ios / Flutter / Release.xcconfig. J'ai appelé le mien: GOOGLE_SERVICE_REVERSE_CLIENT_ID = {REVERSE_CLIENT_ID trouvé dans le fichier GoogleService-Info.plist}
  2. Remplacez le REVERSE_CLIENT_ID codé en dur défini dans Info.plist par $ (GOOGLE_SERVICE_REVERSE_CLIENT_ID)
  3. Ouvrez votre projet dans XCode et accédez à la section User-defined et définissez le REVERSE_CLIENT_ID spécifique à l'environnement réel pour chaque type de construction. Cibles> Runner> Paramètres de construction> Rechercher "utilisateur"> Défini par l'utilisateur> GOOGLE_SERVICES_REVERSE_CLIENT_ID>

    Debug-dev = com.googleusercontent.apps. {dev client-id}
    Debug-prod = com.googleusercontent.apps. {Prod client-id}
    Profile-dev = com.googleusercontent.apps. {Dev client-id}
    Profile-prod = com.googleusercontent.apps. {Prod client-id}
    Release-dev = com.googleusercontent.apps. {Dev client-id}
    Release-prod = com.googleusercontent.apps. {Prod client-id}


0 commentaires