iOS应用接入
简介
DataFlux 应用监测能够通过收集各个iOS应用的指标数据,以可视化的方式分析各个iOS应用端的性能。
前置条件
- 安装 DataKit(DataKit 安装文档)
- 配置 RUM 数据采集
iOS应用接入
登录 DataFlux 控制台,进入「应用监测」页面,点击右上角「新建应用」,在新窗口输入「应用名称」,点击「创建」,即可开始配置。
安装
源码方式
- 从 GitHub 获取 SDK 的源代码。
- 将 SDK 源代码导入 App 项目,并选中
Copy items if needed
。
直接将 FTMobileSDK 整个文件夹导入项目。 - 添加依赖库:项目设置
Build Phase
->Link Binary With Libraries
添加:UIKit
、Foundation
、libz.tbd
,如果监控项开启且抓取网络数据,则需要添加libresolv.9.tbd
。
CocoaPods 方式
- 配置
Podfile
文件。
target 'yourProjectName' do
# Pods for your project
pod 'FTMobileSDK'
end
- 在
Podfile
目录下执行pod install
安装 SDK。
初始化 SDK
添加头文件
请将 #import <FTMobileAgent/FTMobileAgent.h>
添加到 AppDelegate.m
引用头文件的位置。
添加初始化代码
示例:
#import <FTMobileAgent/FTMobileAgent.h>
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
// SDK FTMobileConfig 设置
FTMobileConfig *config = [[FTMobileConfig alloc]initWithMetricsUrl:@"Your App metricsUrl"];
config.monitorInfoType = FTMonitorInfoTypeAll;
//启动 SDK
[FTMobileAgent startWithConfigOptions:config];
return YES;
}
FTMobileConfig 配置
FTMobileConfig 初始化方法
/**
* @method 指定初始化方法,设置 metricsUrl 配置 不需要进行请求签名
* @param metricsUrl FT-GateWay metrics 写入地址
* @return 配置对象
*/
- (instancetype)initWithMetricsUrl:(nonnull NSString *)metricsUrl;
配置 app_id 开启 RUM
- 设置 appid
- appid : dataflux rum 应用唯一 ID 标识。
- appid 获取:获取 appid 方法。
注意: 设置
appid
后,RUM 才能开启。
- RUM 设置采集率
/**
* 采样配置,属性值:0或者100,100则表示百分百采集,不做数据样本压缩。默认:100
*/
@property (nonatomic, assign) int samplerate;
注意: 开启
RUM
后,日志中将不采集 Crash 信息,Crash 信息会采集到RUM
中。
设置日志相关
- source 日志来源
/**
* 日志的来源 默认为:ft_mobile_sdk_ios
*/
@property (nonatomic, copy) NSString *source;
- serviceName 日志所属业务或服务的名称
/**
* 设置日志所属业务或服务的名称
*/
@property (nonatomic, copy) NSString *serviceName;
traceConsoleLog 采集控制台日志
一般情况下, 因为 NSLog 的输出会消耗系统资源,而且输出的数据也可能会暴露出App里的保密数据, 所以在发布正式版时会把这些输出全部屏蔽掉。此时开启采集控制台日志,也并不能抓取到工程里打印的日志。建议使用 日志写入接口 来上传想查看的日志。
/**
*设置是否需要采集控制台日志 默认为NO
*/
@property (nonatomic, assign) BOOL traceConsoleLog;
eventFlowLog 采集页面事件日志
设置后,可以在 web 版本日志中,查看到对应上报的日志,事件支持启动应用,进入页面,离开页面,事件点击等。
/**
* 默认为NO
* 需 AutoTrack 开启 ,设置对应采集类型时生效
*/
@property (nonatomic, assign) BOOL eventFlowLog;
设置网络链路追踪
- networkTrace 设置网络追踪,开启网络请求信息采集
/**
* 设置网络请求信息采集 默认为NO
*/
@property (nonatomic, assign) BOOL networkTrace;
- networkTraceType 设置网络请求信息采集时 使用链路追踪类型
/**
* 设置网络请求信息采集时 使用链路追踪类型 type 默认为 Zipkin
* FTNetworkTrackTypeZipkin 、FTNetworkTrackTypeJaeger
*/
@property (nonatomic, assign) FTNetworkTrackType networkTraceType;
/**
* 开启网络请求信息采集 并设置链路追踪类型 type 默认为 Zipkin
* @param type 链路追踪类型 默认为 Zipkin
*/
-(void)networkTraceWithTraceType:(FTNetworkTrackType)type;
开启崩溃 Crash 采集
enableTrackAppCrash 采集崩溃日志 (崩溃分析)
/**
*设置是否需要采集崩溃日志 默认为NO
*/
@property (nonatomic, assign) BOOL enableTrackAppCrash;
注意: 开启 RUM 后,日志中将不采集 Crash 信息,Crash 信息会采集到 RUM 中。
SDK 内部 DebugLog 打印
在 debug 环境下,设置 FTMobileConfig
的 enableSDKDebugLog
属性。
config.enableSDKDebugLog = YES; //打印日志
设置 X-Datakit-UUID
X-Datakit-UUID
是 SDK 初始化生成的 UUID, 应用清理缓存后(包括应用删除),会重新生成。
FTMobileConfig
配置中,开发者可以强制更改。更改方法:
[config setXDataKitUUID:@"YOUR UUID"];
设置 env 环境
typedef NS_ENUM(NSInteger, FTEnv) {
FTEnvProd = 0, //线上环境
FTEnvGray, //灰度环境
FTEnvPre, //预发布环境
FTEnvCommon, //日常环境
FTEnvLocal, //本地环境
};
@property (nonatomic, assign) FTEnv env;
采集数据配置
配置 FTMobileConfig
的 FTMonitorInfoType
属性。可采集的类型如下:
/**
*
* @constant
* FTMonitorInfoTypeBattery - 电池电量
* FTMonitorInfoTypeMemory - 内存总量、内存使用率
* FTMonitorInfoTypeCpu - CPU使用率
* FTMonitorInfoTypeBluetooth- 蓝牙是否开启
* FTMonitorInfoTypeFPS - 每秒传输帧数
*/
typedef NS_OPTIONS(NSUInteger, FTMonitorInfoType) {
FTMonitorInfoTypeAll = 0xFFFFFFFF,
FTMonitorInfoTypeBattery = 1 << 1,
FTMonitorInfoTypeMemory = 1 << 2,
FTMonitorInfoTypeCpu = 1 << 3,
FTMonitorInfoTypeBluetooth = 1 << 4,
FTMonitorInfoTypeFPS = 1 << 5,
};
设置 UI 卡顿、ANR 事件采集
- enableTrackAppUIBlock 采集UI卡顿事件
/**
* 默认为NO
* 设置是否需要采集UI卡顿
*/
@property (nonatomic, assign) BOOL enableTrackAppUIBlock;
- enableTrackAppANR 采集ANR卡顿无响应事件
/**
* 默认为NO
* 设置是否需要采集卡顿无响应事件
*/
@property (nonatomic, assign) BOOL enableTrackAppANR;
采集的数据会上传到 RUM 与日志中。
参数
FTMobileConfig 可配置参数
字段 | 类型 | 说明 | 是否必须 |
---|---|---|---|
metricsUrl | NSString | FT-GateWay metrics 写入地址 | 是 |
appid | NSString | dataflux rum应用唯一ID标识,在DataFlux控制台上面创建监控时自动生成。 | 否(开启RUM 必选) |
samplerate | int | RUM采样采集率 | 否(默认100) |
enableSDKDebugLog | BOOL | 设置是否允许打印日志 | 否(默认NO) |
monitorInfoType | NS_OPTIONS | 采集数据 | 否 |
env | NS_ENUM | 环境 | 否 (默认FTEnvProd) |
enableTrackAppCrash | BOOL | 设置是否需要采集崩溃日志 | 否(默认NO) |
enableTrackAppANR | BOOL | 采集ANR卡顿无响应事件 | 否(默认NO) |
enableTrackAppUIBlock | BOOL | 采集UI卡顿事件 | 否(默认NO) |
serviceName | NSString | 设置日志所属业务或服务的名称 | 否(默认dataflux sdk) |
traceConsoleLog | BOOL | 设置是否需要采集控制台日志 | 否(默认NO) |
eventFlowLog | BOOL | 设置是否采集页面事件日志 | 否(默认NO) |
networkTrace | BOOL | 设置网络请求信息采集 | 否(默认NO) |
networkTraceType | NS_ENUM | 设置网络请求信息采集时 使用链路追踪类型 | 否(默认Zipkin) |
主动上报日志方法
上传机制 : 将数据存储到数据库中,等待时机进行上传。数据库存储量限制在 5000 条,如果网络异常等原因导致数据堆积,存储 5000 条后,会丢弃新传入的数据。
- 上传日志方法
typedef NS_ENUM(NSInteger, FTStatus) {
FTStatusInfo = 0,
FTStatusWarning,
FTStatusError,
FTStatusCritical,
FTStatusOk,
};
/**
* 日志上报
* @param content 日志内容,可为json字符串
* @param status 事件等级和状态,info:提示,warning:警告,error:错误,critical:严重,ok:恢复,默认:info
*/
-(void)logging:(NSString *)content status:(FTStatus)status;
- 方法使用示例
[[FTMobileAgent sharedInstance] logging:@"TestLoggingBackground" status:FTStatusInfo];
用户的绑定与注销
用户绑定
/**
* 绑定用户信息
* @param Id 用户Id
*/
- (void)bindUserWithUserID:(NSString *)Id;
用户注销
/**
* 注销当前用户
*/
- (void)logout;
方法使用示例
//登录后 绑定用户信息
[[FTMobileAgent sharedInstance] bindUserWithUserID:userId];
//登出后 注销当前用户
[[FTMobileAgent sharedInstance] logout];
常见问题
关于崩溃日志分析
在开发时的 Debug 和 Release 模式下, Crash 时捕获的线程回溯是被符号化的。 而发布包没带符号表,异常线程的关键回溯,会显示镜像的名字,不会转化为有效的代码符号,获取到的 crash log 中的相关信息都是 16 进制的内存地址,并不能定位崩溃的代码,所以需要将 16 进制的内存地址解析为对应的类及方法。
利用命令行工具解析 Crash
需要的文件:
- 需要从 DataFlux 下载 SDK 采集上传的崩溃日志。下载后将后缀改为 .crash。
- 需要 App 打包时产生的 dSYM 文件,必须使用当前应用打包的电脑所生成的 dSYM 文件,其他电脑生成的文件可能会导致分析不准确的问题,因此每次发包后建议根据应用的 版本号 或 dSYM 文件的 UUID 来对应保存 dSYM 文件。以备解析时,根据后台日志 tag 中的
application_UUID
对应的 UUID 来找到对应 dSYM 文件。 - 需要使用 symbolicatecrash,Xcode 自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所在的位置,将0x开头的地址替换为响应的代码和具体行数。
查找 symbolicatecrash 方法
终端输入find /Applications/Xcode.app -name symbolicatecrash -type f
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
进行解析:
将 symbolicatecrash 与 .crash 和 .app.dSYM 放在同一文件夹中
开启命令行工具,进入文件夹
使用命令解析 Crash 文件,*号指的是具体的文件名
./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
解析完成后会生成一个新的 .Crash 文件,这个文件中就是崩溃详细信息。