@arms/rum-reactnative 0.1.1 → 0.1.3-beta.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/README.md +399 -15
- package/RumSdkReactnative.podspec +28 -0
- package/android/build.gradle +83 -0
- package/android/gradle.properties +6 -0
- package/android/src/main/AndroidManifest.xml +13 -0
- package/android/src/main/java/com/rumsdkreactnative/RumSdkReactnativeModule.kt +512 -0
- package/android/src/main/java/com/rumsdkreactnative/RumSdkReactnativePackage.kt +33 -0
- package/android/src/main/java/com/rumsdkreactnative/crash/CrashContextManager.kt +157 -0
- package/android/src/main/java/com/rumsdkreactnative/crash/CrashHandler.kt +444 -0
- package/android/src/main/java/com/rumsdkreactnative/crash/CrashInitProvider.kt +50 -0
- package/android/src/main/java/com/rumsdkreactnative/crash/NdkCrashHandler.kt +66 -0
- package/android/src/main/jni/CMakeLists.txt +21 -0
- package/android/src/main/jni/rum_backtrace.c +144 -0
- package/android/src/main/jni/rum_crash_handler.c +200 -0
- package/android/src/main/jni/rum_crash_writer.c +442 -0
- package/android/src/main/jni/rum_module_info.c +316 -0
- package/android/src/main/jni/rum_module_info.h +54 -0
- package/android/src/main/jni/rum_test_crash.cpp +55 -0
- package/app.plugin.js +11 -0
- package/docs/ReactNative SDK/351/205/215/347/275/256/345/217/202/350/200/203.md" +671 -0
- package/docs/SDK /347/211/210/346/234/254/350/257/264/346/230/216.md" +12 -0
- package/docs//346/216/245/345/205/245ReactNative/345/272/224/347/224/250.md +238 -0
- package/ios/PrivacyInfo.xcprivacy +93 -0
- package/ios/RumCrashReporter.h +38 -0
- package/ios/RumCrashReporter.mm +861 -0
- package/ios/RumSdkReactnative.h +5 -0
- package/ios/RumSdkReactnative.mm +291 -0
- package/ios/fishhook/fishhook.c +264 -0
- package/ios/fishhook/fishhook.h +76 -0
- package/lib/commonjs/NativeRumSdkReactnative.js +50 -0
- package/lib/commonjs/collector/action/index.js +108 -0
- package/lib/commonjs/collector/exception/crash.js +148 -0
- package/lib/commonjs/collector/exception/index.js +238 -0
- package/lib/commonjs/collector/index.js +42 -0
- package/lib/commonjs/collector/resource/api.js +286 -0
- package/lib/commonjs/collector/view/perf.js +79 -0
- package/lib/commonjs/collector/view/pv.js +88 -0
- package/lib/commonjs/expoConfigPlugin.js +37 -0
- package/lib/commonjs/index.js +29 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/plugin.js +47 -0
- package/lib/commonjs/processor/default-processor.js +27 -0
- package/lib/commonjs/processor/session-processor.js +47 -0
- package/lib/commonjs/reporter/index.js +148 -0
- package/lib/commonjs/reporter/monitor-reporter.js +43 -0
- package/lib/commonjs/shell.js +91 -0
- package/lib/commonjs/types/client.js +6 -0
- package/lib/commonjs/types/crash.js +37 -0
- package/lib/commonjs/types/index.js +2 -0
- package/lib/commonjs/utils/action.js +305 -0
- package/lib/commonjs/utils/api.js +83 -0
- package/lib/commonjs/utils/base.js +95 -0
- package/lib/commonjs/utils/crash.js +146 -0
- package/lib/commonjs/utils/platform.js +162 -0
- package/lib/commonjs/utils/session.js +158 -0
- package/lib/commonjs/utils/url.js +59 -0
- package/lib/commonjs/utils/view.js +93 -0
- package/lib/module/NativeRumSdkReactnative.js +47 -0
- package/lib/module/collector/action/index.js +45 -10
- package/lib/module/collector/exception/crash.js +143 -0
- package/lib/module/collector/exception/index.js +144 -46
- package/lib/module/collector/index.js +8 -0
- package/lib/module/collector/resource/api.js +6 -6
- package/lib/module/collector/view/pv.js +13 -2
- package/lib/module/expoConfigPlugin.js +33 -0
- package/lib/module/index.js +1 -0
- package/lib/module/plugin.js +4 -1
- package/lib/module/processor/session-processor.js +22 -0
- package/lib/module/reporter/index.js +102 -16
- package/lib/module/reporter/monitor-reporter.js +38 -0
- package/lib/module/shell.js +32 -7
- package/lib/module/types/crash.js +33 -0
- package/lib/module/utils/action.js +299 -0
- package/lib/module/utils/api.js +10 -10
- package/lib/module/utils/base.js +9 -9
- package/lib/module/utils/crash.js +141 -0
- package/lib/module/utils/platform.js +127 -72
- package/lib/module/utils/session.js +23 -4
- package/lib/module/utils/view.js +2 -1
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/NativeRumSdkReactnative.d.ts +49 -0
- package/lib/typescript/{src → commonjs/src}/collector/action/index.d.ts +7 -1
- package/lib/typescript/commonjs/src/collector/exception/crash.d.ts +28 -0
- package/lib/typescript/{src → commonjs/src}/collector/exception/index.d.ts +7 -0
- package/lib/typescript/commonjs/src/collector/index.d.ts +6 -0
- package/lib/typescript/{src → commonjs/src}/collector/view/pv.d.ts +2 -2
- package/lib/typescript/commonjs/src/expoConfigPlugin.d.ts +28 -0
- package/lib/typescript/commonjs/src/index.d.ts +6 -0
- package/lib/typescript/{src → commonjs/src}/processor/session-processor.d.ts +2 -0
- package/lib/typescript/{src → commonjs/src}/reporter/index.d.ts +3 -1
- package/lib/typescript/commonjs/src/reporter/monitor-reporter.d.ts +8 -0
- package/lib/typescript/commonjs/src/shell.d.ts +57 -0
- package/lib/typescript/{src → commonjs/src}/types/client.d.ts +2 -2
- package/lib/typescript/commonjs/src/types/crash.d.ts +95 -0
- package/lib/typescript/commonjs/src/utils/action.d.ts +63 -0
- package/lib/typescript/{src → commonjs/src}/utils/api.d.ts +1 -1
- package/lib/typescript/commonjs/src/utils/crash.d.ts +12 -0
- package/lib/typescript/commonjs/src/utils/platform.d.ts +22 -0
- package/lib/typescript/{src → commonjs/src}/utils/session.d.ts +4 -0
- package/lib/typescript/module/src/NativeRumSdkReactnative.d.ts +49 -0
- package/lib/typescript/module/src/collector/action/index.d.ts +21 -0
- package/lib/typescript/module/src/collector/exception/crash.d.ts +28 -0
- package/lib/typescript/module/src/collector/exception/index.d.ts +32 -0
- package/lib/typescript/module/src/collector/index.d.ts +6 -0
- package/lib/typescript/module/src/collector/resource/api.d.ts +21 -0
- package/lib/typescript/module/src/collector/view/perf.d.ts +1 -0
- package/lib/typescript/module/src/collector/view/pv.d.ts +16 -0
- package/lib/typescript/module/src/expoConfigPlugin.d.ts +28 -0
- package/lib/typescript/module/src/index.d.ts +6 -0
- package/lib/typescript/module/src/plugin.d.ts +3 -0
- package/lib/typescript/module/src/processor/default-processor.d.ts +6 -0
- package/lib/typescript/module/src/processor/session-processor.d.ts +11 -0
- package/lib/typescript/module/src/reporter/index.d.ts +18 -0
- package/lib/typescript/module/src/reporter/monitor-reporter.d.ts +8 -0
- package/lib/typescript/module/src/shell.d.ts +57 -0
- package/lib/typescript/module/src/types/client.d.ts +27 -0
- package/lib/typescript/module/src/types/crash.d.ts +95 -0
- package/lib/typescript/module/src/types/index.d.ts +118 -0
- package/lib/typescript/module/src/utils/action.d.ts +63 -0
- package/lib/typescript/module/src/utils/api.d.ts +59 -0
- package/lib/typescript/module/src/utils/base.d.ts +8 -0
- package/lib/typescript/module/src/utils/crash.d.ts +12 -0
- package/lib/typescript/module/src/utils/platform.d.ts +22 -0
- package/lib/typescript/module/src/utils/session.d.ts +41 -0
- package/lib/typescript/module/src/utils/url.d.ts +17 -0
- package/lib/typescript/module/src/utils/view.d.ts +13 -0
- package/package.json +61 -26
- package/LICENSE +0 -20
- package/lib/module/collector/action/index.js.map +0 -1
- package/lib/module/collector/exception/index.js.map +0 -1
- package/lib/module/collector/resource/api.js.map +0 -1
- package/lib/module/collector/view/perf.js.map +0 -1
- package/lib/module/collector/view/pv.js.map +0 -1
- package/lib/module/index.js.map +0 -1
- package/lib/module/plugin.js.map +0 -1
- package/lib/module/processor/default-processor.js.map +0 -1
- package/lib/module/processor/session-processor.js.map +0 -1
- package/lib/module/reporter/index.js.map +0 -1
- package/lib/module/shell.js.map +0 -1
- package/lib/module/types/client.js.map +0 -1
- package/lib/module/types/index.js.map +0 -1
- package/lib/module/utils/api.js.map +0 -1
- package/lib/module/utils/base.js.map +0 -1
- package/lib/module/utils/platform.js.map +0 -1
- package/lib/module/utils/session.js.map +0 -1
- package/lib/module/utils/url.js.map +0 -1
- package/lib/module/utils/view.js.map +0 -1
- package/lib/typescript/src/collector/action/index.d.ts.map +0 -1
- package/lib/typescript/src/collector/exception/index.d.ts.map +0 -1
- package/lib/typescript/src/collector/resource/api.d.ts.map +0 -1
- package/lib/typescript/src/collector/view/perf.d.ts.map +0 -1
- package/lib/typescript/src/collector/view/pv.d.ts.map +0 -1
- package/lib/typescript/src/index.d.ts +0 -4
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/plugin.d.ts.map +0 -1
- package/lib/typescript/src/processor/default-processor.d.ts.map +0 -1
- package/lib/typescript/src/processor/session-processor.d.ts.map +0 -1
- package/lib/typescript/src/reporter/index.d.ts.map +0 -1
- package/lib/typescript/src/shell.d.ts +0 -26
- package/lib/typescript/src/shell.d.ts.map +0 -1
- package/lib/typescript/src/types/client.d.ts.map +0 -1
- package/lib/typescript/src/types/index.d.ts.map +0 -1
- package/lib/typescript/src/utils/api.d.ts.map +0 -1
- package/lib/typescript/src/utils/base.d.ts.map +0 -1
- package/lib/typescript/src/utils/platform.d.ts +0 -15
- package/lib/typescript/src/utils/platform.d.ts.map +0 -1
- package/lib/typescript/src/utils/session.d.ts.map +0 -1
- package/lib/typescript/src/utils/url.d.ts.map +0 -1
- package/lib/typescript/src/utils/view.d.ts.map +0 -1
- /package/lib/typescript/{src → commonjs/src}/collector/resource/api.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/collector/view/perf.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/plugin.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/processor/default-processor.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/types/index.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/utils/base.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/utils/url.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/utils/view.d.ts +0 -0
- /package/lib/typescript/{package.json → module/package.json} +0 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# 接入React Native应用
|
|
2
|
+
|
|
3
|
+
阿里云ARMS用户体验监控支持监控React Native应用(编译为Android和iOS等原生应用),通过集成npm包的方式,采集应用运行过程中的性能指标、异常问题和用户行为数据,并上报至ARMS控制台,帮助您提升应用的稳定性和用户体验。
|
|
4
|
+
|
|
5
|
+
## 创建应用
|
|
6
|
+
|
|
7
|
+
1. 登录[ARMS控制台](https://arms.console.aliyun.com/#/home)。
|
|
8
|
+
2. 在左侧导航栏选择**用户体验监控** > **应用列表**,并在顶部菜单栏选择目标地域。
|
|
9
|
+
3. 在**应用列表**页面单击**添加应用**。
|
|
10
|
+
4. 在**创建应用**面板单击**React Native**。
|
|
11
|
+
5. 在**React Native**面板上输入应用名称和描述,然后单击**创建**。
|
|
12
|
+
|
|
13
|
+
> **说明**:应用名称唯一,不能与已创建的应用名称重复。创建成功后,当前应用将会自动生成对应的`endpoint`地址。
|
|
14
|
+
|
|
15
|
+
6. 记录生成的`endpoint`地址,后续初始化SDK时需要使用。
|
|
16
|
+
|
|
17
|
+
## 安装SDK
|
|
18
|
+
|
|
19
|
+
### 前提条件
|
|
20
|
+
|
|
21
|
+
- React Native版本 >= 0.71(SDK 使用新架构 TurboModule,需 RN 0.71 及以上)
|
|
22
|
+
- Node.js >= 18
|
|
23
|
+
- npm或yarn包管理工具
|
|
24
|
+
- Android 构建:需安装 NDK 与 CMake(由宿主工程的 `ndkVersion` 决定,SDK 不强制特定版本)
|
|
25
|
+
- iOS 构建:需 CocoaPods(用于拉取 `KSCrash` 崩溃采集依赖)
|
|
26
|
+
|
|
27
|
+
### 安装步骤
|
|
28
|
+
|
|
29
|
+
**1. 安装 npm 包**
|
|
30
|
+
|
|
31
|
+
在您的React Native项目根目录下执行:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install @arms/rum-reactnative
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
或使用yarn:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
yarn add @arms/rum-reactnative
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
> **说明**:自 `0.1.3` 起,SDK 内置原生存储(iOS `NSUserDefaults` / Android `SharedPreferences`),不再依赖 `@react-native-async-storage/async-storage`,无需额外安装。
|
|
44
|
+
|
|
45
|
+
**2. 重新构建原生工程**
|
|
46
|
+
|
|
47
|
+
SDK 包含原生崩溃采集模块(iOS 为 ObjC++ + KSCrash,Android 为 C/C++ + CMake),安装后必须重新构建原生工程,否则会报 TurboModule 方法缺失:
|
|
48
|
+
|
|
49
|
+
- **iOS**(bare workflow):在 `ios` 目录执行 `pod install`,然后在 Xcode 重新 Build。
|
|
50
|
+
- **Android**(bare workflow):执行 Gradle Sync 后重新 Build。
|
|
51
|
+
- **Expo**:执行 `expo prebuild --clean` 后再 `expo run:ios` / `expo run:android`。
|
|
52
|
+
|
|
53
|
+
> **首次构建说明**:崩溃采集模块以源码方式编译(iOS 编译 `KSCrash`,Android 通过 CMake 编译 C/C++),首次构建耗时会略有增加,后续增量构建不受影响。
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
## 初始化SDK
|
|
57
|
+
|
|
58
|
+
推荐在应用入口处(如`App.tsx`或`index.js`)进行SDK初始化。
|
|
59
|
+
|
|
60
|
+
### 基础初始化
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
import armsRum from '@arms/rum-reactnative';
|
|
64
|
+
|
|
65
|
+
armsRum.init({
|
|
66
|
+
endpoint: '<your-endpoint>' // 替换为控制台获取的endpoint地址
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 完整初始化示例
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
import armsRum from '@arms/rum-reactnative';
|
|
74
|
+
|
|
75
|
+
armsRum.init({
|
|
76
|
+
// 基础配置
|
|
77
|
+
endpoint: '<your-endpoint>',
|
|
78
|
+
env: 'prod', // 环境:'prod' | 'gray' | 'pre' | 'daily' | 'local'
|
|
79
|
+
version: '1.0.0', // 应用版本号
|
|
80
|
+
|
|
81
|
+
// 用户配置
|
|
82
|
+
user: {
|
|
83
|
+
name: 'zhangsan', // 用户名称(建议关联业务账号)
|
|
84
|
+
tags: 'vip', // 用户标签
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
// 采集器配置
|
|
88
|
+
collectors: {
|
|
89
|
+
api: true, // API请求监控
|
|
90
|
+
jsError: true, // JavaScript错误捕获
|
|
91
|
+
consoleError: true, // console.error监听
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
// 链路追踪配置
|
|
95
|
+
tracing: {
|
|
96
|
+
enable: true,
|
|
97
|
+
sample: 0.1, // 10%采样
|
|
98
|
+
propagatorTypes: ['tracecontext'],
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
// Session配置
|
|
102
|
+
sessionConfig: {
|
|
103
|
+
sampleRate: 1, // 100%采样
|
|
104
|
+
maxDuration: 86400000, // Session最大持续时间(24小时)
|
|
105
|
+
overtime: 3600000, // Session超时时间(1小时)
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
// 上报配置
|
|
109
|
+
reportConfig: {
|
|
110
|
+
flushTime: 3000, // 上报时间间隔(ms)
|
|
111
|
+
maxEventCount: 20, // 单次上报最大事件数
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
> **重要**:请将`endpoint`替换为您在ARMS控制台创建应用后获取的实际地址。
|
|
117
|
+
|
|
118
|
+
## 集成React Navigation(可选)
|
|
119
|
+
|
|
120
|
+
如果您的应用使用了[@react-navigation/native](https://reactnavigation.org/)进行路由管理,可以集成页面自动追踪功能。
|
|
121
|
+
|
|
122
|
+
### 方式一:onReady回调模式
|
|
123
|
+
|
|
124
|
+
```tsx
|
|
125
|
+
import React, { useRef } from 'react';
|
|
126
|
+
import { NavigationContainer } from '@react-navigation/native';
|
|
127
|
+
import armsRum from '@arms/rum-reactnative';
|
|
128
|
+
|
|
129
|
+
export default function App() {
|
|
130
|
+
const navigationRef = useRef(null);
|
|
131
|
+
|
|
132
|
+
return (
|
|
133
|
+
<NavigationContainer
|
|
134
|
+
ref={navigationRef}
|
|
135
|
+
onReady={() => {
|
|
136
|
+
armsRum.startTrackingViews(navigationRef.current);
|
|
137
|
+
}}
|
|
138
|
+
>
|
|
139
|
+
{/* 路由配置 */}
|
|
140
|
+
</NavigationContainer>
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 方式二:Hook模式(推荐)
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
import React, { useEffect } from 'react';
|
|
149
|
+
import { useNavigationContainerRef } from '@react-navigation/native';
|
|
150
|
+
import armsRum from '@arms/rum-reactnative';
|
|
151
|
+
|
|
152
|
+
export default function App() {
|
|
153
|
+
const navigationContainerRef = useNavigationContainerRef();
|
|
154
|
+
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
armsRum.startTrackingViews(navigationContainerRef.current);
|
|
157
|
+
}, []);
|
|
158
|
+
|
|
159
|
+
return (
|
|
160
|
+
<NavigationContainer ref={navigationContainerRef}>
|
|
161
|
+
{/* 路由配置 */}
|
|
162
|
+
</NavigationContainer>
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
> **说明**:集成后,SDK会自动采集页面切换事件,包括页面名称、加载时间等信息。
|
|
168
|
+
|
|
169
|
+
## 验证接入
|
|
170
|
+
|
|
171
|
+
完成上述步骤后,启动您的React Native应用并进行一些操作(如点击按钮、发起网络请求等)。等待约1-2分钟后,在ARMS控制台的**用户体验监控** > **应用列表**中查看您的应用,确认有数据上报。
|
|
172
|
+
|
|
173
|
+
您可以在控制台中查看:
|
|
174
|
+
- **实时概览**:PV、UV、JS错误数、API请求数等核心指标
|
|
175
|
+
- **会话详情**:用户会话轨迹、页面浏览路径
|
|
176
|
+
- **异常分析**:JS错误堆栈、错误分布
|
|
177
|
+
- **性能分析**:API耗时分布、慢接口TOP榜
|
|
178
|
+
|
|
179
|
+
## 常见问题
|
|
180
|
+
|
|
181
|
+
### 1. 如何确认SDK是否正常工作?
|
|
182
|
+
|
|
183
|
+
可以在初始化后调用以下方法检查配置:
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
const config = armsRum.getConfig();
|
|
187
|
+
console.log('SDK Config:', config);
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 2. 为什么没有数据上报?
|
|
191
|
+
|
|
192
|
+
请检查以下几点:
|
|
193
|
+
- `endpoint`地址是否正确
|
|
194
|
+
- 应用是否有网络权限
|
|
195
|
+
- 是否已重新构建原生工程(`pod install` / Gradle Sync / `expo prebuild --clean`),否则原生模块不会生效
|
|
196
|
+
- 查看应用日志中是否有SDK相关的错误信息
|
|
197
|
+
|
|
198
|
+
### 3. 如何在调试阶段立即看到上报数据?
|
|
199
|
+
|
|
200
|
+
可以将`reportConfig.flushTime`设置为0,实现立即上报:
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
armsRum.init({
|
|
204
|
+
endpoint: '<your-endpoint>',
|
|
205
|
+
reportConfig: {
|
|
206
|
+
flushTime: 0, // 立即上报
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
> **注意**:生产环境不建议设置为0,会增加网络请求频率。
|
|
212
|
+
|
|
213
|
+
### 4. 如何过滤不需要监控的资源或异常?
|
|
214
|
+
|
|
215
|
+
使用`filters`配置进行过滤:
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
armsRum.init({
|
|
219
|
+
endpoint: '<your-endpoint>',
|
|
220
|
+
filters: {
|
|
221
|
+
resource: [
|
|
222
|
+
'https://cdn.example.com/', // 过滤特定域名的资源
|
|
223
|
+
/localhost/i, // 过滤本地资源
|
|
224
|
+
],
|
|
225
|
+
exception: [
|
|
226
|
+
/^Script error/, // 过滤Script error
|
|
227
|
+
],
|
|
228
|
+
},
|
|
229
|
+
});
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### 5. Android 构建报错找不到 NDK 或 CMake?
|
|
233
|
+
|
|
234
|
+
SDK 的 Android 崩溃采集模块通过 CMake 从源码编译,需要 NDK 与 CMake。若构建报错(如 `NDK not configured` / `CMake ... not found`),请通过 Android Studio 的 **SDK Manager** > **SDK Tools** 勾选安装 **NDK (Side by side)** 与 **CMake**;或在命令行使用 `sdkmanager` 安装。
|
|
235
|
+
|
|
236
|
+
### 6. iOS `pod install` 拉取 KSCrash 失败?
|
|
237
|
+
|
|
238
|
+
`KSCrash` 通过 CocoaPods 源码依赖引入。若拉取失败,先执行 `pod repo update` 更新本地 spec 仓库后重试;网络受限环境可配置 CocoaPods 镜像源。
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<!--
|
|
6
|
+
RUM React Native SDK Privacy Manifest
|
|
7
|
+
声明本 SDK 用于:CrashData / PerformanceData / OtherDiagnosticData
|
|
8
|
+
用途均为 35F9.1(应用功能 Diagnostics)。
|
|
9
|
+
-->
|
|
10
|
+
<key>NSPrivacyTracking</key>
|
|
11
|
+
<false/>
|
|
12
|
+
<key>NSPrivacyTrackingDomains</key>
|
|
13
|
+
<array/>
|
|
14
|
+
<key>NSPrivacyCollectedDataTypes</key>
|
|
15
|
+
<array>
|
|
16
|
+
<dict>
|
|
17
|
+
<key>NSPrivacyCollectedDataType</key>
|
|
18
|
+
<string>NSPrivacyCollectedDataTypeCrashData</string>
|
|
19
|
+
<key>NSPrivacyCollectedDataTypeLinked</key>
|
|
20
|
+
<false/>
|
|
21
|
+
<key>NSPrivacyCollectedDataTypeTracking</key>
|
|
22
|
+
<false/>
|
|
23
|
+
<key>NSPrivacyCollectedDataTypePurposes</key>
|
|
24
|
+
<array>
|
|
25
|
+
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
|
|
26
|
+
</array>
|
|
27
|
+
</dict>
|
|
28
|
+
<dict>
|
|
29
|
+
<key>NSPrivacyCollectedDataType</key>
|
|
30
|
+
<string>NSPrivacyCollectedDataTypePerformanceData</string>
|
|
31
|
+
<key>NSPrivacyCollectedDataTypeLinked</key>
|
|
32
|
+
<false/>
|
|
33
|
+
<key>NSPrivacyCollectedDataTypeTracking</key>
|
|
34
|
+
<false/>
|
|
35
|
+
<key>NSPrivacyCollectedDataTypePurposes</key>
|
|
36
|
+
<array>
|
|
37
|
+
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
|
|
38
|
+
</array>
|
|
39
|
+
</dict>
|
|
40
|
+
<dict>
|
|
41
|
+
<key>NSPrivacyCollectedDataType</key>
|
|
42
|
+
<string>NSPrivacyCollectedDataTypeOtherDiagnosticData</string>
|
|
43
|
+
<key>NSPrivacyCollectedDataTypeLinked</key>
|
|
44
|
+
<false/>
|
|
45
|
+
<key>NSPrivacyCollectedDataTypeTracking</key>
|
|
46
|
+
<false/>
|
|
47
|
+
<key>NSPrivacyCollectedDataTypePurposes</key>
|
|
48
|
+
<array>
|
|
49
|
+
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
|
|
50
|
+
</array>
|
|
51
|
+
</dict>
|
|
52
|
+
</array>
|
|
53
|
+
<key>NSPrivacyAccessedAPITypes</key>
|
|
54
|
+
<array>
|
|
55
|
+
<!-- 用户偏好读取(NSUserDefaults,CA92.1) -->
|
|
56
|
+
<dict>
|
|
57
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
58
|
+
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
|
59
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
60
|
+
<array>
|
|
61
|
+
<string>CA92.1</string>
|
|
62
|
+
</array>
|
|
63
|
+
</dict>
|
|
64
|
+
<!-- 文件时间戳(C617.1:本 SDK 访问) -->
|
|
65
|
+
<dict>
|
|
66
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
67
|
+
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
|
68
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
69
|
+
<array>
|
|
70
|
+
<string>C617.1</string>
|
|
71
|
+
</array>
|
|
72
|
+
</dict>
|
|
73
|
+
<!-- 系统启动时间(35F9.1:性能/崩溃诊断) -->
|
|
74
|
+
<dict>
|
|
75
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
76
|
+
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
|
77
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
78
|
+
<array>
|
|
79
|
+
<string>35F9.1</string>
|
|
80
|
+
</array>
|
|
81
|
+
</dict>
|
|
82
|
+
<!-- 磁盘空间(85F4.1:崩溃报告写入容量检查) -->
|
|
83
|
+
<dict>
|
|
84
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
85
|
+
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
|
|
86
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
87
|
+
<array>
|
|
88
|
+
<string>85F4.1</string>
|
|
89
|
+
</array>
|
|
90
|
+
</dict>
|
|
91
|
+
</array>
|
|
92
|
+
</dict>
|
|
93
|
+
</plist>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
|
|
3
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* RumCrashReporter
|
|
7
|
+
*
|
|
8
|
+
* 基于 KSCrash v2 的崩溃采集封装。负责:
|
|
9
|
+
* - 早期注册(__attribute__((constructor)))保证尽早接管 Mach/Signal/CPP/NSException
|
|
10
|
+
* - 持久化崩溃报告到 KSCrash 默认目录,标准化为 JSON 字典数组供 JS 上报
|
|
11
|
+
* - 维护 crash context(session/view)以便崩溃时落盘
|
|
12
|
+
*/
|
|
13
|
+
@interface RumCrashReporter : NSObject
|
|
14
|
+
|
|
15
|
+
/** 安装 KSCrash 监控(幂等,重复调用安全) */
|
|
16
|
+
+ (void)install;
|
|
17
|
+
|
|
18
|
+
/** 上次运行是否崩溃 */
|
|
19
|
+
+ (BOOL)crashedLastRun;
|
|
20
|
+
|
|
21
|
+
/** 获取待上报的崩溃报告(已序列化为 NSDictionary 数组) */
|
|
22
|
+
+ (NSArray<NSDictionary *> *)pendingCrashReports;
|
|
23
|
+
|
|
24
|
+
/** 按 crashId 删除已上报报告 */
|
|
25
|
+
+ (void)clearCrashReportsWithIds:(NSArray<NSString *> *)crashIds;
|
|
26
|
+
|
|
27
|
+
/** 清除所有崩溃报告文件(用于清理无 crash_id 的旧版文件) */
|
|
28
|
+
+ (void)clearAllCrashReports;
|
|
29
|
+
|
|
30
|
+
/** 清理过期和超限的崩溃文件(maxFiles 上限,maxAgeMs 过期时间) */
|
|
31
|
+
+ (void)cleanupOldCrashesWithMaxFiles:(NSInteger)maxFiles maxAgeMs:(double)maxAgeMs;
|
|
32
|
+
|
|
33
|
+
/** 更新 crash 上下文(JSON 字符串:session_id / view_id / view_name 等) */
|
|
34
|
+
+ (void)updateCrashContext:(NSString *)context;
|
|
35
|
+
|
|
36
|
+
@end
|
|
37
|
+
|
|
38
|
+
NS_ASSUME_NONNULL_END
|