summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Guerra Soto <fabian.guerra@mapbox.com>2019-04-09 16:10:14 -0700
committerGitHub <noreply@github.com>2019-04-09 16:10:14 -0700
commit8389e746b6745a68fcd58ece8e398bde0a85b57f (patch)
tree5ee65928c8636317265018c20bd7f11b2d3e3e4b
parent2ee342448bc6679ef6735ea0deb23f21dcf7c78b (diff)
downloadqtlocation-mapboxgl-8389e746b6745a68fcd58ece8e398bde0a85b57f.tar.gz
[ios, macos] Add Mapbox Maps SDK metrics manager. (#13997)
Added MGLSDKMetricsManager to keep track of SDK related events such as tile download times. * [ios, macos] Add tile download performance event. * [ios, macos] Modify the performance event format. * [ios, macos] Add Mapbox Maps SDK events manager. * [ios, macos] Remove events delegate. * [ios, macos] Remove deprecated macro. * [ios, macos] Rename MGLEventsManager to MGLMetricsManager. * [ios, macos] Make MGLMetricsDelegate follow delegate convention. * [ios, macos] Remove mbgl-filesource target dependency on MGLMetricsManager. * [ios, macos] Update metrics manager documentation. * [ios, macos] Add device metadata. * [ios, macos] Rename MGLMetricsManager to MGLSDKMetricsManager.
-rw-r--r--platform/darwin/src/MGLNetworkConfiguration.m67
-rw-r--r--platform/darwin/src/MGLNetworkConfiguration_Private.h25
-rw-r--r--platform/darwin/src/MGLSDKMetricsManager.h79
-rw-r--r--platform/darwin/src/MGLSDKMetricsManager.m99
-rw-r--r--platform/darwin/src/MGLSDKMetricsManager_Private.h11
-rw-r--r--platform/darwin/src/http_file_source.mm11
-rw-r--r--platform/ios/app/MBXAppDelegate.m13
-rw-r--r--platform/ios/ios.xcodeproj/project.pbxproj24
-rw-r--r--platform/ios/sdk-files.json4
-rw-r--r--platform/ios/src/MGLMapboxEvents.h2
-rw-r--r--platform/ios/src/Mapbox.h1
-rw-r--r--platform/macos/macos.xcodeproj/project.pbxproj17
-rw-r--r--platform/macos/sdk-files.json4
-rw-r--r--platform/macos/src/Mapbox.h1
14 files changed, 352 insertions, 6 deletions
diff --git a/platform/darwin/src/MGLNetworkConfiguration.m b/platform/darwin/src/MGLNetworkConfiguration.m
index 8262e7eea1..bac4d12ee5 100644
--- a/platform/darwin/src/MGLNetworkConfiguration.m
+++ b/platform/darwin/src/MGLNetworkConfiguration.m
@@ -1,19 +1,33 @@
-#import "MGLNetworkConfiguration.h"
+#import "MGLNetworkConfiguration_Private.h"
+
+static NSString * const MGLStartTime = @"start_time";
+static NSString * const MGLResourceType = @"resource_type";
+NSString * const kMGLDownloadPerformanceEvent = @"mobile.performance_trace";
@interface MGLNetworkConfiguration ()
@property (strong) NSURLSessionConfiguration *sessionConfig;
+@property (nonatomic, strong) NSMutableDictionary<NSString *, NSDictionary*> *events;
+@property (nonatomic, weak) id<MGLNetworkConfigurationMetricsDelegate> metricsDelegate;
@end
@implementation MGLNetworkConfiguration
+- (instancetype)init {
+ if (self = [super init]) {
+ self.sessionConfiguration = nil;
+ _events = [NSMutableDictionary dictionary];
+ }
+
+ return self;
+}
+
+ (instancetype)sharedManager {
static dispatch_once_t onceToken;
static MGLNetworkConfiguration *_sharedManager;
dispatch_once(&onceToken, ^{
_sharedManager = [[self alloc] init];
- _sharedManager.sessionConfiguration = nil;
});
return _sharedManager;
@@ -48,4 +62,53 @@
return sessionConfiguration;
}
+- (void)startDownloadEvent:(NSString *)urlString type:(NSString *)resourceType {
+ if (urlString && ![self.events objectForKey:urlString]) {
+ [self.events setObject:@{ MGLStartTime: [NSDate date], MGLResourceType: resourceType } forKey:urlString];
+ }
+}
+
+- (void)stopDownloadEvent:(NSString *)urlString {
+ [self sendEventForURL:urlString withAction:nil];
+}
+
+- (void)cancelDownloadEvent:(NSString *)urlString {
+ [self sendEventForURL:urlString withAction:@"cancel"];
+}
+
+- (void)sendEventForURL:(NSString *)urlString withAction:(NSString *)action
+{
+ if (urlString && [self.events objectForKey:urlString]) {
+ NSDictionary *eventAttributes = [self eventAttributesForURL:urlString withAction:action];
+ [self.metricsDelegate networkConfiguration:self didGenerateMetricEvent:eventAttributes];
+ [self.events removeObjectForKey:urlString];
+ }
+}
+
+- (NSDictionary *)eventAttributesForURL:(NSString *)urlString withAction:(NSString *)action
+{
+ NSDictionary *parameters = [self.events objectForKey:urlString];
+ NSDate *startDate = [parameters objectForKey:MGLStartTime];
+ NSDate *endDate = [NSDate date];
+ NSTimeInterval elapsedTime = [endDate timeIntervalSinceDate:startDate];
+ NSDateFormatter* iso8601Formatter = [[NSDateFormatter alloc] init];
+ iso8601Formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ";
+ NSString *createdDate = [iso8601Formatter stringFromDate:[NSDate date]];
+
+ NSMutableArray *attributes = [NSMutableArray array];
+ [attributes addObject:@{ @"name" : @"resource" , @"value" : urlString }];
+ [attributes addObject:@{ @"name" : MGLResourceType , @"value" : [parameters objectForKey:MGLResourceType] }];
+ if (action) {
+ [attributes addObject:@{ @"name" : @"action" , @"value" : action }];
+ }
+
+ return @{
+ @"event" : kMGLDownloadPerformanceEvent,
+ @"created" : createdDate,
+ @"sessionId" : [NSUUID UUID].UUIDString,
+ @"counters" : @[ @{ @"name" : @"elapsed_time" , @"value" : @(elapsedTime) } ],
+ @"attributes" : attributes
+ };
+}
+
@end
diff --git a/platform/darwin/src/MGLNetworkConfiguration_Private.h b/platform/darwin/src/MGLNetworkConfiguration_Private.h
new file mode 100644
index 0000000000..18c78a004a
--- /dev/null
+++ b/platform/darwin/src/MGLNetworkConfiguration_Private.h
@@ -0,0 +1,25 @@
+#import "MGLNetworkConfiguration.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class MGLNetworkConfiguration;
+@protocol MGLNetworkConfigurationMetricsDelegate <NSObject>
+
+- (void)networkConfiguration:(MGLNetworkConfiguration *)networkConfiguration didGenerateMetricEvent:(NSDictionary *)metricEvent;
+
+@end
+
+extern NSString * const kMGLDownloadPerformanceEvent;
+
+@interface MGLNetworkConfiguration (Private)
+
+@property (nonatomic, strong) NSMutableDictionary<NSString*, NSDictionary*> *events;
+@property (nonatomic, weak) id<MGLNetworkConfigurationMetricsDelegate> metricsDelegate;
+
+- (void)startDownloadEvent:(NSString *)urlString type:(NSString *)resourceType;
+- (void)stopDownloadEvent:(NSString *)urlString;
+- (void)cancelDownloadEvent:(NSString *)urlString;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/platform/darwin/src/MGLSDKMetricsManager.h b/platform/darwin/src/MGLSDKMetricsManager.h
new file mode 100644
index 0000000000..49b3391a72
--- /dev/null
+++ b/platform/darwin/src/MGLSDKMetricsManager.h
@@ -0,0 +1,79 @@
+#import <Foundation/Foundation.h>
+#import "MGLFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ :nodoc:
+ The metrics type used to handle metrics events.
+ */
+typedef NS_ENUM(NSUInteger, MGLMetricType) {
+ /** :nodoc:
+ Metric that measures performance.
+ */
+ MGLMetricTypePerformance = 0,
+};
+
+FOUNDATION_EXTERN MGL_EXPORT NSString* MGLStringFromMetricType(MGLMetricType metricType);
+
+@class MGLMetricsManager;
+
+/**
+ :nodoc:
+ The `MGLMetricsManagerDelegate` protocol defines a set of methods that you
+ can use to receive metric events.
+ */
+@protocol MGLMetricsManagerDelegate <NSObject>
+
+/**
+ :nodoc:
+ Asks the delegate whether the metrics manager should handle metric events.
+
+ @param metricsManager The metrics manager object.
+ @param metricType The metric type event.
+ */
+- (BOOL)metricsManager:(MGLMetricsManager *)metricsManager shouldHandleMetric:(MGLMetricType)metricType;
+
+/**
+ :nodoc:
+ Asks the delegate to handle metric events.
+
+ @param metricsManager The metrics manager object.
+ @param metricType The metric type event.
+ @param attributes The metric attributes.
+ */
+- (void)metricsManager:(MGLMetricsManager *)metricsManager didCollectMetric:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes;
+
+@end
+
+/**
+ :nodoc:
+ The `MGLMetricsManager` object provides a single poin to collect SDK metrics
+ such as tile download latency.
+ */
+MGL_EXPORT
+@interface MGLMetricsManager : NSObject
+
+/**
+ :nodoc:
+ Returns the shared metrics manager object.
+ */
+@property (class, nonatomic, readonly) MGLMetricsManager *sharedManager;
+
+/**
+ :nodoc:
+ The metrics manager delegate that will recieve metric events.
+ */
+@property (nonatomic, weak) id<MGLMetricsManagerDelegate> delegate;
+
+#if TARGET_OS_IOS
+/**
+ :nodoc:
+ Sends metric events to Mapbox.
+ */
+- (void)pushMetric:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes;
+#endif
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/platform/darwin/src/MGLSDKMetricsManager.m b/platform/darwin/src/MGLSDKMetricsManager.m
new file mode 100644
index 0000000000..ed48eaf0c1
--- /dev/null
+++ b/platform/darwin/src/MGLSDKMetricsManager.m
@@ -0,0 +1,99 @@
+#import "MGLSDKMetricsManager_Private.h"
+#import "MGLNetworkConfiguration_Private.h"
+#if TARGET_OS_IOS
+#import "MGLMapboxEvents.h"
+#import <mach-o/arch.h>
+#import <sys/utsname.h>
+#import <UIKit/UIKit.h>
+#endif
+
+NSString* MGLStringFromMetricType(MGLMetricType metricType) {
+ NSString *eventName;
+
+ switch (metricType) {
+ case MGLMetricTypePerformance:
+ eventName = kMGLDownloadPerformanceEvent;
+ break;
+ }
+ return eventName;
+}
+
+@interface MGLMetricsManager() <MGLNetworkConfigurationMetricsDelegate>
+
+@property (strong, nonatomic) NSDictionary *metadata;
+
+@end
+
+@implementation MGLMetricsManager
+
++ (instancetype)sharedManager
+{
+ static dispatch_once_t once;
+ static MGLMetricsManager *sharedConfiguration;
+ dispatch_once(&once, ^{
+ sharedConfiguration = [[self alloc] init];
+ [MGLNetworkConfiguration sharedManager].metricsDelegate = sharedConfiguration;
+#if TARGET_OS_IOS
+ UIDevice *currentDevice = [UIDevice currentDevice];
+
+ NSString *osVersion = currentDevice.systemVersion;
+
+ NSString *screenSize = [NSString stringWithFormat:@"%.fx%.f", [UIScreen mainScreen].bounds.size.width,
+ [UIScreen mainScreen].bounds.size.height];
+
+ NSLocale *currentLocale = [NSLocale currentLocale];
+ NSString *country = [currentLocale objectForKey:NSLocaleCountryCode];
+
+ NSString *device = deviceName();
+
+ const NXArchInfo localArchInfo = *NXGetLocalArchInfo();
+ NSString *abi = [NSString stringWithUTF8String:localArchInfo.description];
+
+ NSString *ram = [NSString stringWithFormat:@"%llu", [NSProcessInfo processInfo].physicalMemory];
+
+ NSString *os = currentDevice.systemName;
+
+ sharedConfiguration.metadata = @{ @"version" : osVersion,
+ @"screenSize" : screenSize,
+ @"country" : country,
+ @"device" : device,
+ @"abi" : abi,
+ @"brand" : @"Apple",
+ @"ram" : ram,
+ @"os" : os
+ };
+#endif
+ });
+ return sharedConfiguration;
+}
+
+- (void)handleMetricsEvent:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes {
+ if ([self.delegate metricsManager:self shouldHandleMetric:metricType]) {
+ [self.delegate metricsManager:self didCollectMetric:metricType withAttributes:attributes];
+ }
+}
+
+#if TARGET_OS_IOS
+- (void)pushMetric:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes {
+ NSString *eventName = MGLStringFromMetricType(metricType);
+ NSMutableDictionary *mutableAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
+ [mutableAttributes setObject:self.metadata forKey:@"metadata"];
+
+ [MGLMapboxEvents pushEvent:eventName withAttributes:mutableAttributes];
+}
+
+NSString* deviceName()
+{
+ struct utsname systemInfo;
+ uname(&systemInfo);
+
+ return [NSString stringWithCString:systemInfo.machine
+ encoding:NSUTF8StringEncoding];
+}
+#endif
+
+- (void)networkConfiguration:(MGLNetworkConfiguration *)networkConfiguration didGenerateMetricEvent:(NSDictionary *)metricEvent {
+ [self handleMetricsEvent:MGLMetricTypePerformance withAttributes:metricEvent];
+}
+
+@end
diff --git a/platform/darwin/src/MGLSDKMetricsManager_Private.h b/platform/darwin/src/MGLSDKMetricsManager_Private.h
new file mode 100644
index 0000000000..a3cdfca794
--- /dev/null
+++ b/platform/darwin/src/MGLSDKMetricsManager_Private.h
@@ -0,0 +1,11 @@
+#import "MGLSDKMetricsManager.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MGLMetricsManager (Private)
+
+- (void)handleMetricsEvent:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/platform/darwin/src/http_file_source.mm b/platform/darwin/src/http_file_source.mm
index c3918ad62b..c26568d8bc 100644
--- a/platform/darwin/src/http_file_source.mm
+++ b/platform/darwin/src/http_file_source.mm
@@ -8,7 +8,7 @@
#import <Foundation/Foundation.h>
#import "MGLLoggingConfiguration_Private.h"
-#import "MGLNetworkConfiguration.h"
+#import "MGLNetworkConfiguration_Private.h"
#include <mutex>
#include <chrono>
@@ -215,14 +215,19 @@ std::unique_ptr<AsyncRequest> HTTPFileSource::request(const Resource& resource,
}
[req addValue:impl->userAgent forHTTPHeaderField:@"User-Agent"];
-
+
+ if (resource.kind == mbgl::Resource::Kind::Tile) {
+ [[MGLNetworkConfiguration sharedManager] startDownloadEvent:url.relativePath type:@"tile"];
+ }
+
request->task = [impl->session
dataTaskWithRequest:req
completionHandler:^(NSData* data, NSURLResponse* res, NSError* error) {
if (error && [error code] == NSURLErrorCancelled) {
+ [[MGLNetworkConfiguration sharedManager] cancelDownloadEvent:res.URL.relativePath];
return;
}
-
+ [[MGLNetworkConfiguration sharedManager] stopDownloadEvent:res.URL.relativePath];
Response response;
using Error = Response::Error;
diff --git a/platform/ios/app/MBXAppDelegate.m b/platform/ios/app/MBXAppDelegate.m
index 9932356e6e..6abee91557 100644
--- a/platform/ios/app/MBXAppDelegate.m
+++ b/platform/ios/app/MBXAppDelegate.m
@@ -4,6 +4,10 @@
NSString * const MBXMapboxAccessTokenDefaultsKey = @"MBXMapboxAccessToken";
+@interface MBXAppDelegate() <MGLMetricsManagerDelegate>
+
+@end
+
@implementation MBXAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
@@ -24,6 +28,7 @@ NSString * const MBXMapboxAccessTokenDefaultsKey = @"MBXMapboxAccessToken";
#ifndef MGL_DISABLE_LOGGING
[MGLLoggingConfiguration sharedConfiguration].loggingLevel = MGLLoggingLevelFault;
#endif
+ [MGLMetricsManager sharedManager].delegate = self;
}
return YES;
@@ -47,4 +52,12 @@ NSString * const MBXMapboxAccessTokenDefaultsKey = @"MBXMapboxAccessToken";
return NO;
}
+- (BOOL)metricsManager:(MGLMetricsManager *)metricsManager shouldHandleMetric:(MGLMetricType)metricType {
+ return YES;
+}
+
+- (void)metricsManager:(MGLMetricsManager *)metricsManager didCollectMetric:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes {
+ [[MGLMetricsManager sharedManager] pushMetric:metricType withAttributes:attributes];
+}
+
@end
diff --git a/platform/ios/ios.xcodeproj/project.pbxproj b/platform/ios/ios.xcodeproj/project.pbxproj
index 34873fdd0c..2d4db74493 100644
--- a/platform/ios/ios.xcodeproj/project.pbxproj
+++ b/platform/ios/ios.xcodeproj/project.pbxproj
@@ -35,6 +35,8 @@
1F06668D1EC64F8E001C16D7 /* MGLLight.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F0666891EC64F8E001C16D7 /* MGLLight.mm */; };
1F26B6C120E189C9007BCC21 /* MBXCustomLocationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F26B6C020E189C9007BCC21 /* MBXCustomLocationViewController.m */; };
1F26B6C320E1A351007BCC21 /* simple_route.json in Resources */ = {isa = PBXBuildFile; fileRef = 1F26B6C220E1A351007BCC21 /* simple_route.json */; };
+ 1F2B94C0221636D900210640 /* MGLNetworkConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F2B94BF221636D800210640 /* MGLNetworkConfiguration_Private.h */; };
+ 1F2B94C1221636D900210640 /* MGLNetworkConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F2B94BF221636D800210640 /* MGLNetworkConfiguration_Private.h */; };
1F6A82A221360F9D00BA5B41 /* MGLLoggingConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F6A82A021360F9C00BA5B41 /* MGLLoggingConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
1F6A82A321360F9D00BA5B41 /* MGLLoggingConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F6A82A021360F9C00BA5B41 /* MGLLoggingConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
1F6A82A421360F9D00BA5B41 /* MGLLoggingConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F6A82A121360F9C00BA5B41 /* MGLLoggingConfiguration.m */; };
@@ -57,6 +59,12 @@
1FCAE2A520B872A400C577DD /* MGLLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCAE2A120B872A400C577DD /* MGLLocationManager.m */; };
1FCAE2A820B88B3800C577DD /* MGLLocationManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCAE2A620B88B3800C577DD /* MGLLocationManager_Private.h */; };
1FCAE2A920B88B3800C577DD /* MGLLocationManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCAE2A620B88B3800C577DD /* MGLLocationManager_Private.h */; };
+ 1FCCEC34222605C400302E3B /* MGLSDKMetricsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC32222605C400302E3B /* MGLSDKMetricsManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1FCCEC35222605C400302E3B /* MGLSDKMetricsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC32222605C400302E3B /* MGLSDKMetricsManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1FCCEC36222605C400302E3B /* MGLSDKMetricsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCCEC33222605C400302E3B /* MGLSDKMetricsManager.m */; };
+ 1FCCEC37222605C400302E3B /* MGLSDKMetricsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCCEC33222605C400302E3B /* MGLSDKMetricsManager.m */; };
+ 1FCCEC3A222607A500302E3B /* MGLSDKMetricsManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC38222607A500302E3B /* MGLSDKMetricsManager_Private.h */; };
+ 1FCCEC3B222607A500302E3B /* MGLSDKMetricsManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC38222607A500302E3B /* MGLSDKMetricsManager_Private.h */; };
1FF48587223710BE00F19727 /* MGLAttributedExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF48585223710BE00F19727 /* MGLAttributedExpression.h */; settings = {ATTRIBUTES = (Public, ); }; };
1FF48588223710BE00F19727 /* MGLAttributedExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF48585223710BE00F19727 /* MGLAttributedExpression.h */; settings = {ATTRIBUTES = (Public, ); }; };
1FF48589223710BE00F19727 /* MGLAttributedExpression.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF48586223710BE00F19727 /* MGLAttributedExpression.m */; };
@@ -871,6 +879,7 @@
1F26B6BF20E189C9007BCC21 /* MBXCustomLocationViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXCustomLocationViewController.h; sourceTree = "<group>"; };
1F26B6C020E189C9007BCC21 /* MBXCustomLocationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBXCustomLocationViewController.m; sourceTree = "<group>"; };
1F26B6C220E1A351007BCC21 /* simple_route.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = simple_route.json; sourceTree = "<group>"; };
+ 1F2B94BF221636D800210640 /* MGLNetworkConfiguration_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLNetworkConfiguration_Private.h; sourceTree = "<group>"; };
1F6A82A021360F9C00BA5B41 /* MGLLoggingConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLoggingConfiguration.h; sourceTree = "<group>"; };
1F6A82A121360F9C00BA5B41 /* MGLLoggingConfiguration.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLLoggingConfiguration.m; sourceTree = "<group>"; };
1F6A82A62138871900BA5B41 /* MGLLoggingConfiguration_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLoggingConfiguration_Private.h; sourceTree = "<group>"; };
@@ -882,6 +891,9 @@
1FCAE2A020B872A400C577DD /* MGLLocationManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLocationManager.h; sourceTree = "<group>"; };
1FCAE2A120B872A400C577DD /* MGLLocationManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLLocationManager.m; sourceTree = "<group>"; };
1FCAE2A620B88B3800C577DD /* MGLLocationManager_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLocationManager_Private.h; sourceTree = "<group>"; };
+ 1FCCEC32222605C400302E3B /* MGLSDKMetricsManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager.h; sourceTree = "<group>"; };
+ 1FCCEC33222605C400302E3B /* MGLSDKMetricsManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLSDKMetricsManager.m; sourceTree = "<group>"; };
+ 1FCCEC38222607A500302E3B /* MGLSDKMetricsManager_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager_Private.h; sourceTree = "<group>"; };
1FDB00C721F8F14E00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
1FDB00C821F8F14F00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Foundation.strings; sourceTree = "<group>"; };
1FDB00C921F8F15000D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = cs; path = cs.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
@@ -2086,8 +2098,11 @@
DA00FC8C1D5EEB0D009AABC8 /* MGLAttributionInfo.h */,
DAF0D8171DFE6B2800B28378 /* MGLAttributionInfo_Private.h */,
DA00FC8D1D5EEB0D009AABC8 /* MGLAttributionInfo.mm */,
+ 1FCCEC32222605C400302E3B /* MGLSDKMetricsManager.h */,
1FF48585223710BE00F19727 /* MGLAttributedExpression.h */,
1FF48586223710BE00F19727 /* MGLAttributedExpression.m */,
+ 1FCCEC38222607A500302E3B /* MGLSDKMetricsManager_Private.h */,
+ 1FCCEC33222605C400302E3B /* MGLSDKMetricsManager.m */,
556660C91E1BF3A900E2C41B /* MGLFoundation.h */,
558DE79E1E5615E400C7916D /* MGLFoundation_Private.h */,
558DE79F1E5615E400C7916D /* MGLFoundation.mm */,
@@ -2096,6 +2111,7 @@
927FBCFD1F4DB05500F8BF1F /* MGLMapSnapshotter.h */,
927FBCFE1F4DB05500F8BF1F /* MGLMapSnapshotter.mm */,
DD0902A41DB18F1B00C5BDCE /* MGLNetworkConfiguration.h */,
+ 1F2B94BF221636D800210640 /* MGLNetworkConfiguration_Private.h */,
DD0902A21DB18DE700C5BDCE /* MGLNetworkConfiguration.m */,
3EA9337830C7738BF7F5493C /* MGLRendererConfiguration.h */,
3EA931BC4F087E166D538F21 /* MGLRendererConfiguration.mm */,
@@ -2419,6 +2435,8 @@
3510FFF01D6D9D8C00F413B2 /* NSExpression+MGLAdditions.h in Headers */,
74CB5EBF219B280400102936 /* MGLHeatmapStyleLayer_Private.h in Headers */,
1FC4817D2098CBC0000D09B4 /* NSPredicate+MGLPrivateAdditions.h in Headers */,
+ 1FCCEC3A222607A500302E3B /* MGLSDKMetricsManager_Private.h in Headers */,
+ 1F2B94C0221636D900210640 /* MGLNetworkConfiguration_Private.h in Headers */,
353AFA141D65AB17005A69F4 /* NSDate+MGLAdditions.h in Headers */,
DA8848531CBAFB9800AB86E3 /* MGLCompactCalloutView.h in Headers */,
74CB5EB1219B252C00102936 /* MGLStyleLayerManager.h in Headers */,
@@ -2454,6 +2472,7 @@
35D3A1E61E9BE7EB002B38EE /* MGLScaleBar.h in Headers */,
0778DD431F67556700A73B34 /* MGLComputedShapeSource.h in Headers */,
9C188C502242C96F0022FA55 /* MMEDate.h in Headers */,
+ 1FCCEC34222605C400302E3B /* MGLSDKMetricsManager.h in Headers */,
1F6A82A221360F9D00BA5B41 /* MGLLoggingConfiguration.h in Headers */,
AC1B0916221CA14D00DB56C8 /* CLLocationManager+MMEMobileEvents.h in Headers */,
DA8848311CBAFA6200AB86E3 /* NSString+MGLAdditions.h in Headers */,
@@ -2626,6 +2645,7 @@
DABFB86D1CBE9A0F00D62B32 /* MGLAnnotationImage.h in Headers */,
DABFB8721CBE9A0F00D62B32 /* MGLUserLocation.h in Headers */,
92FC0AED207CEE16007B6B54 /* MGLShapeOfflineRegion_Private.h in Headers */,
+ 1FCCEC35222605C400302E3B /* MGLSDKMetricsManager.h in Headers */,
927FBD001F4DB05500F8BF1F /* MGLMapSnapshotter.h in Headers */,
3566C7721D4A9198008152BC /* MGLSource_Private.h in Headers */,
353933FF1D3FB7DD003F57D7 /* MGLSymbolStyleLayer.h in Headers */,
@@ -2660,6 +2680,7 @@
3510FFFA1D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.h in Headers */,
1FF48588223710BE00F19727 /* MGLAttributedExpression.h in Headers */,
DA72620C1DEEE3480043BB89 /* MGLOpenGLStyleLayer.h in Headers */,
+ 1F2B94C1221636D900210640 /* MGLNetworkConfiguration_Private.h in Headers */,
35CE61831D4165D9004F2359 /* UIColor+MGLAdditions.h in Headers */,
96E516F32000597100A02306 /* NSDictionary+MGLAdditions.h in Headers */,
1FCAE2A920B88B3800C577DD /* MGLLocationManager_Private.h in Headers */,
@@ -2719,6 +2740,7 @@
353933F91D3FB79F003F57D7 /* MGLLineStyleLayer.h in Headers */,
96E516EB2000560B00A02306 /* MGLUserLocation_Private.h in Headers */,
35D13AB81D3D15E300AFB4E0 /* MGLStyleLayer.h in Headers */,
+ 1FCCEC3B222607A500302E3B /* MGLSDKMetricsManager_Private.h in Headers */,
35136D4D1D4277FC00C20EFD /* MGLSource.h in Headers */,
DA35A2BC1CCA9A6900E826B2 /* MGLClockDirectionFormatter.h in Headers */,
96E516E82000560B00A02306 /* MGLAnnotationContainerView_Private.h in Headers */,
@@ -3243,6 +3265,7 @@
0778DD441F67556C00A73B34 /* MGLComputedShapeSource.mm in Sources */,
3557F7B21E1D27D300CCA5E6 /* MGLDistanceFormatter.m in Sources */,
40834C4B1FE05F7500C1BD0D /* TSKPinningValidatorResult.m in Sources */,
+ 1FCCEC36222605C400302E3B /* MGLSDKMetricsManager.m in Sources */,
ACA65F472140669000537748 /* MMETrustKitProvider.m in Sources */,
40834BE71FE05E1800C1BD0D /* MMEAPIClient.m in Sources */,
DA8848591CBAFB9800AB86E3 /* MGLMapView.mm in Sources */,
@@ -3380,6 +3403,7 @@
DAA4E41D1CBB730400178DFB /* MGLGeometry.mm in Sources */,
40834C581FE05F7600C1BD0D /* TSKPinningValidatorResult.m in Sources */,
40834BFB1FE05E1800C1BD0D /* MMEAPIClient.m in Sources */,
+ 1FCCEC37222605C400302E3B /* MGLSDKMetricsManager.m in Sources */,
ACA65F482140669100537748 /* MMETrustKitProvider.m in Sources */,
DAA4E41F1CBB730400178DFB /* MGLMultiPoint.mm in Sources */,
DD0902AA1DB1929D00C5BDCE /* MGLNetworkConfiguration.m in Sources */,
diff --git a/platform/ios/sdk-files.json b/platform/ios/sdk-files.json
index 94f928b77e..26dad2c277 100644
--- a/platform/ios/sdk-files.json
+++ b/platform/ios/sdk-files.json
@@ -65,6 +65,7 @@
"platform/darwin/src/MGLComputedShapeSource.mm",
"platform/darwin/src/MGLDistanceFormatter.m",
"platform/ios/vendor/mapbox-events-ios/vendor/TrustKit/TSKPinningValidatorResult.m",
+ "platform/darwin/src/MGLSDKMetricsManager.m",
"platform/ios/vendor/mapbox-events-ios/MapboxMobileEvents/MMETrustKitProvider.m",
"platform/ios/vendor/mapbox-events-ios/MapboxMobileEvents/MMEAPIClient.m",
"platform/ios/src/MGLMapView.mm",
@@ -162,6 +163,7 @@
"MGLVectorStyleLayer.h": "platform/darwin/src/MGLVectorStyleLayer.h",
"MGLNetworkConfiguration.h": "platform/darwin/src/MGLNetworkConfiguration.h",
"MGLComputedShapeSource.h": "platform/darwin/src/MGLComputedShapeSource.h",
+ "MGLSDKMetricsManager.h": "platform/darwin/src/MGLSDKMetricsManager.h",
"MGLLoggingConfiguration.h": "platform/darwin/src/MGLLoggingConfiguration.h",
"MGLLocationManager.h": "platform/darwin/src/MGLLocationManager.h",
"MGLRasterDEMSource.h": "platform/darwin/src/MGLRasterDEMSource.h",
@@ -223,6 +225,8 @@
"MGLStyle_Private.h": "platform/darwin/src/MGLStyle_Private.h",
"MGLHeatmapStyleLayer_Private.h": "platform/darwin/src/MGLHeatmapStyleLayer_Private.h",
"NSPredicate+MGLPrivateAdditions.h": "platform/darwin/src/NSPredicate+MGLPrivateAdditions.h",
+ "MGLSDKMetricsManager_Private.h": "platform/darwin/src/MGLSDKMetricsManager_Private.h",
+ "MGLNetworkConfiguration_Private.h": "platform/darwin/src/MGLNetworkConfiguration_Private.h",
"NSDate+MGLAdditions.h": "platform/darwin/src/NSDate+MGLAdditions.h",
"MGLCompactCalloutView.h": "platform/ios/src/MGLCompactCalloutView.h",
"MGLStyleLayerManager.h": "platform/darwin/src/MGLStyleLayerManager.h",
diff --git a/platform/ios/src/MGLMapboxEvents.h b/platform/ios/src/MGLMapboxEvents.h
index cbac578798..cb3132656f 100644
--- a/platform/ios/src/MGLMapboxEvents.h
+++ b/platform/ios/src/MGLMapboxEvents.h
@@ -3,7 +3,7 @@
NS_ASSUME_NONNULL_BEGIN
-@interface MGLMapboxEvents : NSObject
+@interface MGLMapboxEvents : NSObject
+ (nullable instancetype)sharedInstance;
diff --git a/platform/ios/src/Mapbox.h b/platform/ios/src/Mapbox.h
index 34907d6c5a..635bda490f 100644
--- a/platform/ios/src/Mapbox.h
+++ b/platform/ios/src/Mapbox.h
@@ -73,3 +73,4 @@ FOUNDATION_EXPORT MGL_EXPORT const unsigned char MapboxVersionString[];
#import "MGLLoggingConfiguration.h"
#import "MGLNetworkConfiguration.h"
#import "MGLAttributedExpression.h"
+#import "MGLSDKMetricsManager.h"
diff --git a/platform/macos/macos.xcodeproj/project.pbxproj b/platform/macos/macos.xcodeproj/project.pbxproj
index 57c4f198f0..dfde6d01e2 100644
--- a/platform/macos/macos.xcodeproj/project.pbxproj
+++ b/platform/macos/macos.xcodeproj/project.pbxproj
@@ -18,6 +18,7 @@
170A82BF201BDD1B00943087 /* MGLHeatmapStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 170A82BE201BDD1B00943087 /* MGLHeatmapStyleLayerTests.mm */; };
170A82C4201FB6EC00943087 /* MGLHeatmapColorTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 170A82C2201FAFF800943087 /* MGLHeatmapColorTests.mm */; };
1753ED401E53CE6100A9FD90 /* MGLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1753ED3F1E53CE5200A9FD90 /* MGLConversion.h */; };
+ 1F2B94C3221E22E600210640 /* MGLNetworkConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F2B94C2221E22E500210640 /* MGLNetworkConfiguration_Private.h */; };
1F7454A31ECFB00300021D39 /* MGLLight_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F7454A01ECFB00300021D39 /* MGLLight_Private.h */; };
1F7454A41ECFB00300021D39 /* MGLLight.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F7454A11ECFB00300021D39 /* MGLLight.h */; settings = {ATTRIBUTES = (Public, ); }; };
1F7454A51ECFB00300021D39 /* MGLLight.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F7454A21ECFB00300021D39 /* MGLLight.mm */; };
@@ -29,6 +30,9 @@
1F95931B1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F95931A1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm */; };
1F9EF4061FBA1B0E0063FBB0 /* mapbox_helmet.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 1F9EF4051FBA1B0D0063FBB0 /* mapbox_helmet.pdf */; };
1FC481852098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FC481842098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h */; };
+ 1FCCEC53222EF9FE00302E3B /* MGLSDKMetricsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCCEC50222EF9FC00302E3B /* MGLSDKMetricsManager.m */; };
+ 1FCCEC54222EF9FE00302E3B /* MGLSDKMetricsManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC51222EF9FD00302E3B /* MGLSDKMetricsManager_Private.h */; };
+ 1FCCEC55222EF9FE00302E3B /* MGLSDKMetricsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC52222EF9FE00302E3B /* MGLSDKMetricsManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
1FF4858D2237235300F19727 /* MGLAttributedExpression.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF4858B2237235200F19727 /* MGLAttributedExpression.m */; };
1FF4858E2237235300F19727 /* MGLAttributedExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF4858C2237235200F19727 /* MGLAttributedExpression.h */; settings = {ATTRIBUTES = (Public, ); }; };
3508EC641D749D39009B0EE4 /* NSExpression+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3508EC621D749D39009B0EE4 /* NSExpression+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -332,6 +336,7 @@
170A82BE201BDD1B00943087 /* MGLHeatmapStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHeatmapStyleLayerTests.mm; sourceTree = "<group>"; };
170A82C2201FAFF800943087 /* MGLHeatmapColorTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHeatmapColorTests.mm; sourceTree = "<group>"; };
1753ED3F1E53CE5200A9FD90 /* MGLConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLConversion.h; sourceTree = "<group>"; };
+ 1F2B94C2221E22E500210640 /* MGLNetworkConfiguration_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLNetworkConfiguration_Private.h; sourceTree = "<group>"; };
1F7454A01ECFB00300021D39 /* MGLLight_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLight_Private.h; sourceTree = "<group>"; };
1F7454A11ECFB00300021D39 /* MGLLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLight.h; sourceTree = "<group>"; };
1F7454A21ECFB00300021D39 /* MGLLight.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLight.mm; sourceTree = "<group>"; };
@@ -343,6 +348,9 @@
1F95931A1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLNSDateAdditionsTests.mm; path = ../../darwin/test/MGLNSDateAdditionsTests.mm; sourceTree = "<group>"; };
1F9EF4051FBA1B0D0063FBB0 /* mapbox_helmet.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = mapbox_helmet.pdf; sourceTree = "<group>"; };
1FC481842098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPredicate+MGLPrivateAdditions.h"; sourceTree = "<group>"; };
+ 1FCCEC50222EF9FC00302E3B /* MGLSDKMetricsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLSDKMetricsManager.m; sourceTree = "<group>"; };
+ 1FCCEC51222EF9FD00302E3B /* MGLSDKMetricsManager_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager_Private.h; sourceTree = "<group>"; };
+ 1FCCEC52222EF9FE00302E3B /* MGLSDKMetricsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager.h; sourceTree = "<group>"; };
1FDB00CC21F8F1FD00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
1FDB00CD21F8F1FF00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
1FF4858B2237235200F19727 /* MGLAttributedExpression.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAttributedExpression.m; sourceTree = "<group>"; };
@@ -1217,7 +1225,11 @@
DAE6C36E1CC31E2A00DB3429 /* MGLMapCamera.mm */,
92092EEE1F5EB10E00AF5130 /* MGLMapSnapshotter.h */,
92092EEF1F5EB10E00AF5130 /* MGLMapSnapshotter.mm */,
+ 1FCCEC52222EF9FE00302E3B /* MGLSDKMetricsManager.h */,
+ 1FCCEC51222EF9FD00302E3B /* MGLSDKMetricsManager_Private.h */,
+ 1FCCEC50222EF9FC00302E3B /* MGLSDKMetricsManager.m */,
DD0902B01DB1AC6400C5BDCE /* MGLNetworkConfiguration.h */,
+ 1F2B94C2221E22E500210640 /* MGLNetworkConfiguration_Private.h */,
DD0902AF1DB1AC6400C5BDCE /* MGLNetworkConfiguration.m */,
3EA9369A4C46957566058822 /* MGLRendererConfiguration.h */,
3EA93B1B0864609938506E12 /* MGLRendererConfiguration.mm */,
@@ -1303,6 +1315,7 @@
DAE6C3611CC31E0400DB3429 /* MGLOfflineStorage.h in Headers */,
749EC8912199CCB9005608D7 /* MGLStyleLayerManager.h in Headers */,
352742781D4C220900A1ECE6 /* MGLStyleValue.h in Headers */,
+ 1FCCEC55222EF9FE00302E3B /* MGLSDKMetricsManager.h in Headers */,
DAE6C35E1CC31E0400DB3429 /* MGLMultiPoint.h in Headers */,
35602BFF1D3EA9B40050646F /* MGLStyleLayer_Private.h in Headers */,
92FC0AE4207CC8DA007B6B54 /* MGLShapeOfflineRegion_Private.h in Headers */,
@@ -1334,9 +1347,11 @@
DAC25FCA200FD5E2009BE98E /* NSExpression+MGLPrivateAdditions.h in Headers */,
DA7262071DEEDD460043BB89 /* MGLOpenGLStyleLayer.h in Headers */,
352742811D4C243B00A1ECE6 /* MGLSource.h in Headers */,
+ 1FCCEC54222EF9FE00302E3B /* MGLSDKMetricsManager_Private.h in Headers */,
DAE6C3C21CC31F4500DB3429 /* Mapbox.h in Headers */,
DAE6C3641CC31E0400DB3429 /* MGLPolygon.h in Headers */,
DA35A2BF1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.h in Headers */,
+ 1F2B94C3221E22E600210640 /* MGLNetworkConfiguration_Private.h in Headers */,
35602BFA1D3EA99F0050646F /* MGLFillStyleLayer.h in Headers */,
DA35A2A41CC9EB1A00E826B2 /* MGLCoordinateFormatter.h in Headers */,
35C5D8491D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.h in Headers */,
@@ -1508,6 +1523,7 @@
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
+ English,
en,
Base,
"zh-Hans",
@@ -1619,6 +1635,7 @@
40ABDB561DB0022100372083 /* NSImage+MGLAdditions.mm in Sources */,
DAF25715201901C200367EF5 /* MGLHillshadeStyleLayer.mm in Sources */,
DAE6C3901CC31E2A00DB3429 /* MGLPointAnnotation.mm in Sources */,
+ 1FCCEC53222EF9FE00302E3B /* MGLSDKMetricsManager.m in Sources */,
DAE6C3981CC31E2A00DB3429 /* NSBundle+MGLAdditions.m in Sources */,
DAE6C3B71CC31EF300DB3429 /* MGLMapView.mm in Sources */,
40B77E461DB11BCD003DA2FE /* NSArray+MGLAdditions.mm in Sources */,
diff --git a/platform/macos/sdk-files.json b/platform/macos/sdk-files.json
index 25987a5a0e..cc6b4a4d79 100644
--- a/platform/macos/sdk-files.json
+++ b/platform/macos/sdk-files.json
@@ -6,6 +6,7 @@
"platform/macos/src/NSImage+MGLAdditions.mm",
"platform/darwin/src/MGLHillshadeStyleLayer.mm",
"platform/darwin/src/MGLPointAnnotation.mm",
+ "platform/darwin/src/MGLSDKMetricsManager.m",
"platform/darwin/src/NSBundle+MGLAdditions.m",
"platform/macos/src/MGLMapView.mm",
"platform/darwin/src/NSArray+MGLAdditions.mm",
@@ -92,6 +93,7 @@
"MGLMapView.h": "platform/macos/src/MGLMapView.h",
"MGLOfflineStorage.h": "platform/darwin/src/MGLOfflineStorage.h",
"MGLStyleValue.h": "platform/darwin/src/MGLStyleValue.h",
+ "MGLSDKMetricsManager.h": "platform/darwin/src/MGLSDKMetricsManager.h",
"MGLMultiPoint.h": "platform/darwin/src/MGLMultiPoint.h",
"MGLShapeCollection.h": "platform/darwin/src/MGLShapeCollection.h",
"MGLPointAnnotation.h": "platform/darwin/src/MGLPointAnnotation.h",
@@ -171,6 +173,8 @@
"NSException+MGLAdditions.h": "platform/darwin/src/NSException+MGLAdditions.h",
"MGLTileSource_Private.h": "platform/darwin/src/MGLTileSource_Private.h",
"NSExpression+MGLPrivateAdditions.h": "platform/darwin/src/NSExpression+MGLPrivateAdditions.h",
+ "MGLSDKMetricsManager_Private.h": "platform/darwin/src/MGLSDKMetricsManager_Private.h",
+ "MGLNetworkConfiguration_Private.h": "platform/darwin/src/MGLNetworkConfiguration_Private.h",
"NSCompoundPredicate+MGLAdditions.h": "platform/darwin/src/NSCompoundPredicate+MGLAdditions.h",
"MGLSymbolStyleLayer_Private.h": "platform/darwin/src/MGLSymbolStyleLayer_Private.h",
"NSProcessInfo+MGLAdditions.h": "platform/darwin/src/NSProcessInfo+MGLAdditions.h",
diff --git a/platform/macos/src/Mapbox.h b/platform/macos/src/Mapbox.h
index a11867657d..6728992d6b 100644
--- a/platform/macos/src/Mapbox.h
+++ b/platform/macos/src/Mapbox.h
@@ -68,3 +68,4 @@ FOUNDATION_EXPORT MGL_EXPORT const unsigned char MapboxVersionString[];
#import "MGLLoggingConfiguration.h"
#import "MGLNetworkConfiguration.h"
#import "MGLAttributedExpression.h"
+#import "MGLSDKMetricsManager.h"