Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit f132dce

Browse files
Merge pull request #1699 from apolloai/feature/firebase-crashlytics-upgrade
Upgrade Fabric/Crashlytics to new FirebaseCrashlytics
2 parents 849db1d + 437b869 commit f132dce

24 files changed

+445
-811
lines changed

publish/scripts/installer.js

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,6 @@ function promptQuestionsResult(result) {
253253
writePodFile(result);
254254
writeGoogleServiceCopyHook();
255255
writeBuildscriptHookForCrashlytics(isSelected(result.crashlytics));
256-
activateIOSCrashlyticsFramework(isSelected(result.crashlytics));
257256
activateIOSMLKitCameraFramework(isSelected(result.ml_kit));
258257
}
259258

@@ -319,14 +318,6 @@ function activateIOSMLKitCameraFramework(enable) {
319318
}
320319
}
321320

322-
function activateIOSCrashlyticsFramework(enable) {
323-
if (enable && fs.existsSync(path.join(directories.ios, 'TNSCrashlyticsLogger.framework-disabled'))) {
324-
fs.renameSync(path.join(directories.ios, 'TNSCrashlyticsLogger.framework-disabled'), path.join(directories.ios, 'TNSCrashlyticsLogger.framework'));
325-
} else if (!enable && fs.existsSync(path.join(directories.ios, 'TNSCrashlyticsLogger.framework'))) {
326-
fs.renameSync(path.join(directories.ios, 'TNSCrashlyticsLogger.framework'), path.join(directories.ios, 'TNSCrashlyticsLogger.framework-disabled'));
327-
}
328-
}
329-
330321
function askSaveConfigPrompt() {
331322
prompt.get({
332323
name: 'save_config',
@@ -377,8 +368,7 @@ function writePodFile(result) {
377368
` + (isSelected(result.performance_monitoring) ? `` : `#`) + `pod 'Firebase/Performance'
378369
379370
# Crashlytics
380-
` + (isSelected(result.crashlytics) ? `` : `#`) + `pod 'Fabric'
381-
` + (isSelected(result.crashlytics) ? `` : `#`) + `pod 'Crashlytics'
371+
` + (isSelected(result.crashlytics) ? `` : `#`) + `pod 'Firebase/Crashlytics'
382372
` + (!isSelected(result.crashlytics) ? `` : `
383373
# Crashlytics works best without bitcode
384374
post_install do |installer|
@@ -465,7 +455,7 @@ const pattern3 = /\\n\\s*\\/\\/Crashlytics 3 BEGIN[\\s\\S]*\\/\\/Crashlytics 3 E
465455
const string1 = \`
466456
//Crashlytics 1 BEGIN
467457
#else
468-
#import <Crashlytics/CLSLogging.h>
458+
@import FirebaseCrashlytics;
469459
#endif
470460
//Crashlytics 1 END
471461
\`;
@@ -475,7 +465,7 @@ const string2 = \`
475465
#if DEBUG
476466
#else
477467
static int redirect_cls(const char *prefix, const char *buffer, int size) {
478-
CLSLog(@"%s: %.*s", prefix, size, buffer);
468+
[[FIRCrashlytics crashlytics] logWithFormat:@"%s: %.*s", prefix, size, buffer];
479469
return size;
480470
}
481471
@@ -527,7 +517,7 @@ module.exports = function($logger, $projectData, hookArgs) {
527517
528518
// Xcode 10 requires 'inputPaths' set, see https://firebase.google.com/docs/crashlytics/get-started
529519
var options = {
530-
shellPath: '/bin/sh', shellScript: '\"\${PODS_ROOT}/Fabric/run\"',
520+
shellPath: '/bin/sh', shellScript: '\"\${PODS_ROOT}/FirebaseCrashlytics/run\"',
531521
inputPaths: ['"\$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)\"']
532522
};
533523
@@ -660,7 +650,7 @@ dependencies {
660650
` + (isSelected(result.performance_monitoring) ? `` : `//`) + ` implementation "com.google.firebase:firebase-perf:19.0.5"
661651
662652
// Crashlytics
663-
` + (isSelected(result.crashlytics) ? `` : `//`) + ` implementation "com.crashlytics.sdk.android:crashlytics:2.10.1"
653+
` + (isSelected(result.crashlytics) ? `` : `//`) + ` implementation "com.google.firebase:firebase-crashlytics:17.2.2"
664654
665655
// Cloud Messaging (FCM)
666656
` + (isSelected(result.messaging) || isSelected(result.external_push_client_only) ? `` : `//`) + ` implementation "com.google.firebase:firebase-messaging:20.1.0"
@@ -705,7 +695,7 @@ dependencies {
705695
apply plugin: "com.google.gms.google-services"
706696
707697
// Crashlytics
708-
` + (isSelected(result.crashlytics) ? `` : `//`) + `apply plugin: "io.fabric"
698+
` + (isSelected(result.crashlytics) ? `` : `//`) + `apply plugin: "com.google.firebase.crashlytics"
709699
`);
710700
console.log('Successfully created Android (include.gradle) file.');
711701
} catch (e) {
@@ -961,27 +951,30 @@ module.exports = function($logger, $projectData) {
961951
if (fs.existsSync(projectBuildGradlePath)) {
962952
let buildGradleContent = fs.readFileSync(projectBuildGradlePath).toString();
963953
964-
if (buildGradleContent.indexOf("fabric.io") === -1) {
954+
if (buildGradleContent.indexOf(" google()\\n") === -1) {
965955
let repositoriesNode = buildGradleContent.indexOf("repositories", 0);
966956
if (repositoriesNode > -1) {
967957
repositoriesNode = buildGradleContent.indexOf("}", repositoriesNode);
968-
buildGradleContent = buildGradleContent.substr(0, repositoriesNode - 1) + '\\t\\tmaven { url "https://maven.fabric.io/public" }\\n\\t\\tmaven { url "https://dl.bintray.com/android/android-tools" }\\n' + buildGradleContent.substr(repositoriesNode - 1);
969-
}
970-
971-
let dependenciesNode = buildGradleContent.indexOf("dependencies", 0);
972-
if (dependenciesNode > -1) {
973-
dependenciesNode = buildGradleContent.indexOf("}", dependenciesNode);
974-
// see https://docs.fabric.io/android/changelog.html
975-
buildGradleContent = buildGradleContent.substr(0, dependenciesNode - 1) + ' classpath "io.fabric.tools:gradle:1.26.1"\\n' + buildGradleContent.substr(dependenciesNode - 1);
958+
buildGradleContent = buildGradleContent.substr(0, repositoriesNode - 1) + '\\t\\tgoogle()\\n' + buildGradleContent.substr(repositoriesNode - 1);
976959
}
977960
978-
} else if (buildGradleContent.indexOf("https://dl.bintray.com/android/android-tools") === -1) {
961+
}
962+
963+
if (buildGradleContent.indexOf("https://dl.bintray.com/android/android-tools") === -1) {
979964
let repositoriesNode = buildGradleContent.indexOf("repositories", 0);
980965
if (repositoriesNode > -1) {
981966
repositoriesNode = buildGradleContent.indexOf("}", repositoriesNode);
982967
buildGradleContent = buildGradleContent.substr(0, repositoriesNode - 1) + '\\t\\tmaven { url "https://dl.bintray.com/android/android-tools" }\\n' + buildGradleContent.substr(repositoriesNode - 1);
983968
}
984969
}
970+
971+
if (buildGradleContent.indexOf("com.google.firebase:firebase-crashlytics-gradle") === -1) {
972+
let dependenciesNode = buildGradleContent.indexOf("dependencies", 0);
973+
if (dependenciesNode > -1) {
974+
dependenciesNode = buildGradleContent.indexOf("}", dependenciesNode);
975+
buildGradleContent = buildGradleContent.substr(0, dependenciesNode - 1) + ' classpath "com.google.firebase:firebase-crashlytics-gradle:2.3.0"\\n' + buildGradleContent.substr(dependenciesNode - 1);
976+
}
977+
}
985978
986979
let gradlePattern = /classpath ('|")com\\.android\\.tools\\.build:gradle:\\d+\\.\\d+\\.\\d+('|")/;
987980
let googleServicesPattern = /classpath ('|")com\\.google\\.gms:google-services:\\d+\\.\\d+\\.\\d+('|")/;

src/crashlytics/crashlytics.android.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,72 +5,69 @@ declare const com: any;
55

66
export function sendCrashLog(exception: any /* java.lang.Exception */): void {
77
if (isCrashlyticsAvailable()) {
8-
com.crashlytics.android.Crashlytics.logException(exception);
8+
com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().recordException(exception);
99
}
1010
}
1111

1212
export function log(msg: string, tag?: string, priority?: number): void {
1313
if (isCrashlyticsAvailable()) {
1414
if (tag && priority) {
15-
com.crashlytics.android.Crashlytics.log(priority, tag, msg);
15+
const fullMessage = priority + '/' + tag + ': ' + msg;
16+
com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().log(fullMessage);
1617
} else {
17-
com.crashlytics.android.Crashlytics.log(msg);
18+
com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().log(msg);
1819
}
1920
}
2021
}
2122

2223
export function setString(key: string, value: string): void {
2324
if (isCrashlyticsAvailable()) {
24-
com.crashlytics.android.Crashlytics.setString(key, value);
25+
com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().setCustomKey(key, value);
2526
}
2627
}
2728

2829
export function setBool(key: string, value: boolean): void {
2930
if (isCrashlyticsAvailable()) {
30-
com.crashlytics.android.Crashlytics.setBool(key, value);
31+
com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().setCustomKey(key, value);
3132
}
3233
}
3334

3435
export function setFloat(key: string, value: number): void {
3536
if (isCrashlyticsAvailable()) {
36-
com.crashlytics.android.Crashlytics.setFloat(key, value);
37+
com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().setCustomKey(key, value);
3738
}
3839
}
3940

4041
export function setInt(key: string, value: number): void {
4142
if (isCrashlyticsAvailable()) {
42-
com.crashlytics.android.Crashlytics.setInt(key, value);
43+
com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().setCustomKey(key, value);
4344
}
4445
}
4546

4647
export function setDouble(key: string, value: number): void {
4748
if (isCrashlyticsAvailable()) {
48-
com.crashlytics.android.Crashlytics.setDouble(key, value);
49+
com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().setCustomKey(key, value);
4950
}
5051
}
5152

5253
export function setUserId(id: string): void {
5354
if (isCrashlyticsAvailable()) {
54-
com.crashlytics.android.Crashlytics.setUserIdentifier(id);
55+
com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().setUserId(id);
5556
}
5657
}
5758

5859
export function crash(): void {
5960
if (isCrashlyticsAvailable()) {
60-
com.crashlytics.android.Crashlytics.getInstance().crash();
61+
throw new java.lang.RuntimeException('Test Crash');
6162
}
6263
}
6364

6465
export function setCrashlyticsCollectionEnabled(enabled: boolean): void {
65-
if (isCrashlyticsAvailable()) {
66-
io.fabric.sdk.android.Fabric.with(
67-
appModule.getNativeApplication(),
68-
[new com.crashlytics.android.Crashlytics()]);
69-
}
66+
com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(new java.lang.Boolean(enabled));
7067
}
7168

7269
function isCrashlyticsAvailable(): boolean {
73-
if (typeof (com.crashlytics) === "undefined" || typeof (com.crashlytics.android.Crashlytics) === "undefined") {
70+
if (typeof (com.google.firebase.crashlytics.FirebaseCrashlytics) === "undefined" || typeof (com.google.firebase.crashlytics.FirebaseCrashlytics.getInstance()) === "undefined") {
7471
console.log(ENABLE_CRASHLYTICS_HINT);
7572
return false;
7673
}

src/crashlytics/crashlytics.ios.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,71 +2,71 @@ import { ENABLE_CRASHLYTICS_HINT } from "./crashlytics-common";
22

33
export function sendCrashLog(exception: any /* NSError */): void {
44
if (isCrashlyticsAvailable()) {
5-
Crashlytics.sharedInstance().recordError(exception);
5+
FIRCrashlytics.crashlytics().recordError(exception);
66
}
77
}
88

99
export function log(msg: string, tag?: string, priority?: number): void {
1010
if (isCrashlyticsAvailable()) {
1111
if (tag) {
12-
TNSCrashlyticsLoggerWrapper.log(tag + " - " + msg);
12+
FIRCrashlytics.crashlytics().log(tag + " - " + msg);
1313
} else {
14-
TNSCrashlyticsLoggerWrapper.log(msg);
14+
FIRCrashlytics.crashlytics().log(msg);
1515
}
1616
}
1717
}
1818

1919
export function setString(key: string, value: string): void {
2020
if (isCrashlyticsAvailable()) {
21-
Crashlytics.sharedInstance().setObjectValueForKey(value, key);
21+
FIRCrashlytics.crashlytics().setCustomValueForKey(value, key);
2222
}
2323
}
2424

2525
export function setBool(key: string, value: boolean): void {
2626
if (isCrashlyticsAvailable()) {
27-
Crashlytics.sharedInstance().setBoolValueForKey(value, key);
27+
FIRCrashlytics.crashlytics().setCustomValueForKey(value, key);
2828
}
2929
}
3030

3131
export function setFloat(key: string, value: number): void {
3232
if (isCrashlyticsAvailable()) {
33-
Crashlytics.sharedInstance().setFloatValueForKey(value, key);
33+
FIRCrashlytics.crashlytics().setCustomValueForKey(value, key);
3434
}
3535
}
3636

3737
export function setInt(key: string, value: number): void {
3838
if (isCrashlyticsAvailable()) {
39-
Crashlytics.sharedInstance().setIntValueForKey(value, key);
39+
FIRCrashlytics.crashlytics().setCustomValueForKey(value, key);
4040
}
4141
}
4242

4343
export function setDouble(key: string, value: number): void {
4444
if (isCrashlyticsAvailable()) {
45-
Crashlytics.sharedInstance().setFloatValueForKey(value, key);
45+
FIRCrashlytics.crashlytics().setCustomValueForKey(value, key);
4646
}
4747
}
4848

4949
export function setUserId(id: string): void {
5050
if (isCrashlyticsAvailable()) {
51-
Crashlytics.sharedInstance().setUserIdentifier(id);
51+
FIRCrashlytics.crashlytics().setUserID(id);
5252
}
5353
}
5454

5555
export function crash(): void {
5656
if (isCrashlyticsAvailable()) {
57-
Crashlytics.sharedInstance().crash();
57+
// TODO: manually force crash - https://firebase.google.com/docs/crashlytics/test-implementation?authuser=0&platform=ios#force_a_crash_to_test_your_implementation
58+
console.log('currently manual crashing not implemented');
5859
}
59-
Fabric.with(NSArray.arrayWithObject(Crashlytics.class()));
6060
}
6161

6262
export function setCrashlyticsCollectionEnabled(enabled: boolean): void {
6363
if (isCrashlyticsAvailable()) {
64-
Fabric.with(NSArray.arrayWithObject(Crashlytics.class()));
64+
FIRCrashlytics.crashlytics().setCrashlyticsCollectionEnabled(enabled);
6565
}
6666
}
6767

6868
function isCrashlyticsAvailable(): boolean {
69-
if (typeof (Crashlytics) === "undefined") {
69+
if (typeof (FIRCrashlytics) === "undefined") {
7070
console.log(ENABLE_CRASHLYTICS_HINT);
7171
return false;
7272
}

src/firebase.android.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -306,13 +306,6 @@ firebase.init = arg => {
306306
).setAnalyticsCollectionEnabled(arg.analyticsCollectionEnabled !== false);
307307
}
308308

309-
// note that this only makes sense if crash reporting was disabled in AndroidManifest.xml
310-
if (arg.crashlyticsCollectionEnabled && typeof (com.crashlytics) !== "undefined" && typeof (com.crashlytics.android.Crashlytics) !== "undefined") {
311-
io.fabric.sdk.android.Fabric.with(
312-
appModule.android.context || appModule.getNativeApplication(),
313-
[new com.crashlytics.android.Crashlytics()]);
314-
}
315-
316309
if (typeof (com.google.firebase.database) !== "undefined" && typeof (com.google.firebase.database.ServerValue) !== "undefined") {
317310
firebase.ServerValue = {
318311
TIMESTAMP: firebase.toJsObject(com.google.firebase.database.ServerValue.TIMESTAMP)

src/firebase.ios.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -344,10 +344,6 @@ firebase.init = arg => {
344344
}
345345
}
346346

347-
if (arg.crashlyticsCollectionEnabled && typeof (Crashlytics) !== "undefined") {
348-
Fabric.with(NSArray.arrayWithObject(Crashlytics.class()));
349-
}
350-
351347
if (typeof (FIRDatabase) !== "undefined") {
352348
if (arg.persist) {
353349
FIRDatabase.database().persistenceEnabled = true;
@@ -947,11 +943,11 @@ firebase.login = arg => {
947943
appleIDRequest.nonce = sha256Nonce;
948944

949945
const authorizationController = ASAuthorizationController.alloc().initWithAuthorizationRequests([appleIDRequest]);
950-
const delegate = ASAuthorizationControllerDelegateImpl.createWithOwnerAndResolveReject(this, resolve, reject);
946+
const delegate = ASAuthorizationControllerDelegateImpl.createWithOwnerAndResolveReject(this as any, resolve, reject);
951947
CFRetain(delegate);
952948
authorizationController.delegate = delegate;
953949

954-
authorizationController.presentationContextProvider = ASAuthorizationControllerPresentationContextProvidingImpl.createWithOwnerAndCallback(this);
950+
authorizationController.presentationContextProvider = ASAuthorizationControllerPresentationContextProvidingImpl.createWithOwnerAndCallback(this as any);
955951

956952
authorizationController.performRequests();
957953

src/platforms/ios/TNSCrashlyticsLogger.framework-disabled/Headers/TNSCrashlyticsLogger.h

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/platforms/ios/TNSCrashlyticsLogger.framework-disabled/Headers/TNSCrashlyticsLoggerWrapper.h

Lines changed: 0 additions & 7 deletions
This file was deleted.
-772 Bytes
Binary file not shown.

src/platforms/ios/TNSCrashlyticsLogger.framework-disabled/Modules/module.modulemap

Lines changed: 0 additions & 6 deletions
This file was deleted.
Binary file not shown.

0 commit comments

Comments
 (0)