[英]Add Firebase Analytics and Crashlytics to iOS project with multiple schemes
我有一个项目有多个方案(不是目标)。 我有 Dev、QA 和 Prod,我想将 Firebase Analytics 和 Crashlytics 添加到所有方案中,注意每个方案都有自己的 Bundle id 和不同的名称。
我怎样才能做到这一点?
如果您只有一个目标有多个方案:您可以按照这样的方案更改 plist 文件:
#if DEV_DEBUG || DEV_RELEASE
let filePath = Bundle.main.path(forResource: "GoogleService-Info-Dev", ofType: "plist")
#else
let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")
#endif
guard let fileopts = FirebaseOptions(contentsOfFile: filePath!)
else { assert(false, "Couldn't load config file") }
FirebaseApp.configure(options: fileopts)
在这段代码中,我有两个方案,一个是 Dev,另一个是 Prod
在 Xcode 13.3.X 上测试
假设您已经有一个 Google Firebase 帐户并在 Firebase 控制台中打开了一个应用程序,请在控制台中为 iOS 添加一个应用程序。
现在按照步骤为每个方案(Dev、QA 和 Prod)注册应用程序的 Bundle id,您需要使用不同的 Bundle id 注册不同的应用程序并下载 GoogleService-Info.plist 文件不要重命名 Plist 文件。
在您的 Xcode 项目中为每个环境创建单独的文件夹,将每个 GoogleService-Info.plist 文件拖到它们的文件夹并取消选中复制到目标。
在您的 pod 文件中添加 pod 'Firebase/Crashlytics'(如果您还使用分析添加 pod)并在终端中运行 pod install。
在此 go 到 pod 目标之后(这是 google 建议的解决方法的错误)并搜索 Apple Clang - 警告 - 所有语言并将引用包含在框架 ZBF50D5E661106D0ABE925AFEC2E7 中)
在此 Go 到 Build Options -> Debug Information Format 下的目标 Build Settings 之后全部设置为:
带有 dSYM 文件的 DWARF
在目标中的构建阶段选项卡上添加 2 个运行脚本。
第一次调用 Firebase Plist 选择器(或任何其他名称,只要确保它在脚本上传 dSYM 之前运行)并添加以下脚本:
INFO_PLIST=GoogleService-Info.plist
DEVELOPMENT_INFO_PLIST=${PROJECT_DIR}/${TARGET_NAME}/Environment/Dev/${INFO_PLIST}
QA_INFO_PLIST=${PROJECT_DIR}/${TARGET_NAME}/Environment/QA/${INFO_PLIST}
PROD_INFO_PLIST=${PROJECT_DIR}/${TARGET_NAME}/Environment/Prod/${INFO_PLIST}
echo "DEV -> CHECKING in development! ${INFO_PLIST} in ${DEVELOPMENT_INFO_PLIST}"
if [ ! -f $DEVELOPMENT_INFO_PLIST ] ; then
echo "DEV GoogleService-Info.plist not found."
exit 1
fi
echo "QA -> CHECKING in QA ${INFO_PLIST} in ${QA_INFO_PLIST}"
if [ ! -f $QA_INFO_PLIST ] ; then
echo "QA GoogleService-Info.plist not found."
exit 1
fi
echo "PROD -> CHECKING in PROD ${INFO_PLIST} in ${PROD_INFO_PLIST}"
if [ ! -f $PROD_INFO_PLIST ] ; then
echo "PROD GoogleService-Info.plist not found."
exit 1
fi
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo "Copying ${INFO_PLIST} to final destination: ${PLIST_DESTINATION}"
elif [ "${CONFIGURATION}" == "QA MyProject" ] ; then
echo "QA -> Copied FILE : ${QA_INFO_PLIST}."
cp "${QA_INFO_PLIST}" "${PLIST_DESTINATION}"
elif [ "${CONFIGURATION}" == "Prod MyProject" ] ; then
echo "PROD -> Copied FILE : ${PROD_INFO_PLIST}."
cp "${PROD_INFO_PLIST}" "${PLIST_DESTINATION}"
else
echo "DEV -> Copied ${DEVELOPMENT_INFO_PLIST}."
cp "${DEVELOPMENT_INFO_PLIST}" "${PLIST_DESTINATION}"
fi
在这里,您正在检查每个方案的 GoogleService-Info.plist 文件(注意它说 /Environment/Dev QA Prod 等将其更改为您的文件夹路径)如果找到该文件,那么它将在构建时添加并且正确每次都会将 Plist 文件添加到构建中。
现在在第二个脚本中添加:
"${PODS_ROOT}/FirebaseCrashlytics/run"
在输入文件下添加这两个:
$(SRCROOT)/${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
如果在控制台中输入 Crashlytics 部分并模拟崩溃(您可以将 fatalError 放在 IBAction 或 Button 操作上进行模拟)时一切正确,则清理并构建项目,您将能够看到您配置的每个方案的崩溃。
请注意,如果您希望复制文件夹,请使用:
cp -R
这将复制文件夹及其所有内容。
在名称末尾添加 / 非常重要,例如更改
INFO_PLIST=GoogleService-Info.plist
至
INFO_PLIST=MYFOLDERNAME/
最亲切的问候。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.