From 8389e746b6745a68fcd58ece8e398bde0a85b57f Mon Sep 17 00:00:00 2001 From: Fabian Guerra Soto Date: Tue, 9 Apr 2019 16:10:14 -0700 Subject: [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. --- platform/darwin/src/MGLNetworkConfiguration.m | 67 ++++++++++++++- .../darwin/src/MGLNetworkConfiguration_Private.h | 25 ++++++ platform/darwin/src/MGLSDKMetricsManager.h | 79 +++++++++++++++++ platform/darwin/src/MGLSDKMetricsManager.m | 99 ++++++++++++++++++++++ platform/darwin/src/MGLSDKMetricsManager_Private.h | 11 +++ platform/darwin/src/http_file_source.mm | 11 ++- platform/ios/app/MBXAppDelegate.m | 13 +++ platform/ios/ios.xcodeproj/project.pbxproj | 24 ++++++ platform/ios/sdk-files.json | 4 + platform/ios/src/MGLMapboxEvents.h | 2 +- platform/ios/src/Mapbox.h | 1 + platform/macos/macos.xcodeproj/project.pbxproj | 17 ++++ platform/macos/sdk-files.json | 4 + platform/macos/src/Mapbox.h | 1 + 14 files changed, 352 insertions(+), 6 deletions(-) create mode 100644 platform/darwin/src/MGLNetworkConfiguration_Private.h create mode 100644 platform/darwin/src/MGLSDKMetricsManager.h create mode 100644 platform/darwin/src/MGLSDKMetricsManager.m create mode 100644 platform/darwin/src/MGLSDKMetricsManager_Private.h 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 *events; +@property (nonatomic, weak) id 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 + +- (void)networkConfiguration:(MGLNetworkConfiguration *)networkConfiguration didGenerateMetricEvent:(NSDictionary *)metricEvent; + +@end + +extern NSString * const kMGLDownloadPerformanceEvent; + +@interface MGLNetworkConfiguration (Private) + +@property (nonatomic, strong) NSMutableDictionary *events; +@property (nonatomic, weak) id 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 +#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 + +/** + :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 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 +#import +#import +#endif + +NSString* MGLStringFromMetricType(MGLMetricType metricType) { + NSString *eventName; + + switch (metricType) { + case MGLMetricTypePerformance: + eventName = kMGLDownloadPerformanceEvent; + break; + } + return eventName; +} + +@interface MGLMetricsManager() + +@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 #import "MGLLoggingConfiguration_Private.h" -#import "MGLNetworkConfiguration.h" +#import "MGLNetworkConfiguration_Private.h" #include #include @@ -215,14 +215,19 @@ std::unique_ptr 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() + +@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 = ""; }; 1F26B6C020E189C9007BCC21 /* MBXCustomLocationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBXCustomLocationViewController.m; sourceTree = ""; }; 1F26B6C220E1A351007BCC21 /* simple_route.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = simple_route.json; sourceTree = ""; }; + 1F2B94BF221636D800210640 /* MGLNetworkConfiguration_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLNetworkConfiguration_Private.h; sourceTree = ""; }; 1F6A82A021360F9C00BA5B41 /* MGLLoggingConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLoggingConfiguration.h; sourceTree = ""; }; 1F6A82A121360F9C00BA5B41 /* MGLLoggingConfiguration.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLLoggingConfiguration.m; sourceTree = ""; }; 1F6A82A62138871900BA5B41 /* MGLLoggingConfiguration_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLoggingConfiguration_Private.h; sourceTree = ""; }; @@ -882,6 +891,9 @@ 1FCAE2A020B872A400C577DD /* MGLLocationManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLocationManager.h; sourceTree = ""; }; 1FCAE2A120B872A400C577DD /* MGLLocationManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLLocationManager.m; sourceTree = ""; }; 1FCAE2A620B88B3800C577DD /* MGLLocationManager_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLocationManager_Private.h; sourceTree = ""; }; + 1FCCEC32222605C400302E3B /* MGLSDKMetricsManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager.h; sourceTree = ""; }; + 1FCCEC33222605C400302E3B /* MGLSDKMetricsManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLSDKMetricsManager.m; sourceTree = ""; }; + 1FCCEC38222607A500302E3B /* MGLSDKMetricsManager_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager_Private.h; sourceTree = ""; }; 1FDB00C721F8F14E00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; 1FDB00C821F8F14F00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Foundation.strings; sourceTree = ""; }; 1FDB00C921F8F15000D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = cs; path = cs.lproj/Foundation.stringsdict; sourceTree = ""; }; @@ -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 = ""; }; 170A82C2201FAFF800943087 /* MGLHeatmapColorTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHeatmapColorTests.mm; sourceTree = ""; }; 1753ED3F1E53CE5200A9FD90 /* MGLConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLConversion.h; sourceTree = ""; }; + 1F2B94C2221E22E500210640 /* MGLNetworkConfiguration_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLNetworkConfiguration_Private.h; sourceTree = ""; }; 1F7454A01ECFB00300021D39 /* MGLLight_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLight_Private.h; sourceTree = ""; }; 1F7454A11ECFB00300021D39 /* MGLLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLight.h; sourceTree = ""; }; 1F7454A21ECFB00300021D39 /* MGLLight.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLight.mm; sourceTree = ""; }; @@ -343,6 +348,9 @@ 1F95931A1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLNSDateAdditionsTests.mm; path = ../../darwin/test/MGLNSDateAdditionsTests.mm; sourceTree = ""; }; 1F9EF4051FBA1B0D0063FBB0 /* mapbox_helmet.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = mapbox_helmet.pdf; sourceTree = ""; }; 1FC481842098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPredicate+MGLPrivateAdditions.h"; sourceTree = ""; }; + 1FCCEC50222EF9FC00302E3B /* MGLSDKMetricsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLSDKMetricsManager.m; sourceTree = ""; }; + 1FCCEC51222EF9FD00302E3B /* MGLSDKMetricsManager_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager_Private.h; sourceTree = ""; }; + 1FCCEC52222EF9FE00302E3B /* MGLSDKMetricsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager.h; sourceTree = ""; }; 1FDB00CC21F8F1FD00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; 1FDB00CD21F8F1FF00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; 1FF4858B2237235200F19727 /* MGLAttributedExpression.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAttributedExpression.m; sourceTree = ""; }; @@ -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" -- cgit v1.2.1