我们如何为不同的环境(如Dev,Test,Staging和Prod)提供不同的Info.plist文件?

时间:2014-01-18 23:35:36

标签: ios objective-c xcode

我们如何为不同的环境提供不同的Info.plist文件,例如 Dev,Test,Staging和Prod

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

3 个答案:

答案 0 :(得分:15)

以下是添加特定于环境的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以外的所有帖子

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

  • 最后,将以下shell脚本复制到新添加的构建阶段。

确保将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/

答案 1 :(得分:8)

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

首先是xcconfig:

MY_VARIABLE = suchandsuch

第二个xcconfig:

MY_VARIABLE = thisandthat

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

的键

取决于你究竟做了什么。 Xcconfig很不错,因为除了plist之外,你还可以访问你在诸如构建设置之类的地方设置的变量。

答案 2 :(得分:1)

试试这个助手类:

https://github.com/premosystems/MyEnvironmentConfig

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

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

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

  4. 在appDidFinishLaunching中初始化MyEnvironmentConfig。