ApplicationInsights 1.0-beta.8

ApplicationInsights 1.0-beta.8

许可证 MIT
发布最新发布2016年7月

Lukas SpießAndreas LindeMicrosoft维护。



  • Microsoft

适用于 iOS 的 Application Insights (1.0-beta.8)

这是 Application Insights iOS SDK 的仓库。 Application Insights 是一种监视已发布应用程序性能和使用情况的服务。SDK 允许您将各种类型的遥测数据发送到 Application Insights 服务(其中您的数据可以在 Azure Portal 中进行可视化)。

您可以使用 适用于 Mac 的 Application Insights 工具将 Application Insights iOS SDK 集成到现有应用程序中。SDK 在 iOS 6.0 或更高版本的手机上运行。您需要订阅 Microsoft Azure。 (直到您发送大量遥测数据之前是免费的。)

Application Insights 概述

重大变更!

Application Insights for iOS SDK 的 1.0-beta.8 版本包含两个主要变更

崩溃报告和用于发送已处理异常的 API 已从 SDK 中移除。此外,适用于 iOS 的 Application Insights SDK 现已弃用。

原因是 HockeyApp 现在我们主要的移动和跨平台崩溃报告、测试版分发和用户反馈产品。我们正在将所有精力集中在改进 HockeySDK 上,并添加遥测功能,以使其成为构建出色应用程序的最佳平台。我们已推出 HockeyApp Preseason,您可以在其中自行尝试所有新功能,包括用户指标。

我们对此表示歉意,并且您随时可以通过 联系我们

内容

  1. 发布说明
  2. 要求
  3. 设置
  4. 高级设置
  5. 开发者模式
  6. 基本使用
  7. 高级使用
  8. 自动收集生命周期事件
  9. 设置自定义服务器端点
  10. 文档
  11. 贡献
  12. 联系方式

1. 发布说明

  • 删除崩溃报告。要将此功能添加到您的应用程序中,我们建议使用 HockeyApp,它为您提供卓越的崩溃报告、反馈、测试版分发等更多功能。
  • 启用 Bitcode。这之前是不可能的,因为启用了 Bitcode 的应用程序可能在苹果服务器上不可知的任何时候重新编译,这使得获取完全符号化和有用的崩溃报告变得非常困难。
  • 修复了页面查看持续时间被错误地发送为天数而不是 'd:hh:mm:ss.fffffff' 格式的字符串的问题。相关方法现在接受一个 NSTimeInterval 参数,其中包含按秒计算的持续时间。

请参阅此处查看先前版本的发布说明。

2. 要求

该SDK在iOS 6.0或更高版本的设备上运行。

3. 设置

我们建议将我们的二进制文件集成到您的Xcode项目中以设置iOS应用程序的Application Insights。有关设置SDK的其他方法,请参阅高级设置

您可以使用Application Insights for Mac工具来集成SDK,该工具为此过程提供了分步向导。如果您想手动集成SDK,可以按照以下步骤进行:

3.1 获取一个仪器密钥

要查看您的遥测数据,您需要在Microsoft Azure门户中拥有一个Application Insights资源。您可以选择:

  • 创建一个新的资源;或
  • 如果您的应用程序使用Web服务,则使用用于监控该Web服务的同一资源。有关ASP.NET的设置,请参阅此处,有关J2EE的设置,请参阅此处

打开您的资源并打开“基本”下拉菜单。在短时间内,您需要复制仪器密钥。

3.2 下载SDK

  1. 下载最新的Application Insights for iOS框架,它作为zip文件提供。
  2. 解压缩文件,您将看到一个名为ApplicationInsights的文件夹。

3.3 在Finder中将SDK复制到您的项目目录中

根据我们的经验,第三方库通常位于一个子目录中(让我们称这个子目录为Vendor),所以如果您没有将项目组织成一个用于库的子目录,现在是个伟大的开始。为了继续我们的例子,在项目目录中创建一个名为“Vendor”的文件夹,并将解压缩的ApplicationInsights-文件夹移动到其中。

3.4 在Xcode中设置SDK

  1. 我们建议使用Xcode的组功能创建一个与其他磁盘文件结构相似的第三方库组。例如,类似于上面第4.3部分的文件结构,我们的项目有一个名为Vendor的组。
  2. 确保打开项目导航器(⌘+1)
  3. ApplicationInsights.framework从Finder窗口拖放到Xcode项目,并将其移动到项目导航器中期望的位置(例如,移动到名为Vendor的组中)
  4. 将出现一个弹出窗口。选择为任何添加的文件夹创建组并为您的目标设置复选标记。然后单击完成
  5. 打开您的应用程序目标的Info.plist,并添加一个类型为“String”的新字段。命名它MSAIInstrumentationKey,并将4.1中的Application Insights仪器密钥作为其值。

3.5 修改代码

Objective-C

  1. 打开您的AppDelegate.m文件。
  2. 在以下文件自己的 import 语句之后,将以下行添加到文件顶部

    @import ApplicationInsights;
  3. 搜索方法 application:didFinishLaunchingWithOptions:

  4. 添加以下行以设置和启动 Application Insights SDK

    [[MSAIApplicationInsights sharedInstance] setup];
    // Do some additional configuration if needed here
    //... more of your other setup code here ...
    [[MSAIApplicationInsights sharedInstance] start];

    您还可以使用以下快捷键

    [MSAIApplicationInsights setup];
    [MSAIApplicationInsights start];

