我们如何为不同的环境提供不同的Info.plist
文件,例如 Dev,Test,Staging和Prod ?
我为每个环境提供了一些设置和单独的Facebook应用程序,以确保应用程序分析不会受到测试人员等的偏见。因此,在构建每个环境之前,请务必避免手动更新设置。
答案 0 :(得分:15)
以下是添加特定于环境的plist所需执行的操作。
将原始ProjectName.Info.plist
文件复制到ProjectName_Dev.Info.plist
,ProjectName_Test.Info.plist
和ProjectName_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环境变量创建了构建方案。
答案 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
将环境$(CONFIGURATION)添加到info.plist。
添加Environments.plist配置文件,填充您最喜欢的变量善良。
在MYEnvironmentConfig类上添加一个便利类别,公开强类型配置值。
在appDidFinishLaunching中初始化MyEnvironmentConfig。