帮助手册

iOS APM

Site24x7 iOS 移动端 APM 可让您在实际终端用户设备上追踪原生移动应用的性能。例如,一款新闻阅读应用可能在内部执行以下操作:

  • 跳转到表格视图以显示文章列表
  • 通过 REST API 调用加载文章列表
  • 将文章列表缓存到 SQLite 数据库
  • 为每篇文章下载缩略图
  • 将缩略图缓存到文件系统
  • 构建复杂 UI,例如自定义表格视图单元格样式

上述所有操作均可能耗时较长,并影响用户体验,因此对其在各种设备上进行基准测试和优化非常重要。Site24x7 移动端 APM 通过在应用中以库的形式嵌入 APM Agent,从全球所有用户处采集并汇总指标。

APM Agent 使用事务和组件来衡量代码的执行时间。以上述示例为例,从开始导航到渲染最终 UI 的完整操作序列可视为一个事务,其中各项操作可按类型分组为不同的组件,例如 HTTP、SQLite、文件系统、UI 等。简单操作可仅使用事务来衡量,而复杂操作则可使用包含组件的事务来衡量。

了解以下内容:

如何添加移动端 APM?

  1. 登录 Site24x7,进入 APM 标签下的 iOS 部分。
  2. 点击"添加应用"按钮。
  3. 输入应用名称和 Apdex 阈值,然后点击"保存"。
  4. 您可以在应用列表页面中,点击应用名称旁的汉堡菜单图标 (Hamburger icon) 复制应用密钥。

通过 CocoaPods 安装移动端 APM

步骤 1:

将移动端 APM iOS SDK 添加到您的 Podfile 中。

target 'Your_Project_Name' do
use_frameworks!
pod 'Site24x7APM'
end

步骤 2:

在终端中运行以下命令

pod install

步骤 3:

在 Build Settings 中将 Debug Information Format 设置为 DWARF with dSYM File。

步骤 4:

初始化 SDK 并构建项目。

import UIKit 
import APM
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
S24APM.start(withAppKey:"App_Key", interval: 15);
return true;
}
}

启动事务

通常,您应在耗时较长的操作开始之前启动事务,并在操作完成时停止事务。事务是线程安全的,可以从不同线程启动和停止。事务对象只能被启动和停止一次。具有相同名称的事务将在整个应用中取平均值。因此,当相同操作使用相同的事务名称多次执行时,将记录平均执行时间。

- (void)listArticles {
    S24Transaction *transaction = [S24APM startTransactionWithName:@"List Articles"];/
    // Perform long-running operation./
    [S24APM stopTransaction:transaction];
}

如何使用组件对事务中的操作进行分组?

您可以将事务中的操作分组为不同类型的组件。您可以使用预定义类型(如 S24HttpComponent.TYPE_HTTP、Component.TYPE_SQLITE、Component.TYPE_UI 等),也可以指定自定义类型。组件是线程安全的,可以从不同线程启动和停止。组件对象只能被启动和停止一次。组件对象在其父事务停止后不能再被停止。事务中的多个组件可以重叠并并行运行。事务中具有相同名称的组件将取平均值。

- (void)listArticles {
    S24Transaction *transaction = [S24APM startTransactionWithName:@"List Articles"];
    S24Component *httpComponent = [transaction startComponentWithType:S24HttpComponent];
    S24Component *articlesComponent = [transaction startComponentWithType:@"Download Articles"];
    // Download articles.
    [transaction stopComponent:articlesComponent];
    for (Article *article in articles) {
          S24Component *thumbnailComponent = [transaction startComponentWithType:@"Download Thumbnail"];
         // Download thumbnail.
         [transaction stopComponent:thumbnailComponent];
    }
       [transaction stopComponent:httpComponent];
       [S24APM stopTransaction:transaction];
}

在上述示例中,HTTP 操作(下载文章和缩略图)所花费的总时间由 S24HttpComponent 来衡量,仅下载文章所花费的时间由 "Download Articles" 来衡量。由于 "Download Thumbnail" 在循环中多次执行,每次下载缩略图所花费的时间将取平均值并记录。

如何刷新数据?

有时需要手动将最近记录的数据刷新到 Site24x7 的服务器。如果您在应用终止之前刚记录了事务,则可能需要执行此操作。如果您设置了较长的上传间隔(默认为 60 秒),则应在适当时机手动刷新数据,以防应用在下一个上传间隔之前终止。

[S24APM flush]

查看数据

