How can we have different Info.plist files for different environments such as Dev, Test, Staging, and Prod?

后端 未结 3 2161
抹茶落季
抹茶落季 2021-02-07 12:18

How can we have different Info.plist files for different environments such as Dev, Test, Staging, and Prod?

I have some settings and a sep

3条回答
  •  眼角桃花
    2021-02-07 13:05

    Here is what you need to do to add environment specific plists.

    • Copy original ProjectName.Info.plist file to ProjectName_Dev.Info.plist, ProjectName_Test.Info.plist, and ProjectName_Staging.Info.plist and add them to the project.

    • Click on project name in the Project Navigator, select Target, then select Build Phases tab.

    • Type Info.plist in the search bar at top right to filter on Info.plist.

    • From under the Copy Bundle Resources, remove all plists except ProjectName.Info.plist

    • Now click on Editor -> Add Build Phase -> Add Run Script Build Phase menu option.

    • Finally, copy following shell script to the newly added Build Phase.

    Make sure to replace ProjectName with your project name!

    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
    

    Or just:

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

    NOTE: I assume you already have created the build schemes with Dev, Test, Staging, and Production environment variables.

    Got help from this article. http://www.dosomethinghere.com/2013/09/21/different-settings-app-entries-for-debug-vs-release-builds/

提交回复
热议问题