J'ai donc réfléchi à la même question et en utilisant certaines idées de publications précédentes, dont certaines publient des applications avec GoogleServices-Info.plist
pour tous les environnements dans toutes les applications et c'est un peu préoccupant.
J'ai mis au point une solution extensible qui copie le GoogleSerives-Info.plist
fichier au moment de la construction. De plus, cette approche peut prendre en charge autant d'environnements que vous le souhaitez avec la possibilité de personnaliser et de suivre une convention simple, ce qui facilite la gestion.
Tout d'abord, j'ai trois environnements, debug
(pour le débogage dans le simulateur et le périphérique whist et la coupe active du code), staging
(pour le déploiement en vol d'essai) et release
pour la production.
La première étape consiste à créer votre (vos) configuration (s):
Sélectionnez "Produit" -> "Schéma" -> "Modifier le schéma" et dupliquez / créez-en un nouveau si nécessaire. Parcourez chaque Schéma et attribuez sa configuration respective à partir du menu déroulant "Build Configuration" dans chacune des catégories:
Je vais un peu plus loin et décoche «exécuter» pour les schémas qui doivent être distribués, c'est-à-dire la version et la mise en scène, et inversement décoche «archiver» pour le débogage. Vous devez faire ce qui a du sens pour vous.
Sous les phases de construction, ajoutez le script d'exécution suivant (la CONFIGURATIONS_FOLDER
variable peut être personnalisée comme vous le souhaitez - assurez-vous simplement d'utiliser le même nom de dossier à l'étape suivante):
# Get a reference to the folder which contains the configuration subfolders.
CONFIGURATIONS_FOLDER=Firebase
# Get a refernce to the filename of a 'GoogleService-Info.plist' file.
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist
# Get a reference to the 'GoogleService-Info.plist' for the current configuration.
GOOGLESERVICE_INFO_PLIST_LOCATION=${PROJECT_DIR}/${TARGET_NAME}/${CONFIGURATIONS_FOLDER}/${CONFIGURATION}/${GOOGLESERVICE_INFO_PLIST}
# Check if 'GoogleService-Info.plist' file for current configuration exist.
if [ ! -f $GOOGLESERVICE_INFO_PLIST_LOCATION ]
then
echo "No '${GOOGLESERVICE_INFO_PLIST}' file found for the configuration '${CONFIGURATION}' in the configuration directory '${PROJECT_DIR}/${TARGET_NAME}/${CONFIGURATIONS_FOLDER}/${CONFIGURATION}'."
exit 1
fi
# Get a reference to the destination location for the GoogleService-Info.plist.
GOOGLESERVICE_INFO_PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
# Copy 'GoogleService-Info.plist' for current configution to destination.
cp "${GOOGLESERVICE_INFO_PLIST_LOCATION}" "${GOOGLESERVICE_INFO_PLIST_DESTINATION}"
echo "Successfully coppied the '${GOOGLESERVICE_INFO_PLIST}' file for the '${CONFIGURATION}' configuration from '${GOOGLESERVICE_INFO_PLIST_LOCATION}' to '${GOOGLESERVICE_INFO_PLIST_DESTINATION}'."
Dans le dossier de configuration que vous avez choisi ("Firebase" dans l'exemple ci-dessus), imbriquez des dossiers pour chaque configuration nommés exactement de la même manière que sa configuration respective (sensible à la casse), à l'intérieur desquels placez les GoogleServices-Info.plist
fichiers respectifs comme suit:
Enfin, j'aime également m'assurer qu'un niveau racine GoogleServices-Info.plist
n'est pas ajouté au projet par accident, alors j'ajoute ce qui suit à mon .gitignore.
# Ignore project level GoogleService-Info.plist
/[Project Name]/GoogleService-Info.plist