【问题标题】:How can we have different Info.plist files for different environments such as Dev, Test, Staging, and Prod?我们如何为 Dev、Test、Staging 和 Prod 等不同环境提供不同的 Info.plist 文件?
【发布时间】:2014-02-08 06:44:30
【问题描述】:

我们如何为不同的环境(例如Dev、Test、Staging 和Prod)拥有不同的Info.plist 文件?

我为每个环境设置了一些设置和一个单独的 Facebook 应用程序,以确保应用程序分析不会受到测试人员的偏见等。所以在为每个环境构建之前尽量避免手动更新设置。

【问题讨论】:

标签: ios objective-c xcode


【解决方案1】:

这是添加环境特定 plist 所需执行的操作。

  • 将原始ProjectName.Info.plist文件复制到ProjectName_Dev.Info.plistProjectName_Test.Info.plistProjectName_Staging.Info.plist并将它们添加到项目中。

  • 点击Project Navigator中的项目名称,选择Target,然后选择Build Phases选项卡。

  • 在右上角的搜索栏中输入 Info.plist 以过滤 Info.plist。

  • Copy Bundle Resources 下,删除除ProjectName.Info.plist 之外的所有plist

  • 现在点击Editor -> Add Build Phase -> Add Run Script Build Phase菜单选项。

  • 最后,将以下 shell 脚本复制到新添加的 Build Phase 中。

确保将 ProjectName 替换为您的项目名称!

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

或者只是:

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

注意:我假设您已经创建了包含 Dev、Test、Staging 和 Production 环境变量的构建方案。

从这篇文章中获得了帮助。 http://www.dosomethinghere.com/2013/09/21/different-settings-app-entries-for-debug-vs-release-builds/

【讨论】:

  • cp -r "${PROJECT_DIR}/ProjectName/ProjectName-Info_${CONFIGURATION}.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/ProjectName-Info.plist"
【解决方案2】:

您还可以为每个目标创建单独的 xcconfig 文件,使用项目管理器为每个目标分配正确的 xcconfig 文件,然后在每个 xcconfig 中定义一个具有相同名称的变量并将该变量导入您的单个 plist。例如:

第一个 xcconfig:

MY_VARIABLE = 这样那样

第二个xcconfig:

MY_VARIABLE = 这个和那个

然后在您的 plist 中,设置一个值为 $(MY_VARIABLE) 的键

取决于你到底在做什么。 Xcconfig 很好,因为除了 plist 之外,您还可以访问在构建设置等位置设置的变量。

【讨论】:

    【解决方案3】:

    试试这个帮助类:

    https://github.com/premosystems/MyEnvironmentConfig

    1. 将环境 $(CONFIGURATION) 添加到 info.plist。

    2. 添加 Environments.plist 配置文件,填充您喜欢的变量。

    3. 在 MYEnvironmentConfig 类上添加一个便利类别,以公开强类型配置值。

    4. 在 appDidFinishLaunching 中初始化 MyEnvironmentConfig。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-04
      • 2013-07-09
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多