繁体   English   中英

将 Firebase Analytics 和 Crashlytics 添加到具有多个方案的 iOS 项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM