¿Cómo podemos tener diferentes files Info.plist para diferentes entornos, como Dev, Test, Staging y Prod?

¿Cómo podemos tener diferentes files Info.plist para diferentes entornos, como Dev, Test, Staging y Prod ?

Tengo algunas configuraciones y una aplicación de Facebook por separado para cada entorno para garantizar que los análisis de las aplicaciones no sean sesgados por los evaluadores, etc. Así que realmente trato de evitar la configuration manual antes de build para cada entorno.

Esto es lo que debe hacer para agregar pliques específicos del entorno.

  • Copie el file original ProjectName.Info.plist a ProjectName_Dev.Info.plist , ProjectName_Test.Info.plist y ProjectName_Staging.Info.plist y agréguelos al proyecto.

  • Haga clic en el nombre del proyecto en Project Navigator , select Target , luego select la pestaña Build Phases .

  • Escriba Info.plist en la barra de búsqueda en la parte superior derecha para filtrar en Info.plist.

  • Desde debajo de Copy Bundle Resources , elimine todos los files excepto ProjectName.Info.plist

  • Ahora click Editor -> Add Build Phase -> Add Run Script Build Phase opción de menu Editor -> Add Build Phase -> Add Run Script Build Phase .

  • Finalmente, copie la siguiente secuencia de commands de shell a la fase de compilation recién agregada.

¡Asegúrese de replace ProjectName con el nombre de su proyecto!

 if [ "${CONFIGURATION}" == "Dev" ]; then cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_Dev.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.plist" echo "DEV plist copied" elif [ "${CONFIGURATION}" == "Test" ]; then cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_Test.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.plist" echo "Beta plist copied" elif [ "${CONFIGURATION}" == "Staging" ]; then cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_Staging.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.plist" echo "Beta plist copied" elif [ "${CONFIGURATION}" == "Prod" ]; then cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_Prod.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.plist" echo "Beta plist copied" fi 

O solo:

cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_${CONFIGURATION‌​}.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.‌​plist"

NOTA: Supongo que ya ha creado los esquemas de compilation con variables de entorno Dev, Test, Staging y Production.

¿Tienes ayuda de este artículo? http://www.dosomethinghere.com/2013/09/21/different-settings-app-entries-for-debug-vs-release-builds/

También puede crear files xcconfig separados para cada objective, utilice el administrador de proyectos para asignar a cada objective el file xcconfig correcto y, a continuación, simplemente defina una variable con el mismo nombre en cada xcconfig e importe esa variable en su plísta única. Por ejemplo:

primero xcconfig:

MY_VARIABLE = suchandsuch

segundo xcconfig:

MY_VARIABLE = esto y eso

Y luego en su plist, establezca una key con el valor $ (MY_VARIABLE)

Depende de qué estás exactamente haciendo. Xcconfig es bueno porque puedes acceder a las variables que estableces allí en lugares como configuraciones de compilation además de plist.

Prueba esta class de ayudante:

https://github.com/premosystems/MyEnvironmentConfig

  1. Agregue Environment $ (CONFIGURATION) a info.plist.

  2. Agregue el file de configuration Environments.plist, rellene con usted la calidad variable favorita.

  3. Agregue una categoría de conveniencia en la class MYEnvironmentConfig exponiendo valores de configuration fuertemente tipeados.

  4. Inicializa MyEnvironmentConfig en appDidFinishLaunching.