更新时间:2024-07-01 GMT+08:00
分享

iOS SDK接入

APM iOS SDK具备采集上报App启动性能、崩溃、卡顿、错误、网络请求、终端设备、自定义上报等应用监控能力。

当前仅支持华北-北京四的白名单用户,如有需要请提工单申请。

使用前提

使用SDK前,您需要注册华为账号,并在App监控控制台创建移动端iOS App。

传输协议

HTTPS

版本更新说明

表1 版本更新说明

版本号

SDK下载地址

检验信息下载地址

更新说明

系统

2.0.7

单击下载

单击下载

支持远程配置功能。

iOS10、Xcode11及以上。

2.0.6

单击下载

单击下载

修复配置引起的SDK启动失败问题。

iOS10、Xcode11及以上。

2.0.5

单击下载

单击下载

解决网络请求、错误监控系统兼容性问题。

iOS10、Xcode11及以上。

2.0.1

单击下载

单击下载

解决系统兼容性问题。

iOS10、Xcode11及以上。

2.0.0

单击下载

单击下载

提供采集上报App启动性能、崩溃、卡顿、错误、网络请求、终端设备、自定义上报等应用监控能力。

iOS10、Xcode11及以上。

操作步骤

  1. 集成接入SDK。

    方法1:通过CocoaPods集成

    • 在Podfile中添加CocoaPods官方仓库
      source 'https://github.com/CocoaPods/Specs.git'
    • 在Podfile中添加依赖
      pod 'APMSDK', '2.0.7'
    • 在终端执行
      pod install --repo-update
    方法2:手动集成
    • 下载SDK,解压到指定目录。注:直接解压即可,不需要额外操作。
    • 将解压后的xcframework静态库添加到您的项目工程中。

      待导入的xcframework静态库必须和工作空间在相同的磁盘空间里,如果不在,您可以选择注意勾选“Copy items if needed”和“Create groups”,将待导入的xcframework库工程文件复制到工作空间。

  2. 添加配置文件。

    在创建移动端iOS App过程中,会生成名为apm-sdk-config.json的配置文件,下载并拖拽至Xcode工程根目录,如下图所示:

    配置参数说明:

    参数名称

    是否必填

    默认值

    描述

    appId

    -

    移动端AppID。

    authorization

    -

    用于App认证。

    region

    -

    上报APM所处的region,目前支持cn-north-4。

    uid

    -

    用户自定义ID。

    tag

    -

    用户自定义标签,多个时使用英文逗号隔开。

    url

    -

    要上报APM的公网地址域名。

    networkWhiteList

    -

    网络监控白名单,排除监控。

    cacheThreshold

    200条

    当本地数据库日志存储条数达到该值会触发上报,取值范围为30-1000条。

    timeInterval

    60秒

    定时器每隔该值会触发上报,取值范围为60-1800秒。

    reportBackground

    true

    是否开启APP切后台上报功能。

    reportLaunch

    false

    是否开启APP启动时上报功能。如需开启,请在UIApplicationDidFinishLaunchingNotification通知发送前启动SDK。

    enableNetwork

    false

    使能网络采集。

    enableCrash

    false

    使能崩溃采集。

    enableLaunch

    false

    使能启动采集。

    enableANR

    false

    使能卡顿采集。

    enableError

    false

    使能错误采集。

    enableDevice

    false

    使能终端设备采集。

    enableEvent

    false

    使能用户自定义上报。

    traceType

    apm

    链路追踪类型,开启:otel,关闭:apm。

    logLevel

    off

    调试日志等级:debug|info|warn|error|off。

  3. 启动SDK。

    • Objective-C代码示例。
      @import APMSDK;
       
      // 根据apm-sdk-config.json配置文件启动SDK
      [APMSDK start];
      
      // 设置自定义ID,也可以在配置文件中添加
      [APMSDK setUid:@"自定义ID"];
      
      // 设置自定义标签,也可以在配置文件中添加
      [APMSDK addTag:@"自定义标签1,自定义标签2,自定义标签3"];
    • Swift代码示例。
      import APMSDK
      
      // 根据apm-sdk-config.json配置文件启动SDK
      APMSDK.start()  
      
      // 设置自定义ID,也可以在配置文件中添加
      APMSDK.setUid("自定义ID")  
      
      // 设置自定义标签,也可以在配置文件中添加
      APMSDK.addTag("自定义标签1,自定义标签2,自定义标签3")

  4. 自定义上报统计。

    方法名称

    参数说明

    + (BOOL)event:(NSString *)key value:(id)value;

    key:事件名称,最大长度为2048个字符。value:事件内容,支持NSString,NSArray,NSDictionary,NSNumber等有效JSON对象,转JSON字符串最大长度为30720个字符。

    Objective-C代码示例:

    // 事件统计
    [APMSDK event:@"User Information" value:@{@"name":@"XXX"}];
    [APMSDK event:@"Error Description" value:@"The request timed out."];
    [APMSDK event:@"Call Stack" value:@[@"0x0000000101ee9c6c", @"0x0000600000e61d80"]];
    
    // 数值统计
    [APMSDK event:@"Custom Load Time" value:@(0.238)]; 
    [APMSDK event:@"Purchase Statistics" value:@(1)];
    Swift代码示例:
    // 事件统计
    APMSDK.event("User Information", value: ["name": "XXX"])
    APMSDK.event("Error Description", value: "The request timed out.")
    APMSDK.event("Call Stack", value: ["0x0000000101ee9c6c", "0x0000600000e61d80"])
    
    // 数值统计
    APMSDK.event("Custom Load Time", value: 0.238)
    APMSDK.event("Purchase Statistics", value: 1)

  5. 网络请求身份认证(仅适用开启网络请求监控):当请求访问服务器受保护的资源时,会触发身份认证质询流程,App需实现APMURLProtocolDelegate协议,完成身份认证质询。

    Objective-C代码示例:

    @interface AppDelegate : UIResponder <UIApplicationDelegate, APMURLProtocolDelegate>
    
    @end
    
    @implementation APMAppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // 先设置网络请求身份认证质询代理
        [APMURLProtocol setDelegate:self];
        // 再启动SDK
        [APMSDK start];
    }
    
    #pragma mark -- APMURLProtocolDelegate
    
    - (BOOL)APMURLProtocol:(APMURLProtocol *)protocol canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
        // 对服务端身份进行认证:本例子为简单示例,请根据App原认证方式处理
        return [[protectionSpace authenticationMethod] isEqual:NSURLAuthenticationMethodServerTrust];
    }
    
    - (void)APMURLProtocol:(APMURLProtocol *)protocol didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
        // 信任服务端身份:本例子为简单示例,请根据App原认证方式处理
        NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
        [protocol resolveAuthenticationChallenge:challenge withCredential:credential];
    }
    
    - (void)APMURLProtocol:(APMURLProtocol *)protocol didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
    }
    
    @end
    Swift代码示例:
    class APMAppDelegate: UIResponder, UIApplicationDelegate, APMURLProtocolDelegate {
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            // 先设置网络请求身份认证质询代理
            APMURLProtocol.setDelegate(self)
            // 再启动SDK
            APMSDK.start()
        }
    
        func apmurlProtocol(_ `protocol`: APMURLProtocol, canAuthenticateAgainstProtectionSpace protectionSpace: URLProtectionSpace) -> Bool {
    	// 对服务端身份进行认证:本例子为简单示例,请根据App原认证方式处理
            return protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust
        }
    
        func apmurlProtocol(_ `protocol`: APMURLProtocol, didReceive challenge: URLAuthenticationChallenge) {
            // 信任服务端身份:本例子为简单示例,请根据App原认证方式处理
            if let serverTrust = challenge.protectionSpace.serverTrust {
                let credential = URLCredential(trust: serverTrust)
                `protocol`.resolve(challenge, with: credential)
            }
            else {
                `protocol`.resolve(challenge, with: nil)
            }
        }
    
        func apmurlProtocol(_ `protocol`: APMURLProtocol, didCancel challenge: URLAuthenticationChallenge) {
    
        }
    }

数据上报策略

SDK支持四种日志上报策略:阈值上报、定时上报、应用切后台和启动时上报,根据场景选择合适的值配置cacheThreshold、timeInterval、reportBackground、reportLaunch等参数。

开启调试日志

在开发过程中可以开启调试日志,借助控制台日志实时查看SDK运行状况,观察日志并根据需要进行调整,日志级别有:debug、info、warn、error、off(关闭)。

示例: 在配置文件apm-sdk-config.json中设置日志级别。

{
     "logLevel": "debug"
}

请开发者在App上线前关闭调试日志功能,即设置为off。

相关文档