要查看数据: 
  • 登录您的 Site24x7 帐户 > APM > iOS,然后点击您的应用。
  • 仪表板列出所有移动应用及其状态:正常、宕机、严重或故障。
  • 已暂停或存在配置错误的应用也会列在此处。
  • 对于运行中的应用,仪表板中列出以下指标:
    • 所选时间段与前一时间段相比的响应时间和吞吐量
    • 所选时间段内的崩溃次数
    • 所选时间段内的 Apdex 分数和用户数

 

 

指标与推断

在移动应用中接入 APM Insight API 后,您可以查看以下应用相关指标:
  1. 全球汇总
  2. 响应时间与吞吐量
  3. 按地区、运营商、设备和操作系统划分的响应时间
  4. 各事务的总响应时间、吞吐量及响应时间拆分
  5. 崩溃分析

1.全球汇总报表

全球汇总报表显示所选时间段内您的应用在所有地区的性能表现。颜色编码基于 Apdex 分数(范围为 0 到 1),0 表示用户体验极差,1 表示用户体验满意。您可以将鼠标悬停在地图上的某个区域,查看该位置的 Apdex 分数、平均响应时间、吞吐量和错误数。

 

 

2.应用的响应时间与吞吐量

所选时间段内应用的总响应时间和吞吐量可在管理标签中查看。

 

 

 3.按地区、运营商、设备和操作系统版本划分的响应时间

您的应用响应时间可能受应用代码之外的多种因素影响。

比较应用在不同地区、设备和操作系统版本之间的响应时间,有助于您缩小问题范围。

 

 

按地区和运营商划分的响应时间可在"地理位置"标签下查看。

 

 

不同设备和操作系统版本的响应时间可在"设备类型"标签下查看。

 

 

4.事务响应时间

各事务的响应时间、吞吐量和调用次数可在"事务"标签下查看。

 

 

5.崩溃分析

您可以通过点击"崩溃分析"标签查看所选时间段内的崩溃次数。将鼠标悬停在顶部的堆叠图表上,可查看各设备的崩溃次数、问题数量以及受此次崩溃影响的用户数。中间区域显示崩溃数量的百分比变化——总崩溃次数的增减情况,以及未崩溃用户的数量。

 

 

崩溃摘要列出了各异常信息。您可以点击异常查看具体的出错行。

 

 

配置告警

通过配置告警,当应用响应时间超过指定阈值时,您将收到通知。

您可以根据严重程度将告警设置为"故障"或"严重"。

请按以下步骤配置告警:

  1. 登录您的 Site24x7 帐户 > APM > iOS。
  2. 选择您的应用 > 将鼠标悬停在汉堡菜单图标上 > 编辑监视器详情。
  3. 在"配置文件"下,点击 (+) 添加新的阈值和可用性配置文件。
  4. 在"监视器类型"中选择您的移动应用,并为告警命名。
  5. 输入平均响应时间值——当应用响应时间超过此值时,您将收到告警。
  6. 点击"保存"

您可以在通知配置文件中调整设置,决定在应用宕机时何时接收告警。此外,您还可以配置用户告警组,以决定告警触发时通知哪些人员。

自定义 API

自定义 API 用于设置用户 ID 动态值、追踪自定义事件、捕获屏幕等。本文档将介绍 Site24x7 中可用的各类自定义 API 及其使用语法。

可用 API

  1. 初始化 SDK
  2. 自定义用户 ID
  3. 事务
  4. HTTP 调用
  5. 屏幕
  6. 环境
  7. 刷新
  8. 排除 HTTP 调用
  9. 排除屏幕

1. 初始化 SDK

您可以使用以下 API 以自定义上传间隔初始化 SDK。默认情况下,数据上传间隔设置为 60 秒。

Objective-C 语法

Objective-C
/**
* Initializes the APM agent.
* @param {NSString*} appKey
* The application key.
* @param {NSUInteger} intervel
* The interval in seconds at which to upload data to the server. The default is 60 seconds.
*/
[S24APM startWithAppKey:@"App_Key" interval:30]

Swift 语法

Swift
/**
* Initializes the APM agent.
* @param {String} appKey
* The application key.
* @param {int} intervel
* The interval in seconds at which to upload data to the server. The default is 60 seconds.
*/
S24APM.start(withAppKey:"App_Key", interval: 15);

2. 自定义用户 ID

默认情况下,SDK 会生成唯一的用户 ID。如果您想自定义用户 ID,可以通过实现以下语法来实现。当您需要追踪特定用户的指标或调试问题时,此功能非常有用。

