@react-native-firebase/crashlytics 26.4.0 → 27.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/RNFBCrashlytics.podspec +7 -1
- package/android/build.gradle +8 -0
- package/android/proguard-rules.pro +20 -0
- package/android/src/main/java/io/invertase/firebase/crashlytics/Constants.kt +42 -0
- package/android/src/main/java/io/invertase/firebase/crashlytics/{JavaScriptError.java → JavaScriptError.kt} +4 -6
- package/android/src/main/java/io/invertase/firebase/crashlytics/NativeRNFBTurboCrashlytics.java +11 -4
- package/android/src/main/java/io/invertase/firebase/crashlytics/ReactNativeFirebaseCrashlyticsFatalExit.java +117 -0
- package/android/src/main/java/io/invertase/firebase/crashlytics/ReactNativeFirebaseCrashlyticsInternal.java +80 -0
- package/android/src/main/java/io/invertase/firebase/crashlytics/ReactNativeFirebaseCrashlyticsNativeHelper.kt +45 -0
- package/android/src/main/java/io/invertase/firebase/crashlytics/{UnhandledPromiseRejection.java → UnhandledPromiseRejection.kt} +4 -6
- package/android/src/test/java/io/invertase/firebase/crashlytics/ConstantsAndJsErrorTypesTest.java +84 -0
- package/android/src/test/java/io/invertase/firebase/crashlytics/ReactNativeFirebaseCrashlyticsFatalExitBarrierTest.java +122 -0
- package/android/src/test/java/io/invertase/firebase/crashlytics/ReactNativeFirebaseCrashlyticsFatalExitTest.java +189 -0
- package/android/src/test/java/io/invertase/firebase/crashlytics/ReactNativeFirebaseCrashlyticsInternalTest.java +199 -0
- package/android/src/test/java/io/invertase/firebase/crashlytics/ReactNativeFirebaseCrashlyticsNativeHelperTest.java +108 -0
- package/dist/module/version.js +1 -1
- package/dist/typescript/lib/index.d.ts +1 -1
- package/dist/typescript/lib/version.d.ts +1 -1
- package/ios/RNFBCrashlytics/RNFBCrashlyticsDebuggerProbe.swift +121 -0
- package/ios/RNFBCrashlytics/RNFBCrashlyticsHelper.h +98 -0
- package/ios/RNFBCrashlytics/RNFBCrashlyticsHelper.m +182 -0
- package/ios/RNFBCrashlytics/RNFBCrashlyticsModule.mm +57 -75
- package/ios/RNFBCrashlytics.xcodeproj/project.pbxproj +14 -0
- package/ios/RNFBCrashlyticsUnitTests/HostStubs/Firebase/FIRCrashlyticsHostStub.m +273 -0
- package/ios/RNFBCrashlyticsUnitTests/HostStubs/Firebase/Firebase.h +56 -0
- package/ios/RNFBCrashlyticsUnitTests/RNFBCrashlyticsDebuggerProbeTests.swift +112 -0
- package/ios/RNFBCrashlyticsUnitTests/RNFBCrashlyticsFatalExitTests.m +268 -0
- package/ios/RNFBCrashlyticsUnitTests/RNFBCrashlyticsHelperHostStubTests.m +119 -0
- package/ios/RNFBCrashlyticsUnitTests/RNFBCrashlyticsUnitTests.xcodeproj/project.pbxproj +265 -0
- package/ios/RNFBCrashlyticsUnitTests/RNFBCrashlyticsUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBCrashlyticsUnitTests.xcscheme +69 -0
- package/ios_config.sh +38 -5
- package/lib/version.ts +1 -1
- package/package.json +4 -4
- package/android/src/main/java/io/invertase/firebase/crashlytics/Constants.java +0 -29
- package/android/src/main/java/io/invertase/firebase/crashlytics/ReactNativeFirebaseCrashlyticsNativeHelper.java +0 -18
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this library except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#import <XCTest/XCTest.h>
|
|
18
|
+
|
|
19
|
+
#import <Firebase/Firebase.h>
|
|
20
|
+
#import "RNFBCrashlyticsHelper.h"
|
|
21
|
+
|
|
22
|
+
@interface RNFBCrashlyticsHelperHostStubTests : XCTestCase
|
|
23
|
+
@end
|
|
24
|
+
|
|
25
|
+
@implementation RNFBCrashlyticsHelperHostStubTests
|
|
26
|
+
|
|
27
|
+
- (void)setUp {
|
|
28
|
+
[super setUp];
|
|
29
|
+
[FIRCrashlytics resetTestState];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
- (void)tearDown {
|
|
33
|
+
[FIRCrashlytics resetTestState];
|
|
34
|
+
[super tearDown];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
- (void)testIsDebuggerAttached_returnsBoolWithoutCrash {
|
|
38
|
+
// Thin ObjC facade over Swift probe (already covered by DebuggerProbeTests).
|
|
39
|
+
BOOL attached = [RNFBCrashlyticsHelper isDebuggerAttached];
|
|
40
|
+
XCTAssertTrue(attached == YES || attached == NO);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
- (void)testLog_forwardsMessage {
|
|
44
|
+
[RNFBCrashlyticsHelper log:@"hello-helper"];
|
|
45
|
+
XCTAssertEqualObjects(FIRCrashlytics.loggedMessages, @[ @"hello-helper" ]);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
- (void)testSetCustomValue_andUserID {
|
|
49
|
+
[RNFBCrashlyticsHelper setCustomValue:@"v1" forKey:@"k1"];
|
|
50
|
+
[RNFBCrashlyticsHelper setUserID:@"user-42"];
|
|
51
|
+
XCTAssertEqualObjects(FIRCrashlytics.customValues[@"k1"], @"v1");
|
|
52
|
+
XCTAssertEqualObjects(FIRCrashlytics.userIDValue, @"user-42");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
- (void)testSetCustomKeysAndValues_appliesEachEntry {
|
|
56
|
+
[RNFBCrashlyticsHelper setCustomKeysAndValues:@{@"a" : @"1", @"b" : @"2"}];
|
|
57
|
+
XCTAssertEqualObjects(FIRCrashlytics.customValues[@"a"], @"1");
|
|
58
|
+
XCTAssertEqualObjects(FIRCrashlytics.customValues[@"b"], @"2");
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
- (void)testCheckForUnsentReports_forwardsCompletionValue {
|
|
62
|
+
FIRCrashlytics.checkForUnsentReportsValue = YES;
|
|
63
|
+
__block NSNumber *seen = nil;
|
|
64
|
+
[RNFBCrashlyticsHelper checkForUnsentReportsWithCompletion:^(BOOL unsentReports) {
|
|
65
|
+
seen = @(unsentReports);
|
|
66
|
+
}];
|
|
67
|
+
XCTAssertEqualObjects(seen, @YES);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
- (void)testCheckForUnsentReports_nilCompletion_doesNotCrash {
|
|
71
|
+
FIRCrashlytics.checkForUnsentReportsValue = NO;
|
|
72
|
+
[RNFBCrashlyticsHelper checkForUnsentReportsWithCompletion:nil];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
- (void)testDidCrashDuringPreviousExecution_forwardsStubValue {
|
|
76
|
+
FIRCrashlytics.didCrashDuringPreviousExecutionValue = YES;
|
|
77
|
+
XCTAssertTrue([RNFBCrashlyticsHelper didCrashDuringPreviousExecution]);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
- (void)testDeleteAndSendUnsentReports_incrementCallCounts {
|
|
81
|
+
[RNFBCrashlyticsHelper deleteUnsentReports];
|
|
82
|
+
[RNFBCrashlyticsHelper sendUnsentReports];
|
|
83
|
+
XCTAssertEqual(FIRCrashlytics.deleteUnsentReportsCallCount, 1u);
|
|
84
|
+
XCTAssertEqual(FIRCrashlytics.sendUnsentReportsCallCount, 1u);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
- (void)testRecordJavaScriptError_buildsExceptionModelWithFrames {
|
|
88
|
+
NSArray *frames = @[
|
|
89
|
+
@{@"fn" : @"doThing", @"file" : @"app.js", @"line" : @12},
|
|
90
|
+
@{@"fn" : @"main", @"file" : @"index.js", @"line" : @3},
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
[RNFBCrashlyticsHelper recordJavaScriptErrorWithMessage:@"boom"
|
|
94
|
+
frames:frames
|
|
95
|
+
isUnhandledPromiseRejection:NO];
|
|
96
|
+
|
|
97
|
+
FIRExceptionModel *model = FIRCrashlytics.lastRecordedExceptionModel;
|
|
98
|
+
XCTAssertNotNil(model);
|
|
99
|
+
XCTAssertEqualObjects(model.name, @"JavaScriptError");
|
|
100
|
+
XCTAssertEqualObjects(model.reason, @"boom");
|
|
101
|
+
XCTAssertEqual(model.stackTrace.count, 2u);
|
|
102
|
+
XCTAssertEqualObjects(model.stackTrace[0].symbol, @"doThing");
|
|
103
|
+
XCTAssertEqualObjects(model.stackTrace[0].file, @"app.js");
|
|
104
|
+
XCTAssertEqual(model.stackTrace[0].line, 12u);
|
|
105
|
+
XCTAssertEqualObjects(model.stackTrace[1].symbol, @"main");
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
- (void)testRecordJavaScriptError_unhandledRejection_usesRejectionName {
|
|
109
|
+
[RNFBCrashlyticsHelper recordJavaScriptErrorWithMessage:@"rejected"
|
|
110
|
+
frames:@[]
|
|
111
|
+
isUnhandledPromiseRejection:YES];
|
|
112
|
+
|
|
113
|
+
FIRExceptionModel *model = FIRCrashlytics.lastRecordedExceptionModel;
|
|
114
|
+
XCTAssertEqualObjects(model.name, @"UnhandledPromiseRejection");
|
|
115
|
+
XCTAssertEqualObjects(model.reason, @"rejected");
|
|
116
|
+
XCTAssertEqual(model.stackTrace.count, 0u);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@end
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
// !$*UTF8*$!
|
|
2
|
+
{
|
|
3
|
+
archiveVersion = 1;
|
|
4
|
+
classes = {
|
|
5
|
+
};
|
|
6
|
+
objectVersion = 56;
|
|
7
|
+
objects = {
|
|
8
|
+
|
|
9
|
+
/* Begin PBXBuildFile section */
|
|
10
|
+
CL100000000000000000000B /* RNFBCrashlyticsDebuggerProbe.swift in Sources */ = {isa = PBXBuildFile; fileRef = CL1000000000000000000009 /* RNFBCrashlyticsDebuggerProbe.swift */; };
|
|
11
|
+
CL100000000000000000000C /* RNFBCrashlyticsDebuggerProbeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CL100000000000000000000D /* RNFBCrashlyticsDebuggerProbeTests.swift */; };
|
|
12
|
+
CL1000000000000000000015 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CL1000000000000000000014 /* XCTest.framework */; };
|
|
13
|
+
CL1000000000000000000020 /* RNFBCrashlyticsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = CL1000000000000000000021 /* RNFBCrashlyticsHelper.m */; };
|
|
14
|
+
CL1000000000000000000022 /* RNFBCrashlyticsHelperHostStubTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CL1000000000000000000023 /* RNFBCrashlyticsHelperHostStubTests.m */; };
|
|
15
|
+
CL1000000000000000000024 /* FIRCrashlyticsHostStub.m in Sources */ = {isa = PBXBuildFile; fileRef = CL1000000000000000000025 /* FIRCrashlyticsHostStub.m */; };
|
|
16
|
+
CL1000000000000000000027 /* RNFBCrashlyticsFatalExitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CL1000000000000000000028 /* RNFBCrashlyticsFatalExitTests.m */; };
|
|
17
|
+
/* End PBXBuildFile section */
|
|
18
|
+
|
|
19
|
+
/* Begin PBXFileReference section */
|
|
20
|
+
CL1000000000000000000003 /* RNFBCrashlyticsUnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RNFBCrashlyticsUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
21
|
+
CL1000000000000000000009 /* RNFBCrashlyticsDebuggerProbe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RNFBCrashlyticsDebuggerProbe.swift; path = ../RNFBCrashlytics/RNFBCrashlyticsDebuggerProbe.swift; sourceTree = SOURCE_ROOT; };
|
|
22
|
+
CL100000000000000000000D /* RNFBCrashlyticsDebuggerProbeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNFBCrashlyticsDebuggerProbeTests.swift; sourceTree = "<group>"; };
|
|
23
|
+
CL1000000000000000000014 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/MacOSX.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
|
|
24
|
+
CL1000000000000000000021 /* RNFBCrashlyticsHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RNFBCrashlyticsHelper.m; path = ../RNFBCrashlytics/RNFBCrashlyticsHelper.m; sourceTree = SOURCE_ROOT; };
|
|
25
|
+
CL1000000000000000000023 /* RNFBCrashlyticsHelperHostStubTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNFBCrashlyticsHelperHostStubTests.m; sourceTree = "<group>"; };
|
|
26
|
+
CL1000000000000000000025 /* FIRCrashlyticsHostStub.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FIRCrashlyticsHostStub.m; path = HostStubs/Firebase/FIRCrashlyticsHostStub.m; sourceTree = "<group>"; };
|
|
27
|
+
CL1000000000000000000028 /* RNFBCrashlyticsFatalExitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNFBCrashlyticsFatalExitTests.m; sourceTree = "<group>"; };
|
|
28
|
+
CL1000000000000000000026 /* RNFBCrashlyticsHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNFBCrashlyticsHelper.h; path = ../RNFBCrashlytics/RNFBCrashlyticsHelper.h; sourceTree = SOURCE_ROOT; };
|
|
29
|
+
/* End PBXFileReference section */
|
|
30
|
+
|
|
31
|
+
/* Begin PBXFrameworksBuildPhase section */
|
|
32
|
+
CL1000000000000000000012 /* Frameworks */ = {
|
|
33
|
+
isa = PBXFrameworksBuildPhase;
|
|
34
|
+
buildActionMask = 2147483647;
|
|
35
|
+
files = (
|
|
36
|
+
CL1000000000000000000015 /* XCTest.framework in Frameworks */,
|
|
37
|
+
);
|
|
38
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
39
|
+
};
|
|
40
|
+
/* End PBXFrameworksBuildPhase section */
|
|
41
|
+
|
|
42
|
+
/* Begin PBXGroup section */
|
|
43
|
+
CL1000000000000000000004 = {
|
|
44
|
+
isa = PBXGroup;
|
|
45
|
+
children = (
|
|
46
|
+
CL1000000000000000000006 /* Sources */,
|
|
47
|
+
CL1000000000000000000005 /* Products */,
|
|
48
|
+
);
|
|
49
|
+
sourceTree = "<group>";
|
|
50
|
+
};
|
|
51
|
+
CL1000000000000000000005 /* Products */ = {
|
|
52
|
+
isa = PBXGroup;
|
|
53
|
+
children = (
|
|
54
|
+
CL1000000000000000000003 /* RNFBCrashlyticsUnitTests.xctest */,
|
|
55
|
+
);
|
|
56
|
+
name = Products;
|
|
57
|
+
sourceTree = "<group>";
|
|
58
|
+
};
|
|
59
|
+
CL1000000000000000000006 /* Sources */ = {
|
|
60
|
+
isa = PBXGroup;
|
|
61
|
+
children = (
|
|
62
|
+
CL1000000000000000000009 /* RNFBCrashlyticsDebuggerProbe.swift */,
|
|
63
|
+
CL100000000000000000000D /* RNFBCrashlyticsDebuggerProbeTests.swift */,
|
|
64
|
+
CL1000000000000000000026 /* RNFBCrashlyticsHelper.h */,
|
|
65
|
+
CL1000000000000000000021 /* RNFBCrashlyticsHelper.m */,
|
|
66
|
+
CL1000000000000000000023 /* RNFBCrashlyticsHelperHostStubTests.m */,
|
|
67
|
+
CL1000000000000000000028 /* RNFBCrashlyticsFatalExitTests.m */,
|
|
68
|
+
CL1000000000000000000025 /* FIRCrashlyticsHostStub.m */,
|
|
69
|
+
);
|
|
70
|
+
name = Sources;
|
|
71
|
+
sourceTree = "<group>";
|
|
72
|
+
};
|
|
73
|
+
/* End PBXGroup section */
|
|
74
|
+
|
|
75
|
+
/* Begin PBXNativeTarget section */
|
|
76
|
+
CL1000000000000000000002 /* RNFBCrashlyticsUnitTests */ = {
|
|
77
|
+
isa = PBXNativeTarget;
|
|
78
|
+
buildConfigurationList = CL1000000000000000000013 /* Build configuration list for PBXNativeTarget "RNFBCrashlyticsUnitTests" */;
|
|
79
|
+
buildPhases = (
|
|
80
|
+
CL1000000000000000000016 /* Sources */,
|
|
81
|
+
CL1000000000000000000012 /* Frameworks */,
|
|
82
|
+
);
|
|
83
|
+
buildRules = (
|
|
84
|
+
);
|
|
85
|
+
dependencies = (
|
|
86
|
+
);
|
|
87
|
+
name = RNFBCrashlyticsUnitTests;
|
|
88
|
+
productName = RNFBCrashlyticsUnitTests;
|
|
89
|
+
productReference = CL1000000000000000000003 /* RNFBCrashlyticsUnitTests.xctest */;
|
|
90
|
+
productType = "com.apple.product-type.bundle.unit-test";
|
|
91
|
+
};
|
|
92
|
+
/* End PBXNativeTarget section */
|
|
93
|
+
|
|
94
|
+
/* Begin PBXProject section */
|
|
95
|
+
CL1000000000000000000001 /* Project object */ = {
|
|
96
|
+
isa = PBXProject;
|
|
97
|
+
attributes = {
|
|
98
|
+
BuildIndependentTargetsInParallel = 1;
|
|
99
|
+
LastUpgradeCheck = 2600;
|
|
100
|
+
ORGANIZATIONNAME = Invertase;
|
|
101
|
+
TargetAttributes = {
|
|
102
|
+
CL1000000000000000000002 = {
|
|
103
|
+
CreatedOnToolsVersion = 26.0;
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
buildConfigurationList = CL1000000000000000000017 /* Build configuration list for PBXProject "RNFBCrashlyticsUnitTests" */;
|
|
108
|
+
compatibilityVersion = "Xcode 14.0";
|
|
109
|
+
developmentRegion = en;
|
|
110
|
+
hasScannedForEncodings = 0;
|
|
111
|
+
knownRegions = (
|
|
112
|
+
en,
|
|
113
|
+
Base,
|
|
114
|
+
);
|
|
115
|
+
mainGroup = CL1000000000000000000004;
|
|
116
|
+
productRefGroup = CL1000000000000000000005 /* Products */;
|
|
117
|
+
projectDirPath = "";
|
|
118
|
+
projectRoot = "";
|
|
119
|
+
targets = (
|
|
120
|
+
CL1000000000000000000002 /* RNFBCrashlyticsUnitTests */,
|
|
121
|
+
);
|
|
122
|
+
};
|
|
123
|
+
/* End PBXProject section */
|
|
124
|
+
|
|
125
|
+
/* Begin PBXSourcesBuildPhase section */
|
|
126
|
+
CL1000000000000000000016 /* Sources */ = {
|
|
127
|
+
isa = PBXSourcesBuildPhase;
|
|
128
|
+
buildActionMask = 2147483647;
|
|
129
|
+
files = (
|
|
130
|
+
CL100000000000000000000B /* RNFBCrashlyticsDebuggerProbe.swift in Sources */,
|
|
131
|
+
CL100000000000000000000C /* RNFBCrashlyticsDebuggerProbeTests.swift in Sources */,
|
|
132
|
+
CL1000000000000000000020 /* RNFBCrashlyticsHelper.m in Sources */,
|
|
133
|
+
CL1000000000000000000024 /* FIRCrashlyticsHostStub.m in Sources */,
|
|
134
|
+
CL1000000000000000000022 /* RNFBCrashlyticsHelperHostStubTests.m in Sources */,
|
|
135
|
+
CL1000000000000000000027 /* RNFBCrashlyticsFatalExitTests.m in Sources */,
|
|
136
|
+
);
|
|
137
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
138
|
+
};
|
|
139
|
+
/* End PBXSourcesBuildPhase section */
|
|
140
|
+
|
|
141
|
+
/* Begin XCBuildConfiguration section */
|
|
142
|
+
CL1000000000000000000018 /* Debug */ = {
|
|
143
|
+
isa = XCBuildConfiguration;
|
|
144
|
+
buildSettings = {
|
|
145
|
+
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
146
|
+
CLANG_ENABLE_MODULES = YES;
|
|
147
|
+
CLANG_ENABLE_OBJC_ARC = YES;
|
|
148
|
+
COPY_PHASE_STRIP = NO;
|
|
149
|
+
DEBUG_INFORMATION_FORMAT = dwarf;
|
|
150
|
+
ENABLE_TESTABILITY = YES;
|
|
151
|
+
GCC_C_LANGUAGE_STANDARD = gnu17;
|
|
152
|
+
GCC_DYNAMIC_NO_PIC = NO;
|
|
153
|
+
GCC_OPTIMIZATION_LEVEL = 0;
|
|
154
|
+
MACOSX_DEPLOYMENT_TARGET = 14.0;
|
|
155
|
+
ONLY_ACTIVE_ARCH = YES;
|
|
156
|
+
SDKROOT = macosx;
|
|
157
|
+
SUPPORTED_PLATFORMS = macosx;
|
|
158
|
+
};
|
|
159
|
+
name = Debug;
|
|
160
|
+
};
|
|
161
|
+
CL1000000000000000000019 /* Release */ = {
|
|
162
|
+
isa = XCBuildConfiguration;
|
|
163
|
+
buildSettings = {
|
|
164
|
+
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
165
|
+
CLANG_ENABLE_MODULES = YES;
|
|
166
|
+
CLANG_ENABLE_OBJC_ARC = YES;
|
|
167
|
+
COPY_PHASE_STRIP = YES;
|
|
168
|
+
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
|
169
|
+
GCC_C_LANGUAGE_STANDARD = gnu17;
|
|
170
|
+
MACOSX_DEPLOYMENT_TARGET = 14.0;
|
|
171
|
+
SDKROOT = macosx;
|
|
172
|
+
SUPPORTED_PLATFORMS = macosx;
|
|
173
|
+
};
|
|
174
|
+
name = Release;
|
|
175
|
+
};
|
|
176
|
+
CL100000000000000000001A /* Debug */ = {
|
|
177
|
+
isa = XCBuildConfiguration;
|
|
178
|
+
buildSettings = {
|
|
179
|
+
CLANG_ENABLE_CODE_COVERAGE = YES;
|
|
180
|
+
CODE_SIGNING_ALLOWED = NO;
|
|
181
|
+
CODE_SIGNING_REQUIRED = NO;
|
|
182
|
+
CODE_SIGN_IDENTITY = "-";
|
|
183
|
+
COMBINE_HIDPI_IMAGES = YES;
|
|
184
|
+
DEFINES_MODULE = YES;
|
|
185
|
+
GENERATE_INFOPLIST_FILE = YES;
|
|
186
|
+
HEADER_SEARCH_PATHS = (
|
|
187
|
+
"$(SRCROOT)/HostStubs",
|
|
188
|
+
"$(SRCROOT)/../RNFBCrashlytics",
|
|
189
|
+
);
|
|
190
|
+
LD_RUNPATH_SEARCH_PATHS = (
|
|
191
|
+
"$(inherited)",
|
|
192
|
+
"@executable_path/../Frameworks",
|
|
193
|
+
"@loader_path/../Frameworks",
|
|
194
|
+
);
|
|
195
|
+
MACOSX_DEPLOYMENT_TARGET = 14.0;
|
|
196
|
+
OTHER_CFLAGS = (
|
|
197
|
+
"-fprofile-instr-generate",
|
|
198
|
+
"-fcoverage-mapping",
|
|
199
|
+
);
|
|
200
|
+
OTHER_LDFLAGS = (
|
|
201
|
+
"-fprofile-instr-generate",
|
|
202
|
+
);
|
|
203
|
+
PRODUCT_BUNDLE_IDENTIFIER = io.invertase.firebase.RNFBCrashlyticsUnitTests;
|
|
204
|
+
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
205
|
+
SDKROOT = macosx;
|
|
206
|
+
SUPPORTED_PLATFORMS = macosx;
|
|
207
|
+
SWIFT_OBJC_INTERFACE_HEADER_NAME = "RNFBCrashlyticsDebuggerProbe-Swift.inc";
|
|
208
|
+
SWIFT_VERSION = 5.10;
|
|
209
|
+
};
|
|
210
|
+
name = Debug;
|
|
211
|
+
};
|
|
212
|
+
CL100000000000000000001B /* Release */ = {
|
|
213
|
+
isa = XCBuildConfiguration;
|
|
214
|
+
buildSettings = {
|
|
215
|
+
CLANG_ENABLE_CODE_COVERAGE = YES;
|
|
216
|
+
CODE_SIGNING_ALLOWED = NO;
|
|
217
|
+
CODE_SIGNING_REQUIRED = NO;
|
|
218
|
+
CODE_SIGN_IDENTITY = "-";
|
|
219
|
+
COMBINE_HIDPI_IMAGES = YES;
|
|
220
|
+
DEFINES_MODULE = YES;
|
|
221
|
+
GENERATE_INFOPLIST_FILE = YES;
|
|
222
|
+
HEADER_SEARCH_PATHS = (
|
|
223
|
+
"$(SRCROOT)/HostStubs",
|
|
224
|
+
"$(SRCROOT)/../RNFBCrashlytics",
|
|
225
|
+
);
|
|
226
|
+
LD_RUNPATH_SEARCH_PATHS = (
|
|
227
|
+
"$(inherited)",
|
|
228
|
+
"@executable_path/../Frameworks",
|
|
229
|
+
"@loader_path/../Frameworks",
|
|
230
|
+
);
|
|
231
|
+
MACOSX_DEPLOYMENT_TARGET = 14.0;
|
|
232
|
+
PRODUCT_BUNDLE_IDENTIFIER = io.invertase.firebase.RNFBCrashlyticsUnitTests;
|
|
233
|
+
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
234
|
+
SDKROOT = macosx;
|
|
235
|
+
SUPPORTED_PLATFORMS = macosx;
|
|
236
|
+
SWIFT_OBJC_INTERFACE_HEADER_NAME = "RNFBCrashlyticsDebuggerProbe-Swift.inc";
|
|
237
|
+
SWIFT_VERSION = 5.10;
|
|
238
|
+
};
|
|
239
|
+
name = Release;
|
|
240
|
+
};
|
|
241
|
+
/* End XCBuildConfiguration section */
|
|
242
|
+
|
|
243
|
+
/* Begin XCConfigurationList section */
|
|
244
|
+
CL1000000000000000000017 /* Build configuration list for PBXProject "RNFBCrashlyticsUnitTests" */ = {
|
|
245
|
+
isa = XCConfigurationList;
|
|
246
|
+
buildConfigurations = (
|
|
247
|
+
CL1000000000000000000018 /* Debug */,
|
|
248
|
+
CL1000000000000000000019 /* Release */,
|
|
249
|
+
);
|
|
250
|
+
defaultConfigurationIsVisible = 0;
|
|
251
|
+
defaultConfigurationName = Debug;
|
|
252
|
+
};
|
|
253
|
+
CL1000000000000000000013 /* Build configuration list for PBXNativeTarget "RNFBCrashlyticsUnitTests" */ = {
|
|
254
|
+
isa = XCConfigurationList;
|
|
255
|
+
buildConfigurations = (
|
|
256
|
+
CL100000000000000000001A /* Debug */,
|
|
257
|
+
CL100000000000000000001B /* Release */,
|
|
258
|
+
);
|
|
259
|
+
defaultConfigurationIsVisible = 0;
|
|
260
|
+
defaultConfigurationName = Debug;
|
|
261
|
+
};
|
|
262
|
+
/* End XCConfigurationList section */
|
|
263
|
+
};
|
|
264
|
+
rootObject = CL1000000000000000000001 /* Project object */;
|
|
265
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Scheme
|
|
3
|
+
LastUpgradeVersion = "2600"
|
|
4
|
+
version = "1.7">
|
|
5
|
+
<BuildAction
|
|
6
|
+
parallelizeBuildables = "YES"
|
|
7
|
+
buildImplicitDependencies = "YES">
|
|
8
|
+
<BuildActionEntries>
|
|
9
|
+
<BuildActionEntry
|
|
10
|
+
buildForTesting = "YES"
|
|
11
|
+
buildForRunning = "YES"
|
|
12
|
+
buildForProfiling = "NO"
|
|
13
|
+
buildForArchiving = "NO"
|
|
14
|
+
buildForAnalyzing = "YES">
|
|
15
|
+
<BuildableReference
|
|
16
|
+
BuildableIdentifier = "primary"
|
|
17
|
+
BlueprintIdentifier = "CL1000000000000000000002"
|
|
18
|
+
BuildableName = "RNFBCrashlyticsUnitTests.xctest"
|
|
19
|
+
BlueprintName = "RNFBCrashlyticsUnitTests"
|
|
20
|
+
ReferencedContainer = "container:RNFBCrashlyticsUnitTests.xcodeproj">
|
|
21
|
+
</BuildableReference>
|
|
22
|
+
</BuildActionEntry>
|
|
23
|
+
</BuildActionEntries>
|
|
24
|
+
</BuildAction>
|
|
25
|
+
<TestAction
|
|
26
|
+
buildConfiguration = "Debug"
|
|
27
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
28
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
29
|
+
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
30
|
+
codeCoverageEnabled = "YES">
|
|
31
|
+
<Testables>
|
|
32
|
+
<TestableReference
|
|
33
|
+
skipped = "NO">
|
|
34
|
+
<BuildableReference
|
|
35
|
+
BuildableIdentifier = "primary"
|
|
36
|
+
BlueprintIdentifier = "CL1000000000000000000002"
|
|
37
|
+
BuildableName = "RNFBCrashlyticsUnitTests.xctest"
|
|
38
|
+
BlueprintName = "RNFBCrashlyticsUnitTests"
|
|
39
|
+
ReferencedContainer = "container:RNFBCrashlyticsUnitTests.xcodeproj">
|
|
40
|
+
</BuildableReference>
|
|
41
|
+
</TestableReference>
|
|
42
|
+
</Testables>
|
|
43
|
+
</TestAction>
|
|
44
|
+
<LaunchAction
|
|
45
|
+
buildConfiguration = "Debug"
|
|
46
|
+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
47
|
+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
48
|
+
launchStyle = "0"
|
|
49
|
+
useCustomWorkingDirectory = "NO"
|
|
50
|
+
ignoresPersistentStateOnLaunch = "NO"
|
|
51
|
+
debugDocumentVersioning = "YES"
|
|
52
|
+
debugServiceExtension = "internal"
|
|
53
|
+
allowLocationSimulation = "YES">
|
|
54
|
+
</LaunchAction>
|
|
55
|
+
<ProfileAction
|
|
56
|
+
buildConfiguration = "Release"
|
|
57
|
+
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
58
|
+
savedToolIdentifier = ""
|
|
59
|
+
useCustomWorkingDirectory = "NO"
|
|
60
|
+
debugDocumentVersioning = "YES">
|
|
61
|
+
</ProfileAction>
|
|
62
|
+
<AnalyzeAction
|
|
63
|
+
buildConfiguration = "Debug">
|
|
64
|
+
</AnalyzeAction>
|
|
65
|
+
<ArchiveAction
|
|
66
|
+
buildConfiguration = "Release"
|
|
67
|
+
revealArchiveInOrganizer = "YES">
|
|
68
|
+
</ArchiveAction>
|
|
69
|
+
</Scheme>
|
package/ios_config.sh
CHANGED
|
@@ -16,25 +16,58 @@
|
|
|
16
16
|
#
|
|
17
17
|
set -e
|
|
18
18
|
|
|
19
|
+
# upload-symbols talks to the network and has no timeout of its own, so a stalled
|
|
20
|
+
# request can hang the whole build. perl's alarm is used because macOS has no
|
|
21
|
+
# `timeout`. A timeout exits non-zero, which the callers below report as a
|
|
22
|
+
# warning without failing the build.
|
|
23
|
+
UPLOAD_SYMBOLS_TIMEOUT_SEC="${RNFB_CRASHLYTICS_UPLOAD_TIMEOUT_SEC:-300}"
|
|
24
|
+
|
|
25
|
+
run_upload_symbols() {
|
|
26
|
+
perl -e 'alarm shift; exec @ARGV' "${UPLOAD_SYMBOLS_TIMEOUT_SEC}" "$@"
|
|
27
|
+
}
|
|
28
|
+
|
|
19
29
|
if [[ ${PODS_ROOT} && -f "${PODS_ROOT}/FirebaseCrashlytics/run" ]]; then
|
|
20
30
|
echo "info: Exec FirebaseCrashlytics Run from Pods"
|
|
21
|
-
"${PODS_ROOT}/FirebaseCrashlytics/run"
|
|
31
|
+
if ! "${PODS_ROOT}/FirebaseCrashlytics/run"; then
|
|
32
|
+
echo "warning: FirebaseCrashlytics run (CocoaPods) failed; continuing without failing the build. Common causes: no network, invalid/placeholder GoogleService-Info.plist credentials, or Firebase project mismatch."
|
|
33
|
+
fi
|
|
22
34
|
elif [[ -f "${PROJECT_DIR}/FirebaseCrashlytics.framework/run" ]]; then
|
|
23
35
|
echo "info: Exec FirebaseCrashlytics Run from framework"
|
|
24
|
-
"${PROJECT_DIR}/FirebaseCrashlytics.framework/run"
|
|
36
|
+
if ! "${PROJECT_DIR}/FirebaseCrashlytics.framework/run"; then
|
|
37
|
+
echo "warning: FirebaseCrashlytics run (framework) failed; continuing without failing the build. Common causes: no network, invalid/placeholder GoogleService-Info.plist credentials, or Firebase project mismatch."
|
|
38
|
+
fi
|
|
25
39
|
else
|
|
26
40
|
# SPM: upload-symbols is at a known path in the SourcePackages checkout.
|
|
27
41
|
# BUILD_DIR is typically DerivedData/Project-hash/Build/Products — strip from /Build onward
|
|
28
42
|
# to get the DerivedData project root where SourcePackages lives.
|
|
29
43
|
SPM_CRASHLYTICS_DIR="${BUILD_DIR%Build/*}SourcePackages/checkouts/firebase-ios-sdk/Crashlytics"
|
|
30
44
|
SPM_UPLOAD_SYMBOLS="${SPM_CRASHLYTICS_DIR}/upload-symbols"
|
|
31
|
-
|
|
45
|
+
|
|
46
|
+
# GoogleService-Info.plist normally lives in the target folder
|
|
47
|
+
# (ios/<TargetName>/GoogleService-Info.plist) — that's where both Expo's config
|
|
48
|
+
# plugin and RNFB's documented manual/CLI setup place it. Fall back to the
|
|
49
|
+
# PROJECT_DIR root for setups that put it there instead.
|
|
50
|
+
if [[ -n "${TARGET_NAME}" && -f "${PROJECT_DIR}/${TARGET_NAME}/GoogleService-Info.plist" ]]; then
|
|
51
|
+
GSP_PATH="${PROJECT_DIR}/${TARGET_NAME}/GoogleService-Info.plist"
|
|
52
|
+
elif [[ -f "${PROJECT_DIR}/GoogleService-Info.plist" ]]; then
|
|
53
|
+
GSP_PATH="${PROJECT_DIR}/GoogleService-Info.plist"
|
|
54
|
+
else
|
|
55
|
+
GSP_PATH=""
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
if [[ -z "${GSP_PATH}" ]]; then
|
|
59
|
+
echo "warning: GoogleService-Info.plist not found at ${PROJECT_DIR}/${TARGET_NAME}/GoogleService-Info.plist or ${PROJECT_DIR}/GoogleService-Info.plist. Skipping dSYM upload."
|
|
60
|
+
elif [[ -x "${SPM_UPLOAD_SYMBOLS}" ]]; then
|
|
32
61
|
echo "info: Exec FirebaseCrashlytics upload-symbols from SPM"
|
|
33
|
-
"${SPM_UPLOAD_SYMBOLS}" -gsp "${
|
|
62
|
+
if ! run_upload_symbols "${SPM_UPLOAD_SYMBOLS}" -gsp "${GSP_PATH}" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"; then
|
|
63
|
+
echo "warning: FirebaseCrashlytics upload-symbols (SPM) failed or timed out; continuing without failing the build. Common causes: no network, invalid/placeholder GoogleService-Info.plist credentials, or Firebase project mismatch."
|
|
64
|
+
fi
|
|
34
65
|
elif [[ -f "${SPM_UPLOAD_SYMBOLS}" ]]; then
|
|
35
66
|
echo "info: Exec FirebaseCrashlytics upload-symbols from SPM (chmod +x)"
|
|
36
67
|
chmod +x "${SPM_UPLOAD_SYMBOLS}"
|
|
37
|
-
"${SPM_UPLOAD_SYMBOLS}" -gsp "${
|
|
68
|
+
if ! run_upload_symbols "${SPM_UPLOAD_SYMBOLS}" -gsp "${GSP_PATH}" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"; then
|
|
69
|
+
echo "warning: FirebaseCrashlytics upload-symbols (SPM) failed or timed out; continuing without failing the build. Common causes: no network, invalid/placeholder GoogleService-Info.plist credentials, or Firebase project mismatch."
|
|
70
|
+
fi
|
|
38
71
|
else
|
|
39
72
|
echo "warning: FirebaseCrashlytics run script not found at CocoaPods, framework, or SPM paths. Skipping dSYM upload."
|
|
40
73
|
echo "warning: Checked: \${PODS_ROOT}/FirebaseCrashlytics/run, \${PROJECT_DIR}/FirebaseCrashlytics.framework/run, ${SPM_UPLOAD_SYMBOLS}"
|
package/lib/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Generated by genversion.
|
|
2
|
-
export const version = '
|
|
2
|
+
export const version = '27.1.0';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-firebase/crashlytics",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "27.1.0",
|
|
4
4
|
"author": "Invertase <oss@invertase.io> (http://invertase.io)",
|
|
5
5
|
"description": "React Native Firebase - Firebase Crashlytics is a lightweight, realtime crash reporter that helps you track, prioritize, and fix stability issues that erode your app quality. React Native Firebase provides automatic crash reporting for both native and JavaScript errors, including unhandled promise rejections.",
|
|
6
6
|
"main": "./dist/module/index.js",
|
|
@@ -49,14 +49,14 @@
|
|
|
49
49
|
"crashlytics"
|
|
50
50
|
],
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"@react-native-firebase/app": "
|
|
52
|
+
"@react-native-firebase/app": "27.1.0",
|
|
53
53
|
"expo": ">=47.0.0"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"stacktrace-js": "^2.0.2"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@react-native-firebase/app": "
|
|
59
|
+
"@react-native-firebase/app": "27.1.0",
|
|
60
60
|
"expo": "^55.0.18",
|
|
61
61
|
"react-native-builder-bob": "^0.41.0",
|
|
62
62
|
"typescript": "^6.0.3"
|
|
@@ -104,5 +104,5 @@
|
|
|
104
104
|
]
|
|
105
105
|
]
|
|
106
106
|
},
|
|
107
|
-
"gitHead": "
|
|
107
|
+
"gitHead": "c65e1ee3b78bcd0c5b66996100d7d1e579ca1614"
|
|
108
108
|
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
package io.invertase.firebase.crashlytics;
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
5
|
-
*
|
|
6
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
* you may not use this library except in compliance with the License.
|
|
8
|
-
* You may obtain a copy of the License at
|
|
9
|
-
*
|
|
10
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
*
|
|
12
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
* See the License for the specific language governing permissions and
|
|
16
|
-
* limitations under the License.
|
|
17
|
-
*
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
class Constants {
|
|
21
|
-
static final String KEY_CRASHLYTICS_NDK_ENABLED = "crashlytics_ndk_enabled";
|
|
22
|
-
static final String KEY_CRASHLYTICS_DEBUG_ENABLED = "crashlytics_debug_enabled";
|
|
23
|
-
static final String KEY_CRASHLYTICS_AUTO_COLLECTION_ENABLED =
|
|
24
|
-
"crashlytics_auto_collection_enabled";
|
|
25
|
-
static final String KEY_CRASHLYTICS_IS_ERROR_GENERATION_ON_JS_CRASH_ENABLED =
|
|
26
|
-
"crashlytics_is_error_generation_on_js_crash_enabled";
|
|
27
|
-
static final String KEY_CRASHLYTICS_JAVASCRIPT_EXCEPTION_HANDLER_CHAINING_ENABLED =
|
|
28
|
-
"crashlytics_javascript_exception_handler_chaining_enabled";
|
|
29
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
package io.invertase.firebase.crashlytics;
|
|
2
|
-
|
|
3
|
-
import com.google.firebase.crashlytics.FirebaseCrashlytics;
|
|
4
|
-
|
|
5
|
-
public class ReactNativeFirebaseCrashlyticsNativeHelper {
|
|
6
|
-
|
|
7
|
-
public static void recordNativeException(Throwable throwable) {
|
|
8
|
-
FirebaseCrashlytics.getInstance().recordException(throwable);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
public static void log(String message) {
|
|
12
|
-
FirebaseCrashlytics.getInstance().log(message);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
public static void setCustomKey(String key, String value) {
|
|
16
|
-
FirebaseCrashlytics.getInstance().setCustomKey(key, value);
|
|
17
|
-
}
|
|
18
|
-
}
|