
# 云日志服务iOS SDK
云日志服务iOS SDK提供了Objective-C \& Swift语言上报日志的一系列方法，如果您需要收集和分析用户在网站上的信息，例如用户的浏览器、浏览行为记录、终端设备记录，设备异常记录，网络使用记录等，可以直接使用iOS SDK上报日志到LTS。
![](https://support.huaweicloud.com/usermanual-lts/public_sys-resources/note_3.0-zh-cn.png)
当前仅支持华北-北京四、华东-上海一、华南-广州的白名单用户，如有需要请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)申请。
#### 传输协议
HTTPS
#### 使用前提
- 参考[注册华为账号并开通华为云](https://support.huaweicloud.com/usermanual-account/account_id_001.html)中操作，完成注册。

- 确认云日志服务的区域，请您根据所在区域，选择RegionName。
- 获取华为云账号的项目ID（project id），步骤请参见[API凭证](https://support.huaweicloud.com/usermanual-ca/ca_01_0002.html)。
- 获取需要上报到LTS的[日志组ID](https://support.huaweicloud.com/usermanual-lts/lts_07_0055.html#lts_07_0055__zh-cn_topic_0000001817927816_zh-cn_topic_0000001672281857_li16213910519)和[日志流ID](https://support.huaweicloud.com/usermanual-lts/lts_07_0055.html#lts_07_0055__zh-cn_topic_0000001817927816_zh-cn_topic_0000001672281857_li521209751)。
 
#### 版本更新说明
SDK如何处理个人信息请参考[华为云日志服务移动端日志采集SDK隐私声明](https://support.huaweicloud.com/productdesc-lts/lts-07152.html)。
您集成和使用的SDK时需要遵从个人信息保护基本要求，详情请参考[华为云日志服务移动端日志采集SDK开发者合规指南](https://support.huaweicloud.com/productdesc-lts/lts-07151.html)。
表1版本更新说明 
| 版本号           | 下载地址                                                                                    | 检验信息下载地址                                                                                       | 更新说明                                                                                                                                                                                                                                                                                                                                                                            | 系统                       |
|:---|:---|:---|:---|:---|
|  1.0.31 |  单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.31.zip) |  单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.31.zip.sha256) |  提高日志上报稳定性。                                                                                                                                                                                                                                                                                                                                                               |  iOS10、Xcode11及以上。 |
| 1.0.30        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.30.zip)        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.30.zip.sha256)        | 优化DB异常处理。                                                                                                                                                                                                                                                                                                                                                                       | iOS10、Xcode11及以上。        |
| 1.0.29        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.29.zip)        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.29.zip.sha256)        | 解决日志时间戳不准的问题。                                                                                                                                                                                                                                                                                                                                                                   | iOS10、Xcode11及以上。        |
| 1.0.28        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.28.zip)        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.28.zip.sha256)        | 删除区域限制。                                                                                                                                                                                                                                                                                                                                                                         | iOS10、Xcode11及以上。        |
| 1.0.27        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.27.zip)        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.27.zip.sha256)        | 优化性能。                                                                                                                                                                                                                                                                                                                                                                           | iOS10、Xcode11及以上。        |
| 1.0.26        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.26.zip)        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.26.zip.sha256)        | 优化性能。                                                                                                                                                                                                                                                                                                                                                                           | iOS10、Xcode11及以上。        |
| 1.0.24        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.24.zip)        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.24.zip.sha256)        | - 支持更多region：华东-上海一、华南-广州。  - 优化内存使用、日志发送等。                                                                                                                                                                                   | iOS10、Xcode11及以上。        |
| 1.0.21        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.21.zip)        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.21.zip.sha256)        | - 优化初始化函数initWithConfig。  - 为配置函数config添加废弃声明。                                                                                                                                                                          | iOS10、Xcode11及以上。        |
| 1.0.19        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.19.zip)        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.19.zip.sha256)        | - 调整配置项阈值。  - 修复兼容性问题。                                                                                                                                                                                                     | iOS10、Xcode11及以上。        |
| 1.0.18        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.18.zip)        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.18.zip.sha256)        | - 增加设置调试日志级别接口：setLogLevel。  - 在控制台输出配置项、上报接口参数、请求发送内容。  - 上报接口参数labels支持嵌套。  - 请求发送控制、数据库大小限制等优化。   | iOS10、Xcode11及以上。        |
| 1.0.15        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.15.zip)        | 单击[下载](https://js-agent.obs.cn-north-4.myhuaweicloud.com/lts-ios-sdk-1.0.15.zip.sha256)        | 首次发布，提供四个接口：初始化 initWithConfig、配置 config、上报日志 report、立即上报日志 reportImmediately。                                                                                                                                                                                                                                                                                                  | iOS10、Xcode11及以上。        |
   
#### 安装iOS SDK
1. **集成接入SDK。**
   
   方法1：通过CocoaPods集成。
   1. 在Podfile中添加CocoaPods官方仓库。
      ```
      source 'https://github.com/CocoaPods/Specs.git'
      ```
      
   
   2. 在Podfile中添加依赖。
      ```
      pod 'LTSSDK' , '1.0.31'
      ```
      
   
   3. 在终端执行。
      ```
      pod install --repo-update
      ```
      
   
   
   方法2：手动集成。
   - 下载SDK，解压到指定目录。注：直接解压即可，不需要额外操作。
   
   - 将解压后的xcframework静态库添加到您的项目工程中。 待导入的xcframework静态库必须和工作空间在相同的磁盘空间里，如果不在，您可以选择注意勾选"Copy items if needed"和"Create groups"，将待导入的xcframework库工程文件复制到工作空间。
     
    
   
   
2. **初始化，详细参数请参考[表4]。**
   
   - Objective-C：初始化代码示例。
     ```
     // LTS参数配置
      LTSConfigParams *params = [[LTSConfigParams alloc] init];
      // 必填参数
      params.region = @"云日志服务的区域";
      params.projectId = @"账号的项目ID";
      params.groupId = @"LTS的日志组ID";
      params.streamId = @"LTS的日志流ID";
      // 注意：认证用的账号AK、SK硬编码到代码中或者明文存储都有很大的安全风险，建议密文存放，使用时解密，确保安全。
      params.accessKey = @"访问密钥";
      params.secretKey = @"秘密访问密钥";
      // 选填参数
      // params.url = @"url"; 
      // params.cacheThreshold = 200; 
      // params.timeInterval = 3;
      // params.reportWhenEnterBackgroundEnabled = YES;
      // params.reportWhenAPPLaunchEnabled = NO;
      // LTS初始化方法
      LTSSDK *lts = [[LTSSDK alloc] initWithConfig:params];
     ```
     
   
   - Swift：初始化代码示例。 LTSSDK支持多实例日志上报机制，根据不同配置创建实例进行上报。
     ```
     // LTS参数配置
      let params = LTSConfigParams()
      // 必填参数
      params.region = "云日志服务的区域"
      params.projectId = "账号的项目ID"
      params.groupId = "LTS的日志组ID"
      params.streamId = "LTS的日志流ID"
      // 注意：认证用的账号AK、SK硬编码到代码中或者明文存储都有很大的安全风险，建议密文存放，使用时解密，确保安全。
      params.accessKey = "访问密钥"
      params.secretKey = "秘密访问密钥"
      // 选填参数
      // params.url = @"url";
      // params.cacheThreshold = 200
      // params.timeInterval = 3
      // params.reportWhenEnterBackgroundEnabled = true
      // params.reportWhenAPPLaunchEnabled = false
      // LTS初始化方法
      let lts = LTSSDK(config:params)
     ```
     
   
   
   
   
3. **上报日志。**
   
   LTS提供两种上报日志的方法。
   表2两种上报日志的方法 
   | Method                                                                                            | Description                   |
   |:---|:---|
   | - (BOOL)report:(id)content labels:(nullable NSDictionary\<NSString \*, id\> \*)labels;            | 上报日志：先存入本地数据库，根据配置中设定的策略实时上报。 |
   | - (BOOL)reportImmediately:(id)content labels:(nullable NSDictionary\<NSString \*, id\> \*)labels; | 立即上报日志。                       |
      
   表3Parameters参数 
   | Name    | Description                                                                                      |
   |:---|:---|
   | content | 日志内容。支持字典或字典数组；最外层键值对最多300个；字典转JSON字符串最大支持长度为30720，超出部分将被截断再上报。                                  |
   | labels  | 日志标签。支持字典或空值；最外层键值对最多50个；最外层key最大长度为64，支持字母、数字和下划线组合，首字符须是字母；字典转JSON字符串最大支持长度为30720，超出则该条日志无法上报。 |
      
   - Objective-C代码示例如下：
     ```
     //单个上报
     [lts report:@{@"content_key": @"content_value"} labels:@{@"label_key": @"label_value"}];
     [lts reportImmediately:@{@"content_key": @"content_value"} labels:@{@"label_key": @"label_value"}];
     //批量上报
     [lts report:@[@{@"content1_key": @"content1_value"}, @{@"content2_key": @"content2_value"}] labels:@{@"label_key": @"label_value"}];
     [lts reportImmediately:@[@{@"content1_key": @"content1_value"}, @{@"content2_key": @"content2_value"}] labels:@{@"label_key": @"label_value"}];
     ```
     
   
   - Swift代码示例如下：
     ```
     //单个上报
     lts.report(["content_key": "content_value"], labels: ["label_key": "label_value"])
     lts.reportImmediately(["content_key": "content_value"], labels: ["label_key": "label_value"])
     //批量上报
     lts.report([["content1_key": "content1_value"], ["content2_key": "content2_value"]], labels: ["label_key": "label_value"])
     lts.reportImmediately([["content1_key": "content1_value"], ["content2_key": "content2_value"]], labels: ["label_key": "label_value"])
     ```
     
   
   
   
   
 
#### 配置参数说明
 表4初始化参数说明 
| 参数名称                             | 类型         | 是否必填 | 默认值  | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|:---|:---|
| projectId                        | NSString   | 必填   | -    | 账号的项目ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| accessKey                        | NSString   | 必填   | -    | 账号的访问密钥，简称AK。注意：硬编码到代码中或者明文存储都有很大的安全风险，建议密文存放，使用时解密，确保安全。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| secretKey                        | NSString   | 必填   | -    | 账号的秘密访问密钥，简称SK。注意：硬编码到代码中或者明文存储都有很大的安全风险，建议密文存放，使用时解密，确保安全。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| region                           | NSString   | 必填   | -    | LTS的服务区域。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| groupId                          | NSString   | 必填   | -    | LTS的日志组ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| streamId                         | NSString   | 必填   | -    | LTS的日志流ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| url                              | NSString   | 选填   | nil  | 用于上报的公网地址域名，支持带端口号，比如：https://lts-access.cn-north-4.myhuaweicloud.com:443；如未设置url，将根据region自动生成链接，格式如下：https://lts-access.{region}.myhuaweicloud.com - 使用SDK在跨云或本地上报日志时，端口使用443。  - 使用华为云主机在华为云内网上报日志时，端口使用8102。   |
| cacheThreshold                   | NSUInteger | 选填   | 200条 | 当本地数据库日志存储条数达到该值会触发上报，取值范围为30-1000条。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| timeInterval                     | NSUInteger | 选填   | 3秒   | 定时器每隔该值会触发上报，取值范围为1-1800秒。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| reportWhenEnterBackgroundEnabled | BOOL       | 选填   | YES  | 是否开启APP切后台上报功能。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| reportWhenAPPLaunchEnabled       | BOOL       | 选填   | NO   | 是否开启APP启动时上报功能。如需开启，请在UIApplicationDidFinishLaunchingNotification通知发送前完成配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   
#### 上报日志策略说明
LTSSDK支持四种日志上报策略：阈值上报、定时上报、应用切后台和启动时上报，根据场景选择合适的值配置cacheThreshold、timeInterval、reportWhenEnterBackgroundEnabled、reportWhenAPPLaunchEnabled等参数。
#### 开启调试
在开发过程中可以启用调试模式，借助控制台日志实时查看上报日志的记录情况，观察具体结果并根据需要进行调整。在初始化LTSSDK之前，调用类方法+(void)setLogLevel:(LTSLoggerLevel)logLevel设置调试级别：Debug、Info、Warn、Error、Off。
Objective-C语言示例代码：
```
#ifdef DEBUG
[LTSSDK setLogLevel:LTSLoggerLevelDebug];
#endif
```
Swift语言示例代码：
```
#if DEBUG
LTSSDK.setLogLevel(.debug)
#endif
```
#### 参数获取方式
- 区域表
  表5区域表 
  | 区域名称   | 区域         |
  |:---|:---|
  | 华北-北京四 | cn-north-4 |
  | 华东-上海一 | cn-east-3  |
  | 华南-广州  | cn-south-1 |
     
  
- 日志组ID：登录云日志服务页面，选择"日志管理"，鼠标悬浮在日志组名称上，可查看日志组名称和日志组ID。
- 日志流ID：单击"日志组名称"可查看日志流列表，鼠标悬浮在日志流名称上，可查看日志流名称和日志流ID。
 