Objective-C 语法

Objective-C/**
   *@param {NSString*} userId
   */
[S24APM setUserId:@"user@example.com" ]

Swift 语法

Swift
/**
   *@param {String} userId
   */
S24APM.setUserId("user@zylker.com")

3. 事务

您可以使用以下 API 追踪具有应用特定计时的自定义事件。

Objective-C 语法

Objective-C
/**
   *Transaction (can contain multiple components)
   *@param {NSString*} transactionName
   *Component
   *@param {NSString*} transactionName
   *@param {NSString*} componentName
   */
S24Transaction *transaction = [S24APM startTransactionWithName:@"List Articles"];
S24Component *httpComponent = [transaction startComponentWithType:S24HttpComponent];
S24Component *articlesComponent = [transaction startComponentWithType:@"Download Articles"];
        // Download articles
        [transaction stopComponent:articlesComponent];
        for (Article *article in articles) {
              S24Component *thumbnailComponent = [transaction startComponentWithType:@"Download Thumbnail"];
       // Download thumbnail
       [transaction stopComponent:thumbnailComponent];
   }
       [transaction stopComponent:httpComponent];
       [S24APM stopTransaction:transaction];

Swift 语法

Swift
/**
   *Transaction (can contain multiple components)
   *@param {String} transactionName
   *Component
   *@param {String} transactionName
   *@param {String} componentName
   */
S24Transaction *transaction = [S24APM startTransactionWithName:@"List Articles"];
S24Component *httpComponent = [transaction startComponentWithType:S24HttpComponent];
S24Component *articlesComponent = [transaction startComponentWithType:@"Download Articles"];
        // Download articles
        [transaction stopComponent:articlesComponent];
        for (Article *article in articles) {
               S24Component *thumbnailComponent = [transaction startComponentWithType:@"Download Thumbnail"];
        // Download thumbnail
        [transaction stopComponent:thumbnailComponent];
    }
        [transaction stopComponent:httpComponent];
        [S24APM stopTransaction:transaction];

4. HTTP 调用

默认情况下,使用以下网络库的网络请求将被自动捕获。

  • NSUrlSession
  • NSUrlConnection

如果您想添加更多 HTTP 调用,请使用以下 API。

Objective-C 语法

Objective-C

/**
   *@param {NSString*} name
   *@param {NSUInteger} duration measured in millis
   *@param {NSString*} startTime
   *@param {NSUInteger} respCode
   *@paramt {NSString*} httpMethod
   */
[S24APM addHttpCall:@"example.com" withTime:60 startTime:@"1642750130310" respCode:200 httpMethod:@"GET"]

Swift 语法

Swift
/**
   *@param {String} name
   *@param {int} duration measured in millis
   *@param {String} startTime
   *@param {int} respCode
   *@paramt {String} httpMethod
   */
S24APM.addHttpCall("example.com", withTime:60, startTime: "1642750130310", respCode: 200, httpMethod: "GET");

5. 屏幕

默认情况下,所有屏幕均会被捕获;但如果您想添加遗漏的屏幕,请使用以下 API。

Objective-C 语法

Objective-C
/**
   *@param {NSString*} screen
   *@param {NSUInteger} duration measured in millis
   *@param {NSString*} startTime
   */
[S24APM addScreen:@"DetailScreen" withTime:60 startTime:@"1642750130310"]

Swift 语法

Swift
/**
   *@param {String} screen
   *@param {int} duration measured in millis
   *@param {String} startTime
   */
S24APM.addScreen("DetailScreen", withTime: 60, startTime: "1642750130310");

6. 环境

您可以使用以下 API 设置自定义环境详情,以便在开发、调试、生产或发布等不同环境配置中筛选数据。

Objective-C 语法

Objective-C
/**
   *@param {NSString*} environment
   Custom environment types like debug, release, or beta release.
   */
[S24APM setEnvironment:@"release"]

Swift 语法

Swift 
/**
   *@param {String} environment
   Custom environment types like debug, release, beta-release, etc.
   */
S24APM.setEnvironment("release");

7. 刷新

您可以使用以下 API 立即将已记录的数据上传至服务器,而无需等待下一个上传间隔。默认情况下,刷新间隔设置为 60 秒。

Objective-C 语法

Objective-C
[S24APM flush]

Swift 语法

Swift
S24APM.flush()

注意


如果没有可用的网络,数据将在队列中保留,直到下一个上传间隔。如果您配置了较长的上传间隔,则可能需要在活动或服务销毁时手动刷新数据。

