mirror of
https://github.com/zhigang1992/react-native-firebase.git
synced 2026-01-12 22:50:20 +08:00
Goodbye Fabric, hello Firebase Crashlytics. BREAKING CHANGE: This is a breaking change to remove the use of the Fabric SDKs. Co-authored-by: David Buchan-Swanson <david.buchanswanson@gmail.com> Co-authored-by: Mike Diarmid <mike.diarmid@gmail.com> [publish]
159 lines
5.5 KiB
Bash
Executable File
159 lines
5.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Copyright (c) 2016-present Invertase Limited & Contributors
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this library except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
set -e
|
|
|
|
_MAX_LOOKUPS=2;
|
|
_SEARCH_RESULT=''
|
|
_RN_ROOT_EXISTS=''
|
|
_CURRENT_LOOKUPS=1
|
|
_JSON_ROOT="'react-native'"
|
|
_JSON_FILE_NAME='firebase.json'
|
|
_JSON_OUTPUT_BASE64='e30=' # { }
|
|
_CURRENT_SEARCH_DIR=${PROJECT_DIR}
|
|
_PLIST_BUDDY=/usr/libexec/PlistBuddy
|
|
_TARGET_PLIST="${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}"
|
|
_DSYM_PLIST="${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist"
|
|
|
|
# plist arrays
|
|
_PLIST_ENTRY_KEYS=()
|
|
_PLIST_ENTRY_TYPES=()
|
|
_PLIST_ENTRY_VALUES=()
|
|
|
|
function setPlistValue {
|
|
echo "info: setting plist entry '$1' of type '$2' in file '$4'"
|
|
${_PLIST_BUDDY} -c "Add :$1 $2 '$3'" $4 || echo "info: '$1' already exists"
|
|
}
|
|
|
|
function getFirebaseJsonKeyValue () {
|
|
if [[ ${_RN_ROOT_EXISTS} ]]; then
|
|
ruby -e "require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']"
|
|
else
|
|
echo ""
|
|
fi;
|
|
}
|
|
|
|
function jsonBoolToYesNo () {
|
|
if [[ $1 == "false" ]]; then
|
|
echo "NO"
|
|
elif [[ $1 == "true" ]]; then
|
|
echo "YES"
|
|
else echo "NO"
|
|
fi
|
|
}
|
|
|
|
echo "info: -> RNFB build script started"
|
|
echo "info: 1) Locating ${_JSON_FILE_NAME} file:"
|
|
|
|
if [[ -z ${_CURRENT_SEARCH_DIR} ]]; then
|
|
_CURRENT_SEARCH_DIR=$(pwd)
|
|
fi;
|
|
|
|
while true; do
|
|
_CURRENT_SEARCH_DIR=$(dirname "$_CURRENT_SEARCH_DIR")
|
|
if [[ "$_CURRENT_SEARCH_DIR" == "/" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;
|
|
echo "info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file."
|
|
_SEARCH_RESULT=$(find "$_CURRENT_SEARCH_DIR" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | head -n 1)
|
|
if [[ ${_SEARCH_RESULT} ]]; then
|
|
echo "info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT"
|
|
break;
|
|
fi;
|
|
_CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))
|
|
done
|
|
|
|
if [[ ${_SEARCH_RESULT} ]]; then
|
|
_JSON_OUTPUT_RAW=$(cat "${_SEARCH_RESULT}")
|
|
_RN_ROOT_EXISTS=$(ruby -e "require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]" || echo '')
|
|
|
|
if [[ ${_RN_ROOT_EXISTS} ]]; then
|
|
_JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('"'${_SEARCH_RESULT}'"').read())['${_JSON_ROOT}'])))' || echo "e30=")
|
|
fi
|
|
|
|
_PLIST_ENTRY_KEYS+=("firebase_json_raw")
|
|
_PLIST_ENTRY_TYPES+=("string")
|
|
_PLIST_ENTRY_VALUES+=("$_JSON_OUTPUT_BASE64")
|
|
|
|
# config.messaging_auto_init_enabled
|
|
_MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue "$_JSON_OUTPUT_RAW" "messaging_auto_init_enabled")
|
|
if [[ $_MESSAGING_AUTO_INIT ]]; then
|
|
_PLIST_ENTRY_KEYS+=("FirebaseMessagingAutoInitEnabled")
|
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
_PLIST_ENTRY_VALUES+=("$(jsonBoolToYesNo "$_MESSAGING_AUTO_INIT")")
|
|
fi
|
|
|
|
# config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes usful
|
|
_CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue "$_JSON_OUTPUT_RAW" "crashlytics_disable_auto_disabler")
|
|
if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == "true" ]]; then
|
|
echo "Disabled Crashlytics auto disabler." # do nothing
|
|
else
|
|
_PLIST_ENTRY_KEYS+=("FirebaseCrashlyticsCollectionEnabled")
|
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
_PLIST_ENTRY_VALUES+=("NO")
|
|
fi
|
|
|
|
# config.admob_delay_app_measurement_init
|
|
_ADMOB_DELAY_APP_MEASUREMENT=$(getFirebaseJsonKeyValue "$_JSON_OUTPUT_RAW" "admob_delay_app_measurement_init")
|
|
if [[ $_ADMOB_DELAY_APP_MEASUREMENT == "true" ]]; then
|
|
_PLIST_ENTRY_KEYS+=("GADDelayAppMeasurementInit")
|
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
_PLIST_ENTRY_VALUES+=("YES")
|
|
fi
|
|
|
|
# config.admob_ios_app_id
|
|
_ADMOB_IOS_APP_ID=$(getFirebaseJsonKeyValue "$_JSON_OUTPUT_RAW" "admob_ios_app_id")
|
|
if [[ $_ADMOB_IOS_APP_ID ]]; then
|
|
_PLIST_ENTRY_KEYS+=("GADApplicationIdentifier")
|
|
_PLIST_ENTRY_TYPES+=("string")
|
|
_PLIST_ENTRY_VALUES+=("$_ADMOB_IOS_APP_ID")
|
|
fi
|
|
else
|
|
_PLIST_ENTRY_KEYS+=("firebase_json_raw")
|
|
_PLIST_ENTRY_TYPES+=("string")
|
|
_PLIST_ENTRY_VALUES+=("$_JSON_OUTPUT_BASE64")
|
|
echo "warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase."
|
|
fi;
|
|
|
|
echo "info: 2) Injecting Info.plist entries: "
|
|
|
|
# Log out the keys we're adding
|
|
for i in "${!_PLIST_ENTRY_KEYS[@]}"; do
|
|
echo " -> $i) ${_PLIST_ENTRY_KEYS[$i]}" "${_PLIST_ENTRY_TYPES[$i]}" "${_PLIST_ENTRY_VALUES[$i]}"
|
|
done
|
|
|
|
for plist in "${_TARGET_PLIST}" "${_DSYM_PLIST}" ; do
|
|
if [[ -f "${plist}" ]]; then
|
|
|
|
# paths with spaces break the call to setPlistValue. temporarily modify
|
|
# the shell internal field separator variable (IFS), which normally
|
|
# includes spaces, to consist only of line breaks
|
|
oldifs=$IFS
|
|
IFS="
|
|
"
|
|
|
|
for i in "${!_PLIST_ENTRY_KEYS[@]}"; do
|
|
setPlistValue "${_PLIST_ENTRY_KEYS[$i]}" "${_PLIST_ENTRY_TYPES[$i]}" "${_PLIST_ENTRY_VALUES[$i]}" "${plist}"
|
|
done
|
|
|
|
# restore the original internal field separator value
|
|
IFS=$oldifs
|
|
else
|
|
echo "warning: A Info.plist build output file was not found (${plist})"
|
|
fi
|
|
done
|
|
|
|
echo "info: <- RNFB build script finished"
|
|
|