首页 帮助中心 听云App 简介

iOS SDK简介

iOS SDK通过在指定的方法中嵌码去采集方法中的数据。您可以通过报表服务器查询各种方法的数据和调用次数。

数据采集

iOS SDK支持如下数据采集:

  • HTTP/HTTPS协议数据收集
  • 崩溃/卡顿异常数据收集
  • 事件性能数据收集
  • 视图性能数据收集
  • 进程内存和CPU使用率
  • 用户体验分析数据收集

网络数据

iOS SDK可以采集应用的网络数据:

  • 应用响应时间
  • DNS解析时间
  • TCP建连时间
  • SSL握手时间
  • 首包时间
  • 访问量

iOS SDK也可以采集线程堆栈,数据库、自定义参数和HTTP请求参数。

用户体验分析-应用启动数据

  • 启动耗时
  • 启动次数
  • 启动期间的崩溃、事件性能数据

用户体验分析-用户操作数据

  • 操作耗时
  • 阻塞耗时
  • 操作次数
  • 操作期间的崩溃、事件性能数据

用户体验分析-页面加载数据

  • 页面交互耗时
  • 页面展现耗时
  • 页面加载期间的事件性能数据

协议类库

iOS SDK支持如下协议类库:

  • NSURLConnection / NSURLSession(仅支持iOS 8以上的系统)
  • ASI
  • AFN(基于NSURLConnection)
  • webView(UIWebView、WKWebview)

系统版本

iOS SDK支持以下系统版本:

  • iOS 7.0版本以上
  • iOS 10.2及其以上版本支持TCP数据采集且无法采集Server IP

iOS SDK目录结构

  • tingyunApp.framework

iOS SDK Theory

/*
 * swizzle过后,imageName指向的是nbs_imageName函数的实现,当在调用imageName这个函数时,会首先调用nbs_imageNamed的实现,
 * 而此时nbs_imageName指向的是原函数imageName的实现,所以在nbs_imageNamed的实现中通过[self nbs_imageNamed:name]回调回原函数
 */
+ (UIImage *)nbs_imageNamed:(NSString *)name
{
	nbs_embedIn_start(nil, category_image, classNameOf(self), NSStringFromSelector(_cmd), currentViewController, timeNow());//SDK开始数据采集
    id rtn= [self nbs_imageNamed:name];//调用原函数实现
    nbs_embedIn_finish(argsHelper);//SDK完成数据采集
    return rtn;
}

利用objective-c的runtime特性,通过Method swizzle技术,可以实现在运行时替换 selector 对应的方法实现,达到 给方法挂钩的目的。也就是说,嵌入基调的 SDK 后,在程序启动之初,基调的SDK会对相应的方法执行swizzle操作,从而在调用一个被swizzle过后的函数时,将会首先调用SDK相应的自定义函数,在SDK的函数中会执行一些数据采集的操作,然后SDK的函数会再调回原函数的实现,不会影响原程序逻辑.

iOS SDK体积增量

三种指令架构增加 2.71M

  • Armv7 增加 0.81M
  • Armv7s 增加0.81M
  • Arm64增加0.99M