This article describes how to integrate AppInsights into your iOS apps. The SDK allows to send application metrics (events, traces, metrics, and pageviews) to the server.
This document contains the following sections:
- Requirements
- Download & Extract
- Set up Xcode
- Modify Code
- Endpoints
- iOS 8 Extensions
- Additional Options
The SDK runs on devices with iOS 6.0 or higher.
-
Download the latest AppInsights SDK for iOS framework.
-
Unzip the file. A new folder
AppInsights
is created. -
Move the folder into your project directory. We usually put 3rd-party code into a subdirectory named
Vendor
, so we move the directory into it.
- Drag & drop
AppInsights.framework
from your project directory to your Xcode project. - Similar to above, our projects have a group
Vendor
, so we drop it there. - Select
Create groups for any added folders
and set the checkmark for your target. Then clickFinish
. - Select your project in the
Project Navigator
(⌘+1). - Select your app target.
- Select the tab
Build Phases
. - Expand
Link Binary With Libraries
. - Add the following system frameworks, if they are missing:
Foundation
SystemConfiguration
UIKit
CoreTelephony
(only required if iOS > 7.0)
- Open the info.plist of your app target and add a new field of type String. Name it
MSAIInstrumentationKey
and set your AppInsights instrumentation key as its value.
-
Open your
AppDelegate.m
file. -
Add the following line at the top of the file below your own #import statements:
#import <AppInsights/AppInsights.h>
-
Search for the method
application:didFinishLaunchingWithOptions:
-
Add the following lines to setup and start the AppInsights SDK:
[[MSAIAppInsights sharedInstance] setup]; // Do some additional configuration if needed here ... [[MSAIAppInsights sharedInstance] start];
You can also use the following shortcut:
[MSAIAppInsights setup]; [MSAIAppInsights start];
-
Send some data to the server:
// Send an event with custom properties and measuremnts data [MSAIMetricsManager trackEventWithName:@"Hello World event!" properties:@{@"Test property 1":@"Some value", @"Test property 2":@"Some other value"} mesurements:@{@"Test measurement 1":@(4.8), @"Test measurement 2":@(15.16), @"Test measurement 3":@(23.42)}]; // Send a message [MSAIMetricsManager trackTraceWithMessage:@"Test message"]; // Manually send pageviews (note: this will also be done automatically) [MSAIMetricsManager trackPageView:@"MyViewController" duration:300 properties:@{@"Test measurement 1":@(4.8)}]; // Send custom metrics [MSAIMetricsManager trackMetricWithName:@"Test metric" value:42.2];
Note: The SDK is optimized to defer everything possible to a later time while making sure e.g. crashes on startup can also be caught and each module executes other code with a delay some seconds. This ensures that applicationDidFinishLaunching will process as fast as possible and the SDK will not block the startup sequence resulting in a possible kill by the watchdog process.
-
Open your
AppDelegate.swift
file. -
Add the following line at the top of the file below your own #import statements:
#import AppInsights
-
Search for the method
application(application: UIApplication, didFinishLaunchingWithOptions launchOptions:[NSObject: AnyObject]?) -> Bool`
-
Add the following lines to setup and start the AppInsights SDK:
MSAIAppInsights.sharedInstance().setup(); MSAIAppInsights.sharedInstance().start();
You can also use the following shortcut:
MSAIAppInsights.setup(); MSAIAppInsights.start();
-
Send some data to the server:
// Send an event with custom properties and measuremnts data MSAIMetricsManager.trackEventWithName(name:"Hello World event!", properties:@{"Test property 1":"Some value", "Test property 2":"Some other value"}, mesurements:@{"Test measurement 1":@(4.8), "Test measurement 2":@(15.16), "Test measurement 3":@(23.42)}); // Send a message MSAIMetricsManager.trackTraceWithMessage(message:"Test message"); // Manually send pageviews MSAIMetricsManager.trackPageView(pageView:"MyViewController", duration:300, properties:@{"Test measurement 1":@(4.8)}); // Send a message MSAIMetricsManager.trackMetricWithName(name:"Test metric", value:42.2);
At this point exceptions as well as other telemetry data are sent to different endpoints. By default the following endpoints are used to work with the Azure portal:
- Exceptions:
https://dray-prod.aisvc.visualstudio.com/v2/track
- Telemetry Data:
https://dc.services.visualstudio.com/v2/track
To change those endpoints open the AppInsights.h
file and change the following define statements:
#define MSAI_CRASH_DATA_URL @"https://dray-prod.aisvc.visualstudio.com/v2/track"
#define MSAI_EVENT_DATA_URL @"https://dc.services.visualstudio.com/v2/track"
The following points need to be considered to use AppInsights SDK iOS with iOS 8 Extensions:
-
Each extension is required to use the same values for version (
CFBundleShortVersionString
) and build number (CFBundleVersion
) as the main app uses. (This is required only if you are using the sameMSAIInstrumentationKey
for your app and extensions). -
You need to make sure the SDK setup code is only invoked once. Since there is no
applicationDidFinishLaunching:
equivalent andviewDidLoad
can run multiple times, you need to use a setup like the following example:@interface TodayViewController () <NCWidgetProviding> @property (nonatomic, assign) BOOL didSetupAppInsightsSDK; @end @implementation TodayViewController - (void)viewDidLoad { [super viewDidLoad]; if (!self.didSetupAppInsightsSDK) { [MSAIAppInsights setup]; [MSAIAppInsights start]; self.didSetupAppInsightsSDK = YES; } }
Instead of manually adding the missing frameworks, you can also use our bundled xcconfig file.
-
Select your project in the
Project Navigator
(⌘+1). -
Select your project.
-
Select the tab
Info
. -
Expand
Configurations
. -
Select
AppInsights.xcconfig
for all your configurations (if you don't already use a.xcconfig
file)Note: You can also add the required frameworks manually to your targets
Build Phases
and continue with step7.
instead. -
If you are already using a
.xcconfig
file, simply add the following line to it#include "../Vendor/AppInsights/Support/AppInsights.xcconfig"
(Adjust the path depending where the
Project.xcconfig
file is located related to the Xcode project package)Important note: Check if you overwrite any of the build settings and add a missing
$(inherited)
entry on the projects build settings level, so theAppInsights.xcconfig
settings will be passed through successfully. -
If you are getting build warnings, then the
.xcconfig
setting wasn't included successfully or its settings inOther Linker Flags
get ignored because$(inherited)
is missing on project or target level. Either add$(inherited)
or link the following frameworks manually inLink Binary With Libraries
underBuild Phases
:Foundation
SystemConfiguration
UIKit
CoreTelephony
(only required if iOS > 7.0)