[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.
This commit is contained in:
Fabian Guerra Soto
2019-04-09 16:10:14 -07:00
committed by GitHub
parent 2ee342448b
commit 8389e746b6
14 changed files with 352 additions and 6 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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 */,

View File

@@ -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",

View File

@@ -3,7 +3,7 @@
NS_ASSUME_NONNULL_BEGIN
@interface MGLMapboxEvents : NSObject
@interface MGLMapboxEvents : NSObject
+ (nullable instancetype)sharedInstance;

View File

@@ -73,3 +73,4 @@ FOUNDATION_EXPORT MGL_EXPORT const unsigned char MapboxVersionString[];
#import "MGLLoggingConfiguration.h"
#import "MGLNetworkConfiguration.h"
#import "MGLAttributedExpression.h"
#import "MGLSDKMetricsManager.h"

View File

@@ -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 */,

View File

@@ -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",

View File

@@ -68,3 +68,4 @@ FOUNDATION_EXPORT MGL_EXPORT const unsigned char MapboxVersionString[];
#import "MGLLoggingConfiguration.h"
#import "MGLNetworkConfiguration.h"
#import "MGLAttributedExpression.h"
#import "MGLSDKMetricsManager.h"