with google ios google-signin

login with google sdk ios



Usando el inicio de sesiĆ³n de Google con dos objetivos (3)

Tengo un problema que no puedo resolver, y he buscado por todas partes.

Recientemente agregué el inicio de sesión de Google a mi aplicación, y está funcionando bien en el objetivo principal, sin embargo, dado que estoy usando múltiples objetivos para implementar una versión secundaria de mi aplicación, el segundo identificador de paquete no se puede agregar a "GoogleService -Info.plist ". El código de inicio de sesión de Google hace referencia a este archivo por su nombre, por lo que no puedo simplemente cambiar el nombre de cada versión de la aplicación como lo he hecho por otras fallas.

He intentado agregar variables de entorno a cada esquema y usar $ {BUNDLE_ID} en el plist para cambiar en función del esquema elegido, pero tampoco funciona. ¿Se me escapa algo? ¿Cómo debe un espacio de trabajo con múltiples objetivos usar la misma lista con diferentes variables para cada objetivo?

¡Gracias!

Edición: intentado usar un archivo XCConfig para reemplazar los valores estáticos en el plist con variables de tiempo de compilación. Sin suerte, probablemente porque creo que el inicio de sesión de Google está accediendo al archivo directamente. Supongo que cualquier persona que utilice el inicio de sesión de Google con una aplicación que tenga múltiples objetivos (con publicidad o con prima pagada) debe tener una forma de evitar esto. Por favor ayuda.


Tuve el mismo problema y encontré una solución bastante simple.

Simplemente copie el GoogleServices-Info.plist y GoogleServices-Info.plist en una carpeta diferente. La carpeta debe ser una carpeta físicamente diferente, ya que el sistema de archivos no aceptará los mismos nombres de archivo en la misma carpeta. Así que cree una carpeta real en el buscador y agréguela a XCode, no use grupos de XCode.

Luego cambie la membresía de destino de acuerdo con cada archivo plist. ¡Eso es!



Yo tuve el mismo problema. Tengo cuatro objetivos diferentes que necesitaban usar el mismo archivo GoogleService-Info.plist pero con diferentes ID de paquete. Me encontré con este excelente artículo de Restless Thinker que proporcionó una solución a este problema exacto.

PlistBuddy es una herramienta gratuita proporcionada por Apple e integrada en OSX.

PlistBuddy puede crear y modificar archivos plist. Aquí hay un gran tutorial de Fotis . Él lo hace parecer un pedazo de pastel.

Lo primero es verificar si el archivo GoogleService-Info.plist se encuentra en la lista de Fases de compilación> Copiar recursos del paquete para cada objetivo. Esto ya debería estar en su lugar, pero una nueva verificación no hará daño. Agrega el archivo si no está presente.

Lo siguiente que debe hacer es crear una nueva fase de construcción para cada objetivo. Vaya a su Proyecto> Objetivos> Seleccione su objetivo> Fases de compilación Compruebe el área superior izquierda de la pantalla Fases de compilación para obtener un botón +.

Añadir una nueva fase personalizada. (Es posible que ya tenga la fase Ejecutar script, en cuyo caso, simplemente agregue los comandos después de los comandos existentes)

Seleccione Nueva fase de secuencia de comandos de ejecución y en el nuevo cuadro que se abre, ingrese su comando PlistBuddy

/usr/libexec/PlistBuddy -c "Set :BUNDLE_ID ${PRODUCT_BUNDLE_IDENTIFIER}" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist

Asegúrese de que su nombre de archivo .app (bajo Producto) sea el mismo que su nombre de destino o esto no funcionará. Puede $ TARGET_NAME.app para hacerlo igual que su nombre project.app.

Puede cambiar más valores de esta manera, solo agregue otra línea nueva al script. Deberá agregar dos líneas más al menos para cambiar CLIENT_ID y REVERSE_CLIENT_ID.

/usr/libexec/PlistBuddy -c "Set :CLIENT_ID 123456789012-abcdefghijklmnopqrstuvwxyzabcdefghijklm.apps.googleusercontent.com" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist /usr/libexec/PlistBuddy -c "Set :REVERSED_CLIENT_ID com.googleusercontent.apps.123456789012-abcdefghijklmnopqrstuvwxyzabcdefghijklm" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist

Puede que tenga que limpiar para que funcione. Construir y ejecutar en el dispositivo. Es posible que deba marcar la pequeña casilla debajo de Ejecutar secuencia de comandos que dice ''Ejecutar secuencia de comandos solo al instalar'' al instalar en un dispositivo. Cuando dejé esta casilla sin marcar, XCode siguió refiriéndose a mis antiguos datos derivados.

Usando PlistBuddy, puedes cambiar cualquier valor de plist basado en el objetivo. Espero que esto haya ayudado.


haga un archivo de plist separado para cada objetivo y alterne dinámicamente entre ellos. Para ello puedes consultar las respuestas here