所以我思考了同样的问题,并使用了之前帖子中的一些想法,其中一些为所有应用程序中的所有环境发布了带有GoogleServices-Info.plist 的应用程序,这有点令人担忧。
我想出了一个可扩展的解决方案,可以在构建时复制GoogleSerives-Info.plist 文件。此外,这种方法可以支持任意数量的环境,并且能够自定义并遵循简单的约定,使其易于管理。
首先,我有三个环境,debug(用于在模拟器和设备中运行并调试和主动剪切代码)、staging(用于部署到测试飞行)和release 用于生产。
第一步是创建配置:
选择“产品”->“方案”->“编辑方案”并根据需要复制/新建。浏览每个方案并从
每个类别中的“构建配置”下拉菜单:
我更进一步,取消选中需要分发的方案的“运行”,即发布和登台,相反,取消选中“存档”进行调试。你应该做对你有意义的事情。
在构建阶段添加以下运行脚本(CONFIGURATIONS_FOLDER 变量可以根据需要自定义 - 只需确保在下一步中使用相同的文件夹名称):
# Get a reference to the folder which contains the configuration subfolders.
CONFIGURATIONS_FOLDER=Firebase
# Get a refernce to the filename of a 'GoogleService-Info.plist' file.
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist
# Get a reference to the 'GoogleService-Info.plist' for the current configuration.
GOOGLESERVICE_INFO_PLIST_LOCATION=${PROJECT_DIR}/${TARGET_NAME}/${CONFIGURATIONS_FOLDER}/${CONFIGURATION}/${GOOGLESERVICE_INFO_PLIST}
# Check if 'GoogleService-Info.plist' file for current configuration exist.
if [ ! -f $GOOGLESERVICE_INFO_PLIST_LOCATION ]
then
echo "No '${GOOGLESERVICE_INFO_PLIST}' file found for the configuration '${CONFIGURATION}' in the configuration directory '${PROJECT_DIR}/${TARGET_NAME}/${CONFIGURATIONS_FOLDER}/${CONFIGURATION}'."
exit 1
fi
# Get a reference to the destination location for the GoogleService-Info.plist.
GOOGLESERVICE_INFO_PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
# Copy 'GoogleService-Info.plist' for current configution to destination.
cp "${GOOGLESERVICE_INFO_PLIST_LOCATION}" "${GOOGLESERVICE_INFO_PLIST_DESTINATION}"
echo "Successfully coppied the '${GOOGLESERVICE_INFO_PLIST}' file for the '${CONFIGURATION}' configuration from '${GOOGLESERVICE_INFO_PLIST_LOCATION}' to '${GOOGLESERVICE_INFO_PLIST_DESTINATION}'."
在您选择的配置文件夹(上例中的“Firebase”)中,每个配置的嵌套文件夹与其各自的配置命名完全相同(区分大小写),在其中放置各自的 GoogleServices-Info.plist 文件,如下所示:
最后但同样重要的是,我还想确保根级别 GoogleServices-Info.plist 不会意外添加到项目中,因此我将以下内容添加到我的 .gitignore 中。
# Ignore project level GoogleService-Info.plist
/[Project Name]/GoogleService-Info.plist