【发布时间】:2020-06-17 10:14:32
【问题描述】:
我之前已将我的项目从 Fabric 迁移到 Firebase,现在正尝试从 Crashlytics 迁移到 FirebaseCrashlytics,但我遇到了问题。我跟着upgrade guide,但无济于事。
我的项目有多个方案,确切地说是 4 个,每个方案都有不同的 Bundle ID,因此也有不同的GoogleService-Info.plist。我已经在我的 Crashlytics 运行脚本阶段解决了这个问题,它看起来如下:
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist
GOOGLESERVICE_INFO_APP_STORE=${PROJECT_DIR}/${TARGET_NAME}/Application/Firebase/AppStore/${GOOGLESERVICE_INFO_PLIST}
GOOGLESERVICE_INFO_PRODUCTION=${PROJECT_DIR}/${TARGET_NAME}/Application/Firebase/Production/${GOOGLESERVICE_INFO_PLIST}
GOOGLESERVICE_INFO_BETA=${PROJECT_DIR}/${TARGET_NAME}/Application/Firebase/Beta/${GOOGLESERVICE_INFO_PLIST}
GOOGLESERVICE_INFO_STAGING=${PROJECT_DIR}/${TARGET_NAME}/Application/Firebase/Staging/${GOOGLESERVICE_INFO_PLIST}
${PODS_ROOT}/FirebaseCrashlytics/run
if [ "${CONFIGURATION}" == "AppStore" ]
then
echo "Setting up Crashlytics for App Store..."
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${GOOGLESERVICE_INFO_APP_STORE}" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
elif [ "$CONFIGURATION" == "Production" ]
then
echo "Setting up Crashlytics for production..."
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${GOOGLESERVICE_INFO_PRODUCTION}" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
elif [ "$CONFIGURATION" == "Beta" ]
then
echo "Setting up Crashlytics for beta..."
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${GOOGLESERVICE_INFO_BETA}" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
elif [ "$CONFIGURATION" == "Staging" ]
then
echo "Setting up Crashlytics for staging..."
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${GOOGLESERVICE_INFO_STAGING}" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
else
echo "Can't find matching GoogleService-Info.plist for Crashlytics configuration..."
fi
那么我的 App Delegate 是这样的
@import Firebase;
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[FIRApp configure];
// Just put these in for testing
[[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:NO];
[[FIRCrashlytics crashlytics] checkForUnsentReportsWithCompletion:^(BOOL hasUnsentReports) {
if (hasUnsentReports) {
NSLog(@"-=-=-=-=- HAS UNSENT REPORTS -=-=-=-=-");
} else {
NSLog(@"-=-=-=-=- NO UNSENT REPORTS -=-=-=-=-");
}
}];
if ([[FIRCrashlytics crashlytics] didCrashDuringPreviousExecution]) {
NSLog(@"-=-=-=-=- APP CRASHED DURING LAST RUN -=-=-=-=-");
}
return YES;
}
测试一下。我从 Xcode 启动它,然后停止它,以便它分离调试器。然后我从模拟器中启动它并按下一个调用assert(NO); 的按钮,它会按预期崩溃。然后我再次从 Xcode 启动它,我总是在调试器中看到这一行:
-=-=-=-=- NO UNSENT REPORTS -=-=-=-=-
我不知道出了什么问题。起初我认为它没有将崩溃发送到 Firebase,但现在我认为它甚至没有记录崩溃是我一直看到没有未发送的报告。
任何帮助表示赞赏。
【问题讨论】:
-
您可以尝试在您的运行脚本中使用它吗? ${PODS_ROOT}/FirebaseCrashlytics/run /path/to/pods/directory/FirebaseCrashlytics/upload-symbols
-
@Mr.P,您是如何在同一个项目中使用多个 GoogleService-info.plist 文件构建的?您是否将它们从构建源中删除?如果我不在构建源中包含这些文件,它会起作用吗?
-
@SazzadHissainKhan 我只是将每个文件放在不同的文件夹下。可以看到上面最上面的sn-p代码中第一个路径定义为
GOOGLESERVICE_INFO_APP_STORE
标签: ios objective-c firebase crashlytics