I'm trying to integrate Firebase Crashlytics into iOS my app, which has Firebase Crash Reporting enabled. I've followed the documentation here , but my build always fails when running the custom build phase:
"${PODS_ROOT}/Fabric/run"
The error in Xcode is the following:
error: Fabric: Configuration Issue
Fabric API key not valid. Your Fabric run script build phase should contain your API key: ./Fabric.framework/run INSERT_YOUR_API_KEY INSERT_YOUR_BUILD_SECRET
I do not have a Fabric API key and I suppose that they fabric keys should be taken care by the Firebase library. I have the Info.plist in my project, Firebase is fully functional, but I cannot get past the Fabric run phase. Any help on how to fix this is greatly appreciated!
Finally figured it out, posting for anyone that might be baffled by the same problem.
If you've tried to install fabric via the OSX Fabric.app , or you were using Fabric Crashlytics in the past, then it will have added your Fabric API key to your Info.plist
, which the Fabric initialization build script is trying to read (I guess).
After deleting the Fabric keys form the Info.plist
the script works, without the need of any keys/params.
The Firebase docs should include a snippet warning on this.
If you follow closely the Getting Started documentation, you might be in for some frustrations. Trust me. I had my share of that.
Now here's what I can share with you.
If you previously had Fabric RunScript for that Target, then it's best if you delete that and create a new one, apply the GettingStarted instruction , and replace the $(INFOPLIST_PATH)
with GoogleService-Info.plist
.
There should be no Fabric configuration on your Info.plist
file anymore. It's this thing: <key>Fabric</key><dict>...</dict>
. If you still have that, time to say goodbye and let go of those feelings or face this issue .
[Fabric] failed to download settings Error Domain=FABNetworkError Code=-5... blah blah blah
, then go clean that Build Folder first ( shift + cmd + k
).If your next build works, try force crashing your app and check out the crash logs on Firebase.
Here's my stack: Xcode 10.2.1 | Fabric 1.9 | Crashlytics 3.12
我的问题是我之前使用的是旧 Fabric,我不得不从 info.plist 中删除密钥
I followed the https://fabric.io/kits/ios/crashlytics/install documentation and added the Run Script and updated Info.plist but still got the above issue.
Apparently, I had accidentally added twice 'New Run Script Phase'. After removing the unnecessary 'Run Script's the project compiled successfully.
Xcode 10.1 Fabric 1.7.5 Crashlytics 3.10.4
if crashlytics is already set up in your project (in case of migration),
"${PODS_ROOT}/Fabric/run"
, instead of "${PODS_ROOT}/Fabric/run" key1 key2
in the Run script under build phase)if crashlytics is not setup in your project already(starting a fresh integration with firebase crashlytics), simply follow the documentation.
If you're using Crashlytics, you might have to go into your Build Phases -> Crashlytics configuration
and add it into the shell/bin/sh section like this: `set -e
if [[ ${PODS_ROOT} ]]; then echo "info: Exec Fabric Run from Pods" "${PODS_ROOT}/Fabric/run" YOUR KEY HERE else echo "info: Exec Fabric Run from framework" "${PROJECT_DIR}/Fabric.framework/run" YOUR KEY HERE fi`
Alternative script
set -e
echo "info: Exec Upload dSYM"
#Path for google service .plist
GOOGLE_SERVICE_INFO_PLIST="${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}/GoogleService-Info.plist"
#Path for DSYM directory
DSYM_PATH="$DWARF_DSYM_FOLDER_PATH/dddd/$DWARF_DSYM_FILE_NAME"
#Firebase command script
CMD=""
if [[ ${PODS_ROOT} ]]; then
echo "info: Exec FirebaseCrashlytics Run from Pods"
CMD="$PODS_ROOT/FirebaseCrashlytics/upload-symbols"
else
echo "info: Exec FirebaseCrashlytics Run from framework"
CMD="$PROJECT_DIR/FirebaseCrashlytics.framework/upload-symbols"
fi
echo "info: Checking if .plist exists"
if [ -f "$GOOGLE_SERVICE_INFO_PLIST" ]; then
echo "info: $GOOGLE_SERVICE_INFO_PLIST exists."
else
echo "ERROR: $GOOGLE_SERVICE_INFO_PLIST does not exist."
exit 1
fi
echo "info: Checking if .dSYM"
if [ -d "$DSYM_PATH" ]; then
echo "info: $DSYM_PATH exists."
else
echo "ERROR: $DSYM_PATH does not exist."
echo "info: try fallback"
DSYM_PATH=` find "${DWARF_DSYM_FOLDER_PATH}" -name "*.dSYM" | xargs `
if [ -d "$DSYM_PATH" ]; then
echo "info: $DSYM_PATH exists."
else
echo "ERROR: $DSYM_PATH does not exist."
exit 1
fi
fi
echo "info: Check if upload-symbols script exists"
if [ -f "$CMD" ]; then
echo "$CMD exists."
else
echo "ERROR: $CMD does not exist."
exit 1
fi
echo "info: Starting command upload-symbols"
"${CMD}" -gsp "$GOOGLE_SERVICE_INFO_PLIST" -p ios "$DSYM_PATH" > /dev/null 2>&1 &
echo "info: Symbol uploading will proceed in the background."
echo "info: remove '> /dev/null 2>&1 &' to test in the main thread and see if there are any errors, or open console and filter with 'upload-symbols'"
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.