Crashlytics Fabric 多个目标

9
我有一个具有多个目标的应用程序,其中一些具有不同的捆绑标识符。我曾经成功地将Fabric(特别是Crashlytics)添加到具有相同捆绑标识符的应用程序中,但我不确定如何处理具有不同捆绑标识符的多个目标。
是否有任何指针或我可能错过的文档?
4个回答

8
你可以通过在BUILD PHASES中添加多个RUN SCRIPT来为单个应用程序创建适用于多个目标的Crashlytics。根据UNIQUE RUN SCRIPT,Fabric将进行识别。
我正在为单个项目中的6个目标工作,并按目标方式在Fabric中获取所有崩溃。 目标-->构建阶段-->添加运行脚本

2
我需要在所有目标的构建阶段中添加相同的运行脚本吗? - iRiziya
@iRiziya,你使用了相同的运行脚本和相同的API密钥吗? - Kiryl Bielašeŭski
@Malder 是的,对于所有的。 - iRiziya

4

来自 Fabric 的 文档

要在多个目标中使用 Crashlytics,请将 Crashlytics Run Script 添加到每个目标的 Build Phase 中。

这对于我在项目中配置了 Fabric 的主应用程序目标以及其它几个扩展名为自己的目标的情况下运行良好。它们最终也会在 Fabric Web 仪表板中显示为独立的“事物”,这很不错。


1
感谢您抽出时间。我所有的目标都有一个运行脚本的构建阶段./Fabric.framework/run xxx yyy每个目标都是相同的(应该不会有不同吧?)但我在 Web 平台上仍然只看到我的原始应用程序,即 com.myapp,而没有额外的目标 com.myapp.dev当归档 com.myapp 并尝试分发它时,一切正常。当归档 com.myapp.dev 并尝试分发它时,我收到一个错误消息“无法保存发布说明,项目 com.myapp.dev 不活动”。这些信息是否有任何提示? - Return-1
我刚刚检查了一下,所有目标的“运行脚本”也是完全相同的(包括API密钥)。当您在Fabric Web控制台中查看应用程序时,是否发现任何异常/不活动的情况? - Andy Obusek
在 Fabric 网页控制台上只有 com.myapp,没有 com.myapp.dev。我记得以前有一个项目,在我添加新目标时,Fabric 建议创建 com.xx.dev 版本,但那可能是在我添加新目标时才这样做的。在这里,直到我设置好两个目标后才添加了 Fabric。看起来我需要在 Fabric 上创建 com.myapp.dev,但我不清楚该如何操作。 - Return-1

0
如果您想在多个目标中实现iOS的Crashlytics,这是一篇由Tyler Milner撰写的好文章。

https://medium.com/rocket-fuel/using-multiple-firebase-environments-in-ios-12b204cfa6c0

它提供了一个脚本来自动选择GoogleService-Info.plist文件,具体取决于目标。您可能需要稍微修改脚本以反映您的应用程序的目标名称,例如:"Release"。
# Name of the resource we're selectively copying
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist

# Get references to dev and prod versions of the GoogleService-Info.plist
# NOTE: These should only live on the file system and should NOT be part of the target (since we'll be adding them to the target manually)
GOOGLESERVICE_INFO_DEV=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Dev/${GOOGLESERVICE_INFO_PLIST}
GOOGLESERVICE_INFO_PROD=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Prod/${GOOGLESERVICE_INFO_PLIST}

# Make sure the dev version of GoogleService-Info.plist exists
echo "Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_DEV}"
if [ ! -f $GOOGLESERVICE_INFO_DEV ]
then
    echo "No Development GoogleService-Info.plist found. Please ensure it's in the proper directory."
    exit 1
fi

# Make sure the prod version of GoogleService-Info.plist exists
echo "Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_PROD}"
if [ ! -f $GOOGLESERVICE_INFO_PROD ]
then
    echo "No Production GoogleService-Info.plist found. Please ensure it's in the proper directory."
    exit 1
fi

# Get a reference to the destination location for the GoogleService-Info.plist
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo "Will copy ${GOOGLESERVICE_INFO_PLIST} to final destination: ${PLIST_DESTINATION}"

# Copy over the prod GoogleService-Info.plist for Release builds
if [ "${CONFIGURATION}" == "Release" ]
then
    echo "Using ${GOOGLESERVICE_INFO_PROD}"
    cp "${GOOGLESERVICE_INFO_PROD}" "${PLIST_DESTINATION}"
else
    echo "Using ${GOOGLESERVICE_INFO_DEV}"
    cp "${GOOGLESERVICE_INFO_DEV}" "${PLIST_DESTINATION}"
fi

0

当使用Firebase安装Crashlytic时,对于多个方案,您可能会遇到错误Could not get GOOGLE_APP_ID in Google Services file from build environment。您可以通过以下方式解决:

  • Build Settings中,在User Defined中添加文件名的用户定义:

Add file name for each scheme in User Defined

在“Build Phases”中,点击加号按钮,在Crashlytic构建阶段上方添加“New Run Script Phase”,并将以下代码输入到文本字段中。请记得将%YOUR_CUSTOM_PATH_TO_FOLDER%重命名为您的Plist文件路径:
GOOGLE_SERVICE_INFO_PLIST_FROM="${PROJECT_DIR}/%YOUR_CUSTOM_PATH_TO_FOLDER%/${GOOGLE_SERVICE_INFO_PLIST_NAME}"
BUILD_APP_DIR="${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}"
GOOGLE_SERVICE_INFO_PLIST_TO="${BUILD_APP_DIR}/GoogleService-Info.plist"
cp "${GOOGLE_SERVICE_INFO_PLIST_FROM}" "${GOOGLE_SERVICE_INFO_PLIST_TO}" 

Add build phase


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接