iOS SDK接入(手动集成)

本文介绍如何使用手动集成方式接入崩溃分析服务的iOS SDK。

前提条件

使用限制

仅支持iOS 8.0及以上的App。

接入概述

通过iOS SDK接入崩溃分析服务的操作步骤如下:

  1. 准备:下载开源库文件。

  2. 添加依赖:采用手动方式集成SDK。

  3. 接入服务:接入服务。

准备

下载崩溃分析服务相关开源库文件,包括:

  • FBAllocationTracker:下载

  • FBMemoryProfiler:下载

  • FBRetainCycleDetector:下载

添加依赖

1:在Xcode中,将SDK目录中的framework文件拖入Target目录,在弹出框勾选Copy items if needed选项。

2:相同方式引入开源库文件:

  • FBAllocationTracker

  • FBMemoryProfiler

  • FBRetainCycleDetector

  • rcd_fishhook

说明

rcd_fishhookFBRetainCycleDetector工程目录下。

3:打开Build Phases > Link Binary With Libraries,添加Xcode自带的公共包文件:

  • libc++.tbd

  • SystemConfiguration.framework

4:打开Build Phases > Compile Sources,为下列文件添加Compiler Flags:-fno-objc-arc

  • FBAssociationManager.mm

  • FBBlockStrongRelationDetector.m

  • FBBlockStrongLayout.m

  • FBClassStrongLayoutHelpers.m

  • NSObject+FBAllocationTracker.mm

  • FBAllocationTrackerNSZombieSupport.mm

接入服务

  1. 将iOS配置文件AliyunEmasServices-Info.plist拷贝至项目根目录。

  2. AppDelegate.m文件的application:didFinishLaunchingWithOptions方法中初始化SDK。

    引入头文件:

    #import <AlicloudCrash/AlicloudCrashProvider.h>
    #import <AlicloudHAUtil/AlicloudHAProvider.h>

    添加代码段:

    NSString *appVersion = @"x.x"; //app版本,会上报
    NSString *channel = @"xx";     //渠道标记,自定义,会上报
    NSString *nick = @"xx";        //nick 昵称,自定义,会上报
    [[AlicloudCrashProvider alloc] autoInitWithAppVersion:appVersion channel:channel nick:nick];
    [AlicloudHAProvider start];

    参数说明:

    参数

    说明

    appVersion

    用于指定App的版本,上报至服务端,进行版本区分。

    【数据类型】字符串

    【格式要求】自定义

    【取值范围】任意长度。

    说明

    该参数值将在控制台显示为下拉列表选项,建议短小凝练。

    【是否必选】是

    【是否可为空】否

    【默认值】无

    【大小写敏感】是。例如,vx.x和Vx.x不是一个版本。

    【字符类型】英文大小写、数字。

    说明

    不支持中文字符、特殊字符。

    channel

    用于指定渠道标识,上报至服务端,进行渠道区分。

    【数据类型】字符串

    【取值范围】任意长度

    【是否必选】是

    【是否可为空】否

    【默认值】无

    【字符类型】英文大小写、数字。

    说明

    不支持中文字符、特殊字符。

    nick

    用于指定用户昵称,上报至服务端,进行用户区分。后续可能依据该参数,进行数据检索。

    【数据类型】字符串

    【取值范围】任意长度

    【是否必选】是

    【是否可为空】否

    【默认值】无

    【字符类型】英文大小写、数字。

    说明

    不支持中文字符、特殊字符。

    【命名规范】自定义

  3. 添加高级设置

    iOS SDK提供接口,用于上报自定义信息/错误。

    //上报自定义信息
    [AlicloudCrashProvider configCustomInfoWithKey:@"key" value:@"value"];//配置项:自定义环境信息(configCustomInfoWithKey/value)
    
    //按异常类型上报自定义信息
    [AlicloudCrashProvider setCrashCallBack:^NSDictionary * _Nonnull(NSString * _Nonnull type) {
        return @{@"key":@"value"};//配置项:异常信息(key/value)
    }];
    
    //上报自定义错误
    NSError *error = [NSError errorWithDomain:@"customError" code:10001 userInfo:@{@"errorInfoKey":@"errorInfoValue"}];
    [AlicloudCrashProvider reportCustomError:error];//配置项:自定义错误信息(errorWithDomain/code/userInfo)

    具体说明请参见iOS SDK接口说明

  4. 编译

    1. 在项目的Build Setting中,将Allow Non-modular Includes In Framework Modules设置为YES

    2. 执行编译。

      说明

      • 编译过程中如出现duplicate symbol类型错误,确认本地依赖与CocoaPods管理的依赖是否重复;如是,则删除本地依赖。

      • 如同时使用其他阿里云产品,可能会因为依赖中存在UTDID冲突,造成编译失败。解决办法参见:SDK UTDID冲突解决方案

  5. 功能验证

    iOS SDK接入操作完成后,需进行功能验证。

    1. 编写测试代码,模拟/触发移动端崩溃。例如:

      NSMutableArray *array = @[];
      [array addObject:nil];
      说明

      更多内容参考样例代码。

    2. 重启移动端大概2分钟后在控制台查看是否显示崩溃信息。

      说明

      崩溃数据从采集到上传到控制台显示,存在大约2~3分钟延迟。

      • 显示崩溃数据:SDK接入成功

      • 数据未显示:按照c步骤进行排查

    3. 在模拟/触发崩溃及重启移动设备期间,使用Charles抓包,查看能否捕获包含https://adash-emas.cn-hangzhou.aliyuncs.com/upload的HTTP请求:

      • 捕获:崩溃信息已上报。可能原因:后端未接入;Appkey/Secret信息有误。

      • 未捕获:崩溃信息未上报。可能原因:SDK接入失败;SDK未捕获崩溃;数据发送失败。请联系技术支持解决。

样例代码

崩溃分析服务iOS SDK接入工程样例请参见Demo工程