8. 排除 HTTP 调用

您可以通过将 URL 列表作为参数传递给以下 API,来排除对自定义 URL 的追踪。

Objective-C 语法

Objective-C
/**
   @param {NSArray<NSString *> *} listOfUrls
   */
[S24APM enableHttpTracking:@[@"example.com"]]

Swift 语法

Swift
/**
   @param {var} listOfUrls
   */
S24APM.enableHttpTracking(["example.com"]);

9. 排除屏幕

您可以通过将屏幕列表作为参数传递给以下 API,来排除对自定义屏幕的追踪。

Objective-C 语法

Objective-C
/**
   @param {NSArray<NSString *> *} listOfScreens
   */
[S24APM ignoreScreens:@["DetailScreen"]]

Swift 语法

Swift
/**
   @param {var} listOfScreens
   */
S24APM.ignoreScreens(["DetailScreen"]);

版本说明

Version 2.2.3

10 June 2024

问题修复:

  • 修复了 ignoreScreens 自定义 API 的问题。

Version 2.2.2

03 June 2024

增强:

  • 根据 Apple 安全规范要求,已加入隐私清单。

Version 2.2.1

05 February 2024

增强:


Version 2.2.0

21 December 2023

新功能:

以下为移动端 Vitals 功能:

  • 支持捕获应用启动时间(包括冷启动和热启动)。
  • 支持自动计算视图控制器的慢帧与冻结帧。

增强:

  • 会话时长已限制为 15 分钟。
  • 应用版本从 CFBundlShortVersionString 中获取。
  • 支持 CocoaPods 平台。

Version 2.1.2

05 June 2023

增强

  • 部分逻辑已通过桥接头文件迁移至 Swift
  • 在向服务器发送数据前执行空值安全检查。
  • 整个 SDK 采用 单例 模式共享对象。

问题修复

  • 已解决无法将错误数据写入文件的问题。

Version 2.1.1

17 May 2023

问题修复

  • 从 React Native 应用发送到 iOS 原生 Agent 的崩溃数据,现在会在应用崩溃前保存到文件。
  • 应用启动时,将启动一个任务,把之前存储的错误数据发送到服务器。
  • Agent 与服务器通信成功后,将清除应用存储中的错误文件。

Version 2.1.0

20 May 2022

新功能

增强

  • 增强了 Crashlytics 支持。

Version 2.0.4

04 March 2022

增强

  • 支持在基于 Swift 的 iOS 应用中使用 HTTP 调用

Version 2.0.3

19 January 2022

问题修复

  • 修复了若干小问题。

Version 2.0.2

12 January 2022

增强

  • 每个上传间隔内,最多捕获最新的 20 条屏幕记录和 HTTP 调用记录。
  • 引入了 XCFrameworks,同时支持模拟器和真实设备。
  • 提供用于配置自定义环境的 API。

Version 2.0.1

11 January 2022

问题修复

  • 已解决"在后台线程调用 UI API"的问题。

Version 2.0.0

04 June 2021

增强

  • 支持追踪 HTTP 调用,包括请求方法、响应时间、吞吐量、状态码、平台和屏幕。
  • 支持追踪屏幕,基于响应时间、吞吐量和调用次数进行统计。
  • 支持自动追踪视图和导航。
  • 支持手动追踪视图。
  • 已启用用户会话追踪,会话超时时间为 60 分钟。
  • 支持手动添加用户 ID。
  • 支持追踪以下软件包的所有 HTTP 调用:
    • NSURLSession 方法
      - dataTaskWithURL
      - dataTaskWithURL completionHandler
      - dataTaskWithRequest
      - dataTaskWithRequest completionHandler
      - downloadTaskWithURL
      - downloadTaskWithURL completionHandler
      - downloadTaskWithRequest
      - downloadTaskWithRequest completionHandler
      - uploadTaskWithRequest fromData
      - uploadTaskWithRequest fromData completionHandler
      - uploadTaskWithRequest fromFile
      - uploadTaskWithRequest fromFile completionHandler
    • NSURLConnection 方法
      - sendAsynchronousRequest queue completionHandler
      - dataTaskWithURL completionHandler
  • 支持手动添加其他 HTTP 调用

本文档对您有帮助吗?

您愿意帮助我们改进文档吗?请告诉我们哪些方面可以做得更好。


很抱歉本文档未能让您满意。我们希望了解可以从哪些方面改进您的体验。


感谢您抽出时间分享反馈。我们将利用您的反馈来改进在线帮助资源。

短链接已复制!