这是 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 for iOS SDK 的 1.0-beta.8 版本包含两个主要变更
崩溃报告和用于发送已处理异常的 API 已从 SDK 中移除。此外,适用于 iOS 的 Application Insights SDK 现已弃用。
原因是 HockeyApp 现在我们主要的移动和跨平台崩溃报告、测试版分发和用户反馈产品。我们正在将所有精力集中在改进 HockeySDK 上,并添加遥测功能,以使其成为构建出色应用程序的最佳平台。我们已推出 HockeyApp Preseason,您可以在其中自行尝试所有新功能,包括用户指标。
我们对此表示歉意,并且您随时可以通过 联系我们。
NSTimeInterval
参数,其中包含按秒计算的持续时间。请参阅此处查看先前版本的发布说明。
该SDK在iOS 6.0或更高版本的设备上运行。
我们建议将我们的二进制文件集成到您的Xcode项目中以设置iOS应用程序的Application Insights。有关设置SDK的其他方法,请参阅高级设置。
您可以使用Application Insights for Mac工具来集成SDK,该工具为此过程提供了分步向导。如果您想手动集成SDK,可以按照以下步骤进行:
要查看您的遥测数据,您需要在Microsoft Azure门户中拥有一个Application Insights资源。您可以选择:
打开您的资源并打开“基本”下拉菜单。在短时间内,您需要复制仪器密钥。
ApplicationInsights
的文件夹。根据我们的经验,第三方库通常位于一个子目录中(让我们称这个子目录为Vendor
),所以如果您没有将项目组织成一个用于库的子目录,现在是个伟大的开始。为了继续我们的例子,在项目目录中创建一个名为“Vendor”的文件夹,并将解压缩的ApplicationInsights
-文件夹移动到其中。
Vendor
的组。项目导航器
(⌘+1)ApplicationInsights.framework
从Finder窗口拖放到Xcode项目,并将其移动到项目导航器
中期望的位置(例如,移动到名为Vendor
的组中)为任何添加的文件夹创建组
并为您的目标设置复选标记。然后单击完成
。Info.plist
,并添加一个类型为“String”的新字段。命名它MSAIInstrumentationKey
,并将4.1中的Application Insights仪器密钥作为其值。Objective-C
AppDelegate.m
文件。在以下文件自己的 import
语句之后,将以下行添加到文件顶部
@import ApplicationInsights;
搜索方法 application:didFinishLaunchingWithOptions:
添加以下行以设置和启动 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
AppDelegate.swift
文件。在文件顶部自己的 import 语句之后,添加以下行
import ApplicationInsights
搜索以下方法
application(application: UIApplication, didFinishLaunchingWithOptions launchOptions:[NSObject: AnyObject]?) -> Bool`
添加以下行以设置和启动 Application Insights SDK
MSAIApplicationInsights.sharedInstance().setup();
MSAIApplicationInsights.sharedInstance().start();
您还可以使用以下快捷键
MSAIApplicationInsights.setup()
MSAIApplicationInsights.start()
恭喜,现在您已经准备好使用 Application Insights!有关如何使用 Application Insights 的说明,请参阅 基本用法.
您还可以通过代码设置应用程序的仪表化密钥。这将覆盖您可能在您的 Info.plist
中设置的密钥。要在代码中设置它,MSAIApplicationInsights 提供了一个重载构造函数
[MSAIApplicationInsights setupWithInstrumentationKey:@"{YOUR-INSTRUMENTATIONKEY}"];
//Do additional configuration
[MSAIApplicationInsights start];
如果您正在使用一个尚不支持 clang 模块的老项目,或者您出于某种原因关闭了 Xcode 中的 Enable Modules (C and Objective-C
和 Link Frameworks Automatically
选项,那么您需要手动链接一些系统框架
Project Navigator
(⌘+1)中选中您的项目。Build Phases
标签页。Link Binary With Libraries
。CoreTelephony
Foundation
Security
SystemConfiguration
UIKit
libz
请注意,这也意味着您不能使用在 修改代码 部分中提到的 @import
语法,而必须坚持使用旧的 #import <ApplicationInsights/ApplicationInsights.h>
。
以下是需要考虑的使用 Application Insights SDK 与 iOS 8 扩展的点
CFBundleShortVersionString
)和构建号(CFBundleVersion
)。(此要求仅在有使用相同的 MSAIInstrumentationKey
为您的应用程序和扩展的情况下使用)。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;
}
}
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 项)以及遥测项目发送的间隔(3 秒)。
我们都喜欢清清爽爽的调试输出,不希望第三方SDK消息在调试视图中堆积,对吧?!这就是为什么Application Insights只保留最小日志消息(如关键错误),除非开发者在启动SDK之前具体开启了调试日志。
[MSAIApplicationInsights setup]; //setup the SDK
[[MSAIApplicationInsights sharedInstance] setDebugLogEnabled:YES]; //enable debug logging
[MSAIApplicationInsights start]; //start using the SDK
如果应用在应用商店环境中运行,此设置将被忽略,因此用户的控制台不会充斥着我们的日志消息。
[注意] SDK被优化,将尽可能多的操作延迟到以后的某个时间点执行,同时确保每个模块在延迟几秒钟后执行其他代码。这确保了applicationDidFinishLaunching:
尽可能地快速处理,并且SDK不会阻塞启动序列,从而可能导致看门狗进程将其杀死。
按照上面所述的方式设置SDK后,MSAITelemetryManager
-实例是跟踪事件、跟踪、指标、页面视图或处理异常的中心接口。
有关如何使用API和查看Application Insights资源中结果的信息,请参阅API概述。示例中使用Java,但原理是相同的。
// 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];
// 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门户中,打开您创建的应用程序资源以获取您的监视密钥。您将看到显示页面视图和会话数的图表。要查看更多
SDK还允许一些更高级的用法。
您还可以设置所谓的“公共属性”,然后系统会自动将其附加到所有遥测数据项上。
[MSAITelemetryManager setCommonProperties:@{@"custom info":@"some value"}];
MSAITelemetryManager.setCommonProperties(["custom info":"some value"])
自动收集生命周期事件是默认启用的。这意味着Application Insights将自动跟踪视图控制器的出现并为您管理会话。
可以在设置SDK和启动之间禁用自动跟踪视图控制器出现。
[MSAIApplicationInsights setup]; //setup the SDK
[[MSAIApplicationInsights sharedInstance] setAutoPageViewTrackingDisabled:YES]; //disable the auto collection
[MSAIApplicationInsights start]; //start using the SDK
默认情况下,当包含的应用重新启动时,Application Insights for iOS SDK 会启动一个新的会话(这意味着“冷启动”,即应用程序在启动之前尚未驻留在内存中)或者当它处于后台超过20秒时。
您可以更改此时间段
[MSAIApplicationInsights setAppBackgroundTimeBeforeSessionExpires:60];
完全关闭自动会话管理
[MSAIApplicationInsights setAutoSessionManagementDisabled:YES];
这需要您手动管理会话
[MSAIApplicationInsights renewSessionWithId:@"4815162342"];
通常,SDK会自动为您的应用程序的每个用户生成一个随机匿名ID。或者,您可以设置自己的用户ID或其他用户属性,这些属性将被附加到所有遥测事件中
[[MSAIApplicationInsights sharedInstance] setUserWithConfigurationBlock:^(MSAIUser *user) {
user.userId = @"your_user_id";
user.accountId = @"[email protected]";
}];
如果需要,您可以使用完整URL配置SDK的不同的服务器端点
[MSAIApplicationInsights setup]; //setup the SDK
[[MSAIApplicationInsights sharedInstance] setServerURL:@"https://YOURDOMAIN/path/subpath"];
[MSAIApplicationInsights start]; //start using the SDK
我们的文档可在CocoaDocs上找到。
我们期待通过拉取请求收到您的贡献。
开发环境
本项目采用了Microsoft Open Source Code of Conduct。更多信息见行为准则常见问题,或若有任何额外问题或评论,请联系[email protected]。
在提交拉取请求之前,您必须签署贡献者许可协议。要完成贡献者许可协议(CL A),您需要通过表格提交请求,并在收到包含文档链接的电子邮件后,电子签署CL A。您只需要签署一次CL A,即可覆盖向任何Microsoft OSS项目的提交。
如果您有任何更多问题或遇到无法通过这里步骤解决的问题,请在这里打开GitHub问题,或通过以下[email protected]联系我们。