Swift

  1. 打开您的 AppDelegate.swift 文件。
  2. 在文件顶部自己的 import 语句之后,添加以下行

    import ApplicationInsights
  3. 搜索以下方法

    application(application: UIApplication, didFinishLaunchingWithOptions launchOptions:[NSObject: AnyObject]?) -> Bool`
  4. 添加以下行以设置和启动 Application Insights SDK

    MSAIApplicationInsights.sharedInstance().setup();
    MSAIApplicationInsights.sharedInstance().start();

    您还可以使用以下快捷键

    MSAIApplicationInsights.setup()
    MSAIApplicationInsights.start()

恭喜,现在您已经准备好使用 Application Insights!有关如何使用 Application Insights 的说明,请参阅 基本用法.

4. 高级设置

4.1 在代码中设置仪表化密钥

您还可以通过代码设置应用程序的仪表化密钥。这将覆盖您可能在您的 Info.plist 中设置的密钥。要在代码中设置它,MSAIApplicationInsights 提供了一个重载构造函数

[MSAIApplicationInsights setupWithInstrumentationKey:@"{YOUR-INSTRUMENTATIONKEY}"];

//Do additional configuration

[MSAIApplicationInsights start];

4.2 手动链接系统框架

如果您正在使用一个尚不支持 clang 模块的老项目,或者您出于某种原因关闭了 Xcode 中的 Enable Modules (C and Objective-CLink Frameworks Automatically 选项,那么您需要手动链接一些系统框架

  1. Project Navigator(⌘+1)中选中您的项目。
  2. 选择您的应用程序目标。
  3. 选择 Build Phases 标签页。
  4. 展开 Link Binary With Libraries
  5. 如有必要,添加以下系统框架
    • CoreTelephony
    • Foundation
    • Security
    • SystemConfiguration
    • UIKit
    • libz

请注意,这也意味着您不能使用在 修改代码 部分中提到的 @import 语法,而必须坚持使用旧的 #import <ApplicationInsights/ApplicationInsights.h>

4.4 iOS 8 扩展

以下是需要考虑的使用 Application Insights SDK 与 iOS 8 扩展的点

  1. 每个扩展都需要使用与主应用程序相同的版本(CFBundleShortVersionString)和构建号(CFBundleVersion)。(此要求仅在有使用相同的 MSAIInstrumentationKey 为您的应用程序和扩展的情况下使用)。
  2. 您需要确保 SDK 设置代码只调用一次。由于没有 applicationDidFinishLaunching: 等同物,且 viewDidLoad 可能会运行多次,因此您需要使用类似于以下示例的设置
@interface TodayViewController () <NCWidgetProviding>
@property (nonatomic, assign) BOOL didSetupApplicationInsightsSDK;
@end

@implementation TodayViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    if (!self.didSetupApplicationInsightsSDK) {
        [MSAIApplicationInsights setup];
        [MSAIApplicationInsights start];
        self.didSetupApplicationInsightsSDK = YES;
    }
}

4.5 WatchKit 扩展

WatchKit 扩展不使用常规的 UIViewControllers,而是使用 WKInterfaceController 子类。它们的生命周期与您可能习惯的不同。为了确保 Application Insights SDK 在 WatchKit 扩展的生命周期中仅实例化一次,我们建议使用类似于以下的帮助类

@import Foundation;

@interface MSAIWatchSDKSetup : NSObject

+ (void)setupApplicationInsightsIfNeeded;

@end
#import "MSAIWatchSDKSetup.h"
#import "ApplicationInsights.h"

static BOOL applicationInsightsIsSetup = NO;

@implementation MSAIWatchSDKSetup

+ (void)setupApplicationInsightsIfNeeded {
  if (!applicationInsightsIsSetup) {
    [MSAIApplicationInsights setup];
    [MSAIApplicationInsights start];
    applicationInsightsIsSetup = YES;
  }
}

@end

然后,在每个您想使用 Application Insights SDK 的 WKInterfaceControllers 中,您应该这样做

#import "InterfaceController.h"
#import "ApplicationInsights.h"
#import "MSAIWatchSDKSetup.h"

@implementation InterfaceController

- (void)awakeWithContext:(id)context {
  [super awakeWithContext:context];
  [MSAIWatchSDKSetup setupApplicationInsightsIfNeeded];
}

- (void)willActivate {
  [super willActivate];
}

- (void)didDeactivate {
  [super didDeactivate];
}

@end

5. 开发者模式

5.1 数据批处理

如果在调试器附加或应用程序在仿真器中运行的情况下启用开发模式,则自动启用 开发模式。这将减少每批中发送的遥测项目数(5 项)以及遥测项目发送的间隔(3 秒)。

5.2 记录

我们都喜欢清清爽爽的调试输出,不希望第三方SDK消息在调试视图中堆积,对吧?!这就是为什么Application Insights只保留最小日志消息(如关键错误),除非开发者在启动SDK之前具体开启了调试日志。

[MSAIApplicationInsights setup]; //setup the SDK

[[MSAIApplicationInsights sharedInstance] setDebugLogEnabled:YES]; //enable debug logging 

[MSAIApplicationInsights start]; //start using the SDK

如果应用在应用商店环境中运行,此设置将被忽略,因此用户的控制台不会充斥着我们的日志消息。

6. 基本用法

[注意] SDK被优化,将尽可能多的操作延迟到以后的某个时间点执行,同时确保每个模块在延迟几秒钟后执行其他代码。这确保了applicationDidFinishLaunching:尽可能地快速处理,并且SDK不会阻塞启动序列,从而可能导致看门狗进程将其杀死。

按照上面所述的方式设置SDK后,MSAITelemetryManager-实例是跟踪事件、跟踪、指标、页面视图或处理异常的中心接口。

有关如何使用API和查看Application Insights资源中结果的信息,请参阅API概述。示例中使用Java,但原理是相同的。

6.1 Objective-C

// Send an event with custom properties and measurements data
[MSAITelemetryManager trackEventWithName:@"Hello World event!"
                              properties:@{@"Test property 1":@"Some value",
                                           @"Test property 2":@"Some other value"}
                            measurements:@{@"Test measurement 1":@(4.8),
                                           @"Test measurement 2":@(15.16),
                                           @"Test measurement 3":@(23.42)}];

// Send a message
[MSAITelemetryManager trackTraceWithMessage:@"Test message"];

// Manually send pageviews with a duration of 200 ms (note: this will also be done automatically)
[MSAITelemetryManager trackPageView:@"MyViewController"
                           duration:200
                         properties:@{@"Test measurement 1":@(4.8)}];

// Send custom metrics
[MSAITelemetryManager trackMetricWithName:@"Test metric" value:42.2];

6.2 Swift

// Send an event with custom properties and measuremnts data
MSAITelemetryManager.trackEventWithName("Hello World event!", 
                                  properties:["Test property 1":"Some value",
                                              "Test property 2":"Some other value"],
                                measurements:["Test measurement 1":4.8,
                                              "Test measurement 2":15.16,
                                              "Test measurement 3":23.42])

// Send a message
MSAITelemetryManager.trackTraceWithMessage("Test message")

// Manually send pageviews (duration 200 ms)
MSAITelemetryManager.trackPageView("MyViewController",
                                   duration:0.2,
                                 properties:["Test measurement 1":4.8])

// Send a message
MSAITelemetryManager.trackMetricWithName("Test metric", value:42.2)

在门户中查看您的数据

Azure门户中,打开您创建的应用程序资源以获取您的监视密钥。您将看到显示页面视图和会话数的图表。要查看更多

7. 高级用法

SDK还允许一些更高级的用法。

7.1 公共属性

您还可以设置所谓的“公共属性”,然后系统会自动将其附加到所有遥测数据项上。

Objective-C

[MSAITelemetryManager setCommonProperties:@{@"custom info":@"some value"}];

Swift

MSAITelemetryManager.setCommonProperties(["custom info":"some value"])

通过属性过滤视图

使用属性来细分和过滤度量图表以及过滤搜索

8. 自动收集生命周期事件

自动收集生命周期事件是默认启用的。这意味着Application Insights将自动跟踪视图控制器的出现并为您管理会话。

8.1. 页面视图

可以在设置SDK和启动之间禁用自动跟踪视图控制器出现。

[MSAIApplicationInsights setup]; //setup the SDK

[[MSAIApplicationInsights sharedInstance] setAutoPageViewTrackingDisabled:YES]; //disable the auto collection

[MSAIApplicationInsights start]; //start using the SDK

8.2. 会话

默认情况下,当包含的应用重新启动时,Application Insights for iOS SDK 会启动一个新的会话(这意味着“冷启动”,即应用程序在启动之前尚未驻留在内存中)或者当它处于后台超过20秒时。

您可以更改此时间段

[MSAIApplicationInsights setAppBackgroundTimeBeforeSessionExpires:60];

完全关闭自动会话管理

[MSAIApplicationInsights setAutoSessionManagementDisabled:YES];

这需要您手动管理会话

[MSAIApplicationInsights renewSessionWithId:@"4815162342"];

8.3. 用户

通常,SDK会自动为您的应用程序的每个用户生成一个随机匿名ID。或者,您可以设置自己的用户ID或其他用户属性,这些属性将被附加到所有遥测事件中

  [[MSAIApplicationInsights sharedInstance] setUserWithConfigurationBlock:^(MSAIUser *user) {
    user.userId = @"your_user_id";
    user.accountId = @"[email protected]";
  }];

9. 设置自定义服务器端点

如果需要,您可以使用完整URL配置SDK的不同的服务器端点

[MSAIApplicationInsights setup]; //setup the SDK

[[MSAIApplicationInsights sharedInstance] setServerURL:@"https://YOURDOMAIN/path/subpath"];

[MSAIApplicationInsights start]; //start using the SDK

10. 文档

我们的文档可在CocoaDocs上找到。

11. 贡献

我们期待通过拉取请求收到您的贡献。

开发环境

  • 运行最新版本OS X的Mac
  • 从Mac App Store获取最新版本的Xcode
  • AppleDoc
  • Cocoapods

11.1 行为准则

本项目采用了Microsoft Open Source Code of Conduct。更多信息见行为准则常见问题,或若有任何额外问题或评论,请联系[email protected]

11.2 贡献者许可协议

在提交拉取请求之前,您必须签署贡献者许可协议。要完成贡献者许可协议(CL A),您需要通过表格提交请求,并在收到包含文档链接的电子邮件后,电子签署CL A。您只需要签署一次CL A,即可覆盖向任何Microsoft OSS项目的提交。

12. 联系

如果您有任何更多问题或遇到无法通过这里步骤解决的问题,请在这里打开GitHub问题,或通过以下[email protected]联系我们。