summaryrefslogtreecommitdiff
path: root/platform/macos
diff options
context:
space:
mode:
Diffstat (limited to 'platform/macos')
-rw-r--r--platform/macos/ExportOptions.plist10
-rw-r--r--platform/macos/Mapbox-macOS-SDK-symbols.podspec30
-rw-r--r--platform/macos/Mapbox-macOS-SDK.podspec30
-rw-r--r--platform/macos/WorkspaceSettings.xcsettings22
-rw-r--r--platform/macos/app/AppDelegate.h26
-rw-r--r--platform/macos/app/AppDelegate.m332
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128.pngbin8183 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128@2x.pngbin17649 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16.pngbin917 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16@2x.pngbin2009 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256.pngbin17649 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256@2x.pngbin38577 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32.pngbin1730 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32@2x.pngbin3905 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512.pngbin38577 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512@2x.pngbin85668 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/AppIcon.appiconset/Contents.json68
-rw-r--r--platform/macos/app/Assets.xcassets/Contents.json6
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/Contents.json6
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json20
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf69
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/circle.imageset/Contents.json15
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/circle.imageset/circle.pdf70
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/fill-extrusion.imageset/Contents.json15
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/fill-extrusion.imageset/fill-extrusion.pdf72
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json15
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/fill.imageset/fill.pdfbin1046 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/heatmap.imageset/Contents.json20
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/heatmap.imageset/heatmap.pdfbin1262 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/Contents.json20
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/hillshade.pdf70
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/symbol.imageset/Contents.json15
-rw-r--r--platform/macos/app/Assets.xcassets/Layers/symbol.imageset/symbol.pdf71
-rw-r--r--platform/macos/app/Assets.xcassets/Radar/Contents.json6
-rw-r--r--platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/Contents.json21
-rw-r--r--platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/southeast_radar_0.pngbin172489 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/Contents.json21
-rw-r--r--platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/southeast_radar_1.pngbin177163 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/Radar/southeast_2.imageset/Contents.json21
-rw-r--r--platform/macos/app/Assets.xcassets/Radar/southeast_2.imageset/southeast_radar_2.pngbin179236 -> 0 bytes
-rw-r--r--platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/Contents.json21
-rw-r--r--platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/southeast_radar_3.pngbin177074 -> 0 bytes
-rw-r--r--platform/macos/app/Base.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/Base.lproj/MainMenu.xib982
-rw-r--r--platform/macos/app/Base.lproj/MapDocument.xib497
-rw-r--r--platform/macos/app/Credits.rtf9
-rw-r--r--platform/macos/app/DroppedPinAnnotation.h15
-rw-r--r--platform/macos/app/DroppedPinAnnotation.m73
-rw-r--r--platform/macos/app/Info.plist58
-rw-r--r--platform/macos/app/LocationCoordinate2DTransformer.h5
-rw-r--r--platform/macos/app/LocationCoordinate2DTransformer.m31
-rw-r--r--platform/macos/app/MGLStyle+MBXAdditions.h7
-rw-r--r--platform/macos/app/MGLStyle+MBXAdditions.m42
-rw-r--r--platform/macos/app/MapDocument.h14
-rw-r--r--platform/macos/app/MapDocument.m1507
-rw-r--r--platform/macos/app/OfflinePackNameValueTransformer.h5
-rw-r--r--platform/macos/app/OfflinePackNameValueTransformer.m33
-rw-r--r--platform/macos/app/StyleLayerIconTransformer.h5
-rw-r--r--platform/macos/app/StyleLayerIconTransformer.m47
-rw-r--r--platform/macos/app/TimeIntervalTransformer.h5
-rw-r--r--platform/macos/app/TimeIntervalTransformer.m53
-rw-r--r--platform/macos/app/ar.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/bg.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/ca.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/cs.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/da.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/de.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/es.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/fi.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/fr.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/gl.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/he.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/heatmap.json809
-rw-r--r--platform/macos/app/hu.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/ja.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/ko.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/lt.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/main.m5
-rw-r--r--platform/macos/app/nl.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/pl.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/pt-BR.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/pt-PT.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/resources/background.svg90
-rw-r--r--platform/macos/app/resources/circle.svg67
-rw-r--r--platform/macos/app/resources/fill-extrusion.svg125
-rw-r--r--platform/macos/app/resources/fill.svg68
-rw-r--r--platform/macos/app/resources/heatmap.svg72
-rw-r--r--platform/macos/app/resources/hillshade.svg87
-rw-r--r--platform/macos/app/resources/symbol.svg66
-rw-r--r--platform/macos/app/ru.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/sv.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/uk.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/vi.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/wms.json21
-rw-r--r--platform/macos/app/zh-Hans.lproj/Localizable.strings0
-rw-r--r--platform/macos/app/zh-Hant.lproj/Localizable.strings0
-rw-r--r--platform/macos/docs/doc-README.md9
-rw-r--r--platform/macos/docs/guides/For Style Authors.md427
-rw-r--r--platform/macos/docs/guides/Info.plist Keys.md35
-rw-r--r--platform/macos/docs/guides/Migrating to Expressions.md267
-rw-r--r--platform/macos/docs/guides/Tile URL Templates.md98
-rw-r--r--platform/macos/docs/img/screenshot.jpgbin411181 -> 0 bytes
-rw-r--r--platform/macos/docs/pod-README.md98
-rw-r--r--platform/macos/jazzy.yml118
-rw-r--r--platform/macos/macos.cmake1
-rw-r--r--platform/macos/macos.xcodeproj/project.pbxproj2332
-rw-r--r--platform/macos/macos.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--platform/macos/macos.xcodeproj/xcshareddata/xcschemes/CI.xcscheme154
-rw-r--r--platform/macos/macos.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme111
-rw-r--r--platform/macos/macos.xcodeproj/xcshareddata/xcschemes/macosapp.xcscheme99
-rw-r--r--platform/macos/macos.xcworkspace/contents.xcworkspacedata10
-rw-r--r--platform/macos/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist8
-rw-r--r--platform/macos/macos.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist25
-rwxr-xr-xplatform/macos/scripts/deploy-packages.sh144
-rwxr-xr-xplatform/macos/scripts/document.sh52
-rwxr-xr-xplatform/macos/scripts/metrics.sh7
-rwxr-xr-xplatform/macos/scripts/package.sh130
-rw-r--r--platform/macos/sdk/Base.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/Base.lproj/MGLAnnotationCallout.xib69
-rw-r--r--platform/macos/sdk/Info.plist28
-rw-r--r--platform/macos/sdk/ar.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/bg.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/ca.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/cs.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/da.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/de.lproj/Localizable.strings15
-rw-r--r--platform/macos/sdk/default_marker.pdfbin4354 -> 0 bytes
-rw-r--r--platform/macos/sdk/es.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/fi.lproj/Localizable.strings15
-rw-r--r--platform/macos/sdk/fr.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/gl.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/he.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/hu.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/ja.lproj/Localizable.strings15
-rw-r--r--platform/macos/sdk/lt.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/mapbox.pdfbin26280 -> 0 bytes
-rw-r--r--platform/macos/sdk/mapbox_helmet.pdf355
-rw-r--r--platform/macos/sdk/nl.lproj/Localizable.strings15
-rw-r--r--platform/macos/sdk/pl.lproj/Localizable.strings15
-rw-r--r--platform/macos/sdk/pt-BR.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/pt-PT.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/ru.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/sv.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/uk.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/vi.lproj/Localizable.strings27
-rw-r--r--platform/macos/sdk/zh-Hans.lproj/Localizable.strings15
-rw-r--r--platform/macos/sdk/zh-Hant.lproj/Localizable.strings27
-rw-r--r--platform/macos/src/MGLAnnotationImage.h65
-rw-r--r--platform/macos/src/MGLAnnotationImage.m63
-rw-r--r--platform/macos/src/MGLAnnotationImage_Private.h8
-rw-r--r--platform/macos/src/MGLAttributionButton.h25
-rw-r--r--platform/macos/src/MGLAttributionButton.mm55
-rw-r--r--platform/macos/src/MGLCompassCell.h5
-rw-r--r--platform/macos/src/MGLCompassCell.m34
-rw-r--r--platform/macos/src/MGLMapView+IBAdditions.h68
-rw-r--r--platform/macos/src/MGLMapView+IBAdditions.mm120
-rw-r--r--platform/macos/src/MGLMapView+Impl.h44
-rw-r--r--platform/macos/src/MGLMapView+Impl.mm101
-rw-r--r--platform/macos/src/MGLMapView+OpenGL.h45
-rw-r--r--platform/macos/src/MGLMapView+OpenGL.mm89
-rw-r--r--platform/macos/src/MGLMapView.h1247
-rw-r--r--platform/macos/src/MGLMapView.mm3081
-rw-r--r--platform/macos/src/MGLMapViewDelegate.h352
-rw-r--r--platform/macos/src/MGLMapView_Private.h62
-rw-r--r--platform/macos/src/MGLOpenGLLayer.h10
-rw-r--r--platform/macos/src/MGLOpenGLLayer.mm58
-rw-r--r--platform/macos/src/Mapbox.h71
-rw-r--r--platform/macos/src/NSColor+MGLAdditions.h28
-rw-r--r--platform/macos/src/NSColor+MGLAdditions.mm124
-rw-r--r--platform/macos/src/NSImage+MGLAdditions.h19
-rw-r--r--platform/macos/src/NSImage+MGLAdditions.mm49
-rw-r--r--platform/macos/src/NSProcessInfo+MGLAdditions.h11
-rw-r--r--platform/macos/src/NSProcessInfo+MGLAdditions.m10
-rw-r--r--platform/macos/test/Info.plist24
-rw-r--r--platform/macos/test/MGLAnnotationTests.m52
-rw-r--r--platform/macos/test/MGLAttributionButtonTests.m31
-rw-r--r--platform/macos/test/MGLMapViewDelegateIntegrationTests.swift63
177 files changed, 0 insertions, 17091 deletions
diff --git a/platform/macos/ExportOptions.plist b/platform/macos/ExportOptions.plist
deleted file mode 100644
index 21af10c08a..0000000000
--- a/platform/macos/ExportOptions.plist
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>method</key>
- <string>developer-id</string>
- <key>teamID</key>
- <string>GJZR2MEM28</string>
-</dict>
-</plist>
diff --git a/platform/macos/Mapbox-macOS-SDK-symbols.podspec b/platform/macos/Mapbox-macOS-SDK-symbols.podspec
deleted file mode 100644
index 4d21db99fb..0000000000
--- a/platform/macos/Mapbox-macOS-SDK-symbols.podspec
+++ /dev/null
@@ -1,30 +0,0 @@
-Pod::Spec.new do |m|
-
- version = '0.14.0'
-
- m.name = 'Mapbox-macOS-SDK-symbols'
- m.version = "#{version}-symbols"
-
- m.summary = 'Open-source, interactive, fully customizable vector maps.'
- m.description = 'Interactive, fully customizable vector maps with tight platform integration and high-performance OpenGL rendering.'
- m.homepage = 'https://mapbox.github.io/mapbox-gl-native/macos/'
- m.license = { :type => 'BSD', :file => 'LICENSE.md' }
- m.author = { 'Mapbox' => 'mobile@mapbox.com' }
- m.screenshot = "https://mapbox.github.io/mapbox-gl-native/macos/#{version}/img/screenshot.jpg"
- m.social_media_url = 'https://twitter.com/mapbox'
- m.documentation_url = 'https://mapbox.github.io/mapbox-gl-native/macos/'
-
- m.source = {
- :http => "https://github.com/mapbox/mapbox-gl-native/releases/download/macos-v#{version}/mapbox-macos-sdk-#{m.version.to_s}.zip",
- :flatten => true
- }
-
- m.platform = :osx
- m.osx.deployment_target = '10.11'
-
- m.requires_arc = true
-
- m.vendored_frameworks = 'Mapbox.framework'
- m.module_name = 'Mapbox'
-
-end
diff --git a/platform/macos/Mapbox-macOS-SDK.podspec b/platform/macos/Mapbox-macOS-SDK.podspec
deleted file mode 100644
index 876b354b4f..0000000000
--- a/platform/macos/Mapbox-macOS-SDK.podspec
+++ /dev/null
@@ -1,30 +0,0 @@
-Pod::Spec.new do |m|
-
- version = '0.14.0'
-
- m.name = 'Mapbox-macOS-SDK'
- m.version = version
-
- m.summary = 'Open-source, interactive, fully customizable vector maps.'
- m.description = 'Interactive, fully customizable vector maps with tight platform integration and high-performance OpenGL rendering.'
- m.homepage = 'https://mapbox.github.io/mapbox-gl-native/macos/'
- m.license = { :type => 'BSD', :file => 'LICENSE.md' }
- m.author = { 'Mapbox' => 'mobile@mapbox.com' }
- m.screenshot = "https://mapbox.github.io/mapbox-gl-native/macos/#{version}/img/screenshot.jpg"
- m.social_media_url = 'https://twitter.com/mapbox'
- m.documentation_url = 'https://mapbox.github.io/mapbox-gl-native/macos/'
-
- m.source = {
- :http => "https://github.com/mapbox/mapbox-gl-native/releases/download/macos-v#{version}/mapbox-macos-sdk-#{m.version.to_s}.zip",
- :flatten => true
- }
-
- m.platform = :osx
- m.osx.deployment_target = '10.11'
-
- m.requires_arc = true
-
- m.vendored_frameworks = 'Mapbox.framework'
- m.module_name = 'Mapbox'
-
-end
diff --git a/platform/macos/WorkspaceSettings.xcsettings b/platform/macos/WorkspaceSettings.xcsettings
deleted file mode 100644
index 88a45c15ce..0000000000
--- a/platform/macos/WorkspaceSettings.xcsettings
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>BuildLocationStyle</key>
- <string>CustomLocation</string>
- <key>CustomBuildIntermediatesPath</key>
- <string>../../build/macos</string>
- <key>CustomBuildLocationType</key>
- <string>RelativeToWorkspace</string>
- <key>CustomBuildProductsPath</key>
- <string>../../build/macos</string>
- <key>DerivedDataCustomLocation</key>
- <string>../../build/macos</string>
- <key>DerivedDataLocationStyle</key>
- <string>WorkspaceRelativePath</string>
- <key>IssueFilterStyle</key>
- <string>ShowActiveSchemeOnly</string>
- <key>LiveSourceIssuesEnabled</key>
- <true/>
-</dict>
-</plist>
diff --git a/platform/macos/app/AppDelegate.h b/platform/macos/app/AppDelegate.h
deleted file mode 100644
index 87b7514292..0000000000
--- a/platform/macos/app/AppDelegate.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#import <Mapbox/Mapbox.h>
-
-extern NSString * const MGLMapboxAccessTokenDefaultsKey;
-
-@interface AppDelegate : NSObject <NSApplicationDelegate>
-
-@property (weak) IBOutlet NSWindow *preferencesWindow;
-
-// Normally, an application should respect the “Close windows when quitting an
-// application” setting in the General pane of System Preferences. But the map
-// would only be restored to its last opened location if the user quits the
-// application using Quit and Keep Windows. An application that displays only a
-// map should restore the last viewed map, like Maps.app does. These properties
-// temporarily hold state for the next map window to be opened.
-
-@property (assign) double pendingZoomLevel;
-@property (copy) MGLMapCamera *pendingCamera;
-@property (assign) MGLCoordinateBounds pendingVisibleCoordinateBounds;
-@property (assign) double pendingMinimumZoomLevel;
-@property (assign) double pendingMaximumZoomLevel;
-@property (copy) NSURL *pendingStyleURL;
-@property (assign) MGLMapDebugMaskOptions pendingDebugMask;
-
-- (void)watchOfflinePack:(MGLOfflinePack *)pack;
-
-@end
diff --git a/platform/macos/app/AppDelegate.m b/platform/macos/app/AppDelegate.m
deleted file mode 100644
index eda989d7f9..0000000000
--- a/platform/macos/app/AppDelegate.m
+++ /dev/null
@@ -1,332 +0,0 @@
-#import "AppDelegate.h"
-
-#import "MapDocument.h"
-
-NSString * const MGLMapboxAccessTokenDefaultsKey = @"MGLMapboxAccessToken";
-NSString * const MGLLastMapCameraDefaultsKey = @"MGLLastMapCamera";
-NSString * const MGLLastMapStyleURLDefaultsKey = @"MGLLastMapStyleURL";
-NSString * const MGLLastMapDebugMaskDefaultsKey = @"MGLLastMapDebugMask";
-
-/**
- Some convenience methods to make offline pack properties easier to bind to.
- */
-@implementation MGLOfflinePack (Additions)
-
-+ (NSSet *)keyPathsForValuesAffectingStateImage {
- return [NSSet setWithObjects:@"state", nil];
-}
-
-- (NSImage *)stateImage {
- switch (self.state) {
- case MGLOfflinePackStateComplete:
- return [NSImage imageNamed:@"NSMenuOnStateTemplate"];
-
- case MGLOfflinePackStateActive:
- return [NSImage imageNamed:@"NSFollowLinkFreestandingTemplate"];
-
- default:
- return nil;
- }
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingCountOfResourcesCompleted {
- return [NSSet setWithObjects:@"progress", nil];
-}
-
-- (uint64_t)countOfResourcesCompleted {
- return self.progress.countOfResourcesCompleted;
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingCountOfResourcesExpected {
- return [NSSet setWithObjects:@"progress", nil];
-}
-
-- (uint64_t)countOfResourcesExpected {
- return self.progress.countOfResourcesExpected;
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingCountOfBytesCompleted {
- return [NSSet setWithObjects:@"progress", nil];
-}
-
-- (uint64_t)countOfBytesCompleted {
- return self.progress.countOfBytesCompleted;
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingCountOfTilesCompleted {
- return [NSSet setWithObjects:@"progress", nil];
-}
-
-- (uint64_t)countOfTilesCompleted {
- return self.progress.countOfTilesCompleted;
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingCountOfTileBytesCompleted {
- return [NSSet setWithObjects:@"progress", nil];
-}
-
-- (uint64_t)countOfTileBytesCompleted {
- return self.progress.countOfTileBytesCompleted;
-}
-
-@end
-
-@interface AppDelegate () <NSWindowDelegate>
-
-@property (weak) IBOutlet NSArrayController *offlinePacksArrayController;
-@property (weak) IBOutlet NSPanel *offlinePacksPanel;
-
-@end
-
-@implementation AppDelegate
-
-#pragma mark Lifecycle
-
-+ (void)load {
- // Set access token, unless MGLAccountManager already read it in from Info.plist.
- if (![MGLAccountManager accessToken]) {
- NSString *accessToken = [NSProcessInfo processInfo].environment[@"MAPBOX_ACCESS_TOKEN"];
- if (accessToken) {
- // Store to preferences so that we can launch the app later on without having to specify
- // token.
- [[NSUserDefaults standardUserDefaults] setObject:accessToken forKey:MGLMapboxAccessTokenDefaultsKey];
- } else {
- // Try to retrieve from preferences, maybe we've stored them there previously and can reuse
- // the token.
- accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:MGLMapboxAccessTokenDefaultsKey];
- }
- [MGLAccountManager setAccessToken:accessToken];
- }
-}
-
-- (void)applicationWillFinishLaunching:(NSNotification *)notification {
- [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self
- andSelector:@selector(handleGetURLEvent:withReplyEvent:)
- forEventClass:kInternetEventClass
- andEventID:kAEGetURL];
-
- if (![[NSUserDefaults standardUserDefaults] boolForKey:@"NSQuitAlwaysKeepsWindows"]) {
- NSData *cameraData = [[NSUserDefaults standardUserDefaults] objectForKey:MGLLastMapCameraDefaultsKey];
- if (cameraData) {
- NSKeyedUnarchiver *coder = [[NSKeyedUnarchiver alloc] initForReadingWithData:cameraData];
- self.pendingZoomLevel = -1;
- self.pendingCamera = [[MGLMapCamera alloc] initWithCoder:coder];
- }
- NSString *styleURLString = [[NSUserDefaults standardUserDefaults] objectForKey:MGLLastMapStyleURLDefaultsKey];
- if (styleURLString) {
- self.pendingStyleURL = [NSURL URLWithString:styleURLString];
- }
- self.pendingDebugMask = [[NSUserDefaults standardUserDefaults] integerForKey:MGLLastMapDebugMaskDefaultsKey];
- }
-}
-
-- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
- // Set access token, unless MGLAccountManager already read it in from Info.plist.
- if (![MGLAccountManager accessToken]) {
- NSAlert *alert = [[NSAlert alloc] init];
- alert.messageText = @"Access token required";
- alert.informativeText = @"To load Mapbox-hosted tiles and styles, enter your Mapbox access token in Preferences.";
- [alert addButtonWithTitle:@"Open Preferences"];
- [alert runModal];
- [self showPreferences:nil];
- }
-
- [self.offlinePacksArrayController bind:@"content" toObject:[MGLOfflineStorage sharedOfflineStorage] withKeyPath:@"packs" options:nil];
-}
-
-- (void)applicationWillTerminate:(NSNotification *)notification {
- [[NSNotificationCenter defaultCenter] removeObserver:self name:nil object:nil];
-
- if (![[NSUserDefaults standardUserDefaults] boolForKey:@"NSQuitAlwaysKeepsWindows"]) {
- NSDocument *currentDocument = [NSDocumentController sharedDocumentController].currentDocument;
- if ([currentDocument isKindOfClass:[MapDocument class]]) {
- MGLMapView *mapView = [(MapDocument *)currentDocument mapView];
- NSMutableData *cameraData = [NSMutableData data];
- NSKeyedArchiver *coder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:cameraData];
- [mapView.camera encodeWithCoder:coder];
- [coder finishEncoding];
- [[NSUserDefaults standardUserDefaults] setObject:cameraData forKey:MGLLastMapCameraDefaultsKey];
- [[NSUserDefaults standardUserDefaults] setObject:mapView.styleURL.absoluteString forKey:MGLLastMapStyleURLDefaultsKey];
- [[NSUserDefaults standardUserDefaults] setInteger:mapView.debugMask forKey:MGLLastMapDebugMaskDefaultsKey];
- }
- }
-
- [self.offlinePacksArrayController unbind:@"content"];
-}
-
-#pragma mark Services
-
-- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent {
- // mapboxgl://?center=29.95,-90.066667&zoom=14&bearing=45&pitch=30
- NSURL *url = [NSURL URLWithString:[event paramDescriptorForKeyword:keyDirectObject].stringValue];
- NSMutableDictionary<NSString *, NSString *> *params = [[NSMutableDictionary alloc] init];
- for (NSString *param in [url.query componentsSeparatedByString:@"&"]) {
- NSArray *parts = [param componentsSeparatedByString:@"="];
- if (parts.count >= 2) {
- params[parts[0]] = [parts[1] stringByRemovingPercentEncoding];
- }
- }
-
- MGLMapCamera *camera = [MGLMapCamera camera];
- NSString *zoomLevelString = params[@"zoom"];
- self.pendingZoomLevel = zoomLevelString.length ? zoomLevelString.doubleValue : -1;
-
- NSString *directionString = params[@"bearing"];
- if (directionString.length) {
- camera.heading = directionString.doubleValue;
- }
-
- NSString *centerString = params[@"center"];
- if (centerString) {
- NSArray *coordinateValues = [centerString componentsSeparatedByString:@","];
- if (coordinateValues.count == 2) {
- camera.centerCoordinate = CLLocationCoordinate2DMake([coordinateValues[0] doubleValue],
- [coordinateValues[1] doubleValue]);
- }
- }
-
- NSString *pitchString = params[@"pitch"];
- if (pitchString.length) {
- camera.pitch = pitchString.doubleValue;
- }
-
- self.pendingCamera = camera;
- [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:NULL];
-}
-
-#pragma mark Offline pack management
-
-- (IBAction)showOfflinePacksPanel:(id)sender {
- [self.offlinePacksPanel makeKeyAndOrderFront:sender];
-
- for (MGLOfflinePack *pack in self.offlinePacksArrayController.arrangedObjects) {
- [pack requestProgress];
- }
-}
-
-- (IBAction)delete:(id)sender {
- for (MGLOfflinePack *pack in self.offlinePacksArrayController.selectedObjects) {
- [self unwatchOfflinePack:pack];
- [[MGLOfflineStorage sharedOfflineStorage] removePack:pack withCompletionHandler:^(NSError * _Nullable error) {
- if (error) {
- [[NSAlert alertWithError:error] runModal];
- }
- }];
- }
-}
-
-- (IBAction)chooseOfflinePack:(id)sender {
- for (MGLOfflinePack *pack in self.offlinePacksArrayController.selectedObjects) {
- switch (pack.state) {
- case MGLOfflinePackStateComplete:
- {
- if ([pack.region isKindOfClass:[MGLTilePyramidOfflineRegion class]]) {
- MGLTilePyramidOfflineRegion *region = (MGLTilePyramidOfflineRegion *)pack.region;
- self.pendingVisibleCoordinateBounds = region.bounds;
- self.pendingMinimumZoomLevel = region.minimumZoomLevel;
- self.pendingMaximumZoomLevel = region.maximumZoomLevel;
- [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:NULL];
- }
- break;
- }
-
- case MGLOfflinePackStateInactive:
- [self watchOfflinePack:pack];
- [pack resume];
- break;
-
- case MGLOfflinePackStateActive:
- [pack suspend];
- [self unwatchOfflinePack:pack];
- break;
-
- default:
- break;
- }
- }
-}
-
-- (void)watchOfflinePack:(MGLOfflinePack *)pack {
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(offlinePackDidChangeProgress:) name:MGLOfflinePackProgressChangedNotification object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(offlinePackDidReceiveError:) name:MGLOfflinePackErrorNotification object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(offlinePackDidReceiveError:) name:MGLOfflinePackMaximumMapboxTilesReachedNotification object:nil];
-}
-
-- (void)unwatchOfflinePack:(MGLOfflinePack *)pack {
- [[NSNotificationCenter defaultCenter] removeObserver:self name:nil object:pack];
-}
-
-- (void)offlinePackDidChangeProgress:(NSNotification *)notification {
- MGLOfflinePack *pack = notification.object;
- if (pack.state == MGLOfflinePackStateComplete) {
- [[NSSound soundNamed:@"Glass"] play];
- }
-}
-
-- (void)offlinePackDidReceiveError:(NSNotification *)notification {
- [[NSSound soundNamed:@"Basso"] play];
-}
-
-#pragma mark Help methods
-
-- (IBAction)showShortcuts:(id)sender {
- NSAlert *alert = [[NSAlert alloc] init];
- alert.messageText = @"Mapbox GL Help";
- alert.informativeText = @"\
-• To scroll, swipe with two fingers on a trackpad, or drag the cursor, or press the arrow keys.\n\
-• To zoom in, pinch two fingers apart on a trackpad, or double-click, or hold down Shift while dragging the cursor down, or hold down Option while pressing the up key.\n\
-• To zoom out, pinch two fingers together on a trackpad, or double-tap with two fingers on a trackpad, or double-tap on a mouse, or hold down Shift while dragging the cursor up, or hold down Option while pressing the down key.\n\
-• To rotate, move two fingers opposite each other in a circle on a trackpad, or hold down Option while dragging the cursor left and right, or hold down Option while pressing the left and right arrow keys.\n\
-• To tilt, hold down Option while dragging the cursor up and down.\n\
-• To drop a pin, click and hold.\
-";
- [alert runModal];
-}
-
-- (IBAction)showPreferences:(id)sender {
- [self.preferencesWindow makeKeyAndOrderFront:sender];
-}
-
-- (IBAction)print:(id)sender {
- NSDocument *currentDocument = [NSDocumentController sharedDocumentController].currentDocument;
- if ([currentDocument isKindOfClass:[MapDocument class]]) {
- MGLMapView *mapView = [(MapDocument *)currentDocument mapView];
- [mapView print:sender];
- }
-}
-
-- (IBAction)openAccessTokenManager:(id)sender {
- [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://www.mapbox.com/studio/account/tokens/"]];
-}
-
-#pragma mark User interface validation
-
-- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
- if (menuItem.action == @selector(showShortcuts:)) {
- return YES;
- }
- if (menuItem.action == @selector(showPreferences:)) {
- return YES;
- }
- if (menuItem.action == @selector(showOfflinePacksPanel:)) {
- return YES;
- }
- if (menuItem.action == @selector(print:)) {
- return YES;
- }
- if (menuItem.action == @selector(delete:)) {
- return self.offlinePacksArrayController.selectedObjects.count;
- }
- return NO;
-}
-
-#pragma mark NSWindowDelegate methods
-
-- (void)windowWillClose:(NSNotification *)notification {
- NSWindow *window = notification.object;
- if (window == self.preferencesWindow) {
- [window makeFirstResponder:nil];
- }
-}
-
-@end
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128.png
deleted file mode 100644
index fbf35e5d61..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128@2x.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128@2x.png
deleted file mode 100644
index e60680874a..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128@2x.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16.png
deleted file mode 100644
index 361198da92..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16@2x.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16@2x.png
deleted file mode 100644
index f6bf78a4b4..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16@2x.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256.png
deleted file mode 100644
index e60680874a..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256@2x.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256@2x.png
deleted file mode 100644
index e7c0271490..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256@2x.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32.png
deleted file mode 100644
index e919899269..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32@2x.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32@2x.png
deleted file mode 100644
index 5035f60941..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32@2x.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512.png
deleted file mode 100644
index e7c0271490..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512@2x.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512@2x.png
deleted file mode 100644
index a2e1dfd02b..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512@2x.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/Contents.json b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 068d0fbd00..0000000000
--- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "images" : [
- {
- "size" : "16x16",
- "idiom" : "mac",
- "filename" : "AppIcon16x16.png",
- "scale" : "1x"
- },
- {
- "size" : "16x16",
- "idiom" : "mac",
- "filename" : "AppIcon16x16@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "32x32",
- "idiom" : "mac",
- "filename" : "AppIcon32x32.png",
- "scale" : "1x"
- },
- {
- "size" : "32x32",
- "idiom" : "mac",
- "filename" : "AppIcon32x32@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "128x128",
- "idiom" : "mac",
- "filename" : "AppIcon128x128.png",
- "scale" : "1x"
- },
- {
- "size" : "128x128",
- "idiom" : "mac",
- "filename" : "AppIcon128x128@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "256x256",
- "idiom" : "mac",
- "filename" : "AppIcon256x256.png",
- "scale" : "1x"
- },
- {
- "size" : "256x256",
- "idiom" : "mac",
- "filename" : "AppIcon256x256@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "512x512",
- "idiom" : "mac",
- "filename" : "AppIcon512x512.png",
- "scale" : "1x"
- },
- {
- "size" : "512x512",
- "idiom" : "mac",
- "filename" : "AppIcon512x512@2x.png",
- "scale" : "2x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Contents.json b/platform/macos/app/Assets.xcassets/Contents.json
deleted file mode 100644
index da4a164c91..0000000000
--- a/platform/macos/app/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Layers/Contents.json b/platform/macos/app/Assets.xcassets/Layers/Contents.json
deleted file mode 100644
index da4a164c91..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json
deleted file mode 100644
index dc14d24448..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "background.pdf",
- "language-direction" : "left-to-right"
- },
- {
- "idiom" : "universal",
- "language-direction" : "right-to-left"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- },
- "properties" : {
- "template-rendering-intent" : "template"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf b/platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf
deleted file mode 100644
index 95a50c1446..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf
+++ /dev/null
@@ -1,69 +0,0 @@
-%PDF-1.5
-%
-3 0 obj
-<< /Length 4 0 R
- /Filter /FlateDecode
->>
-stream
-x}Mj@ u
-] *I Hf1x ܋E?Oն ChgՓT>R2}̃7e7=y!^Epp$aC QeQavJ$6r\+6"uTwtȂ܄Cpoz>(@ \Q@Xx^o6f58KP::ۨv:DmEQu/z\';*U 2.޻2Up!ν5D>!PVQNvkhK:WEt1^9du.!Y c:Ox>1`,iDi(1^mc3ʸ`#(vKWt/Ѝ"5I7ag+vܧX1sփ!?8
-endstream
-endobj
-4 0 obj
- 424
-endobj
-2 0 obj
-<<
- /ExtGState <<
- /a0 << /CA 1 /ca 1 >>
- >>
->>
-endobj
-5 0 obj
-<< /Type /Page
- /Parent 1 0 R
- /MediaBox [ 0 0 12.8 12.8 ]
- /Contents 3 0 R
- /Group <<
- /Type /Group
- /S /Transparency
- /I true
- /CS /DeviceRGB
- >>
- /Resources 2 0 R
->>
-endobj
-1 0 obj
-<< /Type /Pages
- /Kids [ 5 0 R ]
- /Count 1
->>
-endobj
-6 0 obj
-<< /Creator (cairo 1.14.0 (http://cairographics.org))
- /Producer (cairo 1.14.0 (http://cairographics.org))
->>
-endobj
-7 0 obj
-<< /Type /Catalog
- /Pages 1 0 R
->>
-endobj
-xref
-0 8
-0000000000 65535 f
-0000000826 00000 n
-0000000538 00000 n
-0000000015 00000 n
-0000000516 00000 n
-0000000610 00000 n
-0000000891 00000 n
-0000001018 00000 n
-trailer
-<< /Size 8
- /Root 7 0 R
- /Info 6 0 R
->>
-startxref
-1070
-%%EOF
diff --git a/platform/macos/app/Assets.xcassets/Layers/circle.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/circle.imageset/Contents.json
deleted file mode 100644
index c924214fd9..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/circle.imageset/Contents.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "circle.pdf"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- },
- "properties" : {
- "template-rendering-intent" : "template"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Layers/circle.imageset/circle.pdf b/platform/macos/app/Assets.xcassets/Layers/circle.imageset/circle.pdf
deleted file mode 100644
index fde79a19bd..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/circle.imageset/circle.pdf
+++ /dev/null
@@ -1,70 +0,0 @@
-%PDF-1.5
-%
-3 0 obj
-<< /Length 4 0 R
- /Filter /FlateDecode
->>
-stream
-x]M
-1 9Ż1?''aRAf1 X)GK ANv_4Nܩ š% 3Z
-cr'QJ2Wp{t\dImW 44J
-endstream
-endobj
-4 0 obj
- 139
-endobj
-2 0 obj
-<<
- /ExtGState <<
- /a0 << /CA 1 /ca 1 >>
- >>
->>
-endobj
-5 0 obj
-<< /Type /Page
- /Parent 1 0 R
- /MediaBox [ 0 0 12.8 12.8 ]
- /Contents 3 0 R
- /Group <<
- /Type /Group
- /S /Transparency
- /I true
- /CS /DeviceRGB
- >>
- /Resources 2 0 R
->>
-endobj
-1 0 obj
-<< /Type /Pages
- /Kids [ 5 0 R ]
- /Count 1
->>
-endobj
-6 0 obj
-<< /Creator (cairo 1.14.0 (http://cairographics.org))
- /Producer (cairo 1.14.0 (http://cairographics.org))
->>
-endobj
-7 0 obj
-<< /Type /Catalog
- /Pages 1 0 R
->>
-endobj
-xref
-0 8
-0000000000 65535 f
-0000000541 00000 n
-0000000253 00000 n
-0000000015 00000 n
-0000000231 00000 n
-0000000325 00000 n
-0000000606 00000 n
-0000000733 00000 n
-trailer
-<< /Size 8
- /Root 7 0 R
- /Info 6 0 R
->>
-startxref
-785
-%%EOF
diff --git a/platform/macos/app/Assets.xcassets/Layers/fill-extrusion.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/fill-extrusion.imageset/Contents.json
deleted file mode 100644
index c4802ebd1a..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/fill-extrusion.imageset/Contents.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "fill-extrusion.pdf"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- },
- "properties" : {
- "template-rendering-intent" : "template"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Layers/fill-extrusion.imageset/fill-extrusion.pdf b/platform/macos/app/Assets.xcassets/Layers/fill-extrusion.imageset/fill-extrusion.pdf
deleted file mode 100644
index 44cc365862..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/fill-extrusion.imageset/fill-extrusion.pdf
+++ /dev/null
@@ -1,72 +0,0 @@
-%PDF-1.5
-%
-3 0 obj
-<< /Length 4 0 R
- /Filter /FlateDecode
->>
-stream
-xN0 }
-0q9y$$#@lB088MɒL:Cm?w?(Ԋ5P&jr _[yQ`9蔅O` L)|8߯yJ
-9>gD`@Suzױ܊%6҄d
-MGs#lpxrzzy@&Ks&yƬaPX? H1 C HfGV.W9gՖiƞ&+xcZO_i&3O&kt\`5–kՖ5;ʅpo!;d_e3uBzI[޴ev]9V& $
-endstream
-endobj
-4 0 obj
- 358
-endobj
-2 0 obj
-<<
- /ExtGState <<
- /a0 << /CA 0.156863 /ca 0.156863 >>
- /a1 << /CA 1 /ca 1 >>
- >>
->>
-endobj
-5 0 obj
-<< /Type /Page
- /Parent 1 0 R
- /MediaBox [ 0 0 12 12 ]
- /Contents 3 0 R
- /Group <<
- /Type /Group
- /S /Transparency
- /I true
- /CS /DeviceRGB
- >>
- /Resources 2 0 R
->>
-endobj
-1 0 obj
-<< /Type /Pages
- /Kids [ 5 0 R ]
- /Count 1
->>
-endobj
-6 0 obj
-<< /Creator (cairo 1.14.8 (http://cairographics.org))
- /Producer (cairo 1.14.8 (http://cairographics.org))
->>
-endobj
-7 0 obj
-<< /Type /Catalog
- /Pages 1 0 R
->>
-endobj
-xref
-0 8
-0000000000 65535 f
-0000000798 00000 n
-0000000472 00000 n
-0000000015 00000 n
-0000000450 00000 n
-0000000586 00000 n
-0000000863 00000 n
-0000000990 00000 n
-trailer
-<< /Size 8
- /Root 7 0 R
- /Info 6 0 R
->>
-startxref
-1042
-%%EOF
diff --git a/platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json
deleted file mode 100644
index ea68330e70..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "fill.pdf"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- },
- "properties" : {
- "template-rendering-intent" : "template"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Layers/fill.imageset/fill.pdf b/platform/macos/app/Assets.xcassets/Layers/fill.imageset/fill.pdf
deleted file mode 100644
index ca7e4cc505..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/fill.imageset/fill.pdf
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/Layers/heatmap.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/heatmap.imageset/Contents.json
deleted file mode 100644
index 0dcb85f12c..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/heatmap.imageset/Contents.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "heatmap.pdf",
- "language-direction" : "left-to-right"
- },
- {
- "idiom" : "universal",
- "language-direction" : "right-to-left"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- },
- "properties" : {
- "template-rendering-intent" : "template"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Layers/heatmap.imageset/heatmap.pdf b/platform/macos/app/Assets.xcassets/Layers/heatmap.imageset/heatmap.pdf
deleted file mode 100644
index 88195c3735..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/heatmap.imageset/heatmap.pdf
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/Contents.json
deleted file mode 100644
index d4de2d3228..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/Contents.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "hillshade.pdf",
- "language-direction" : "left-to-right"
- },
- {
- "idiom" : "universal",
- "language-direction" : "right-to-left"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- },
- "properties" : {
- "template-rendering-intent" : "template"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/hillshade.pdf b/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/hillshade.pdf
deleted file mode 100644
index bf409e708c..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/hillshade.pdf
+++ /dev/null
@@ -1,70 +0,0 @@
-%PDF-1.5
-%
-3 0 obj
-<< /Length 4 0 R
- /Filter /FlateDecode
->>
-stream
-xeNA
-@ sv} xŃ(Vo"L0# jXˆ6w:!,P㒒hK灴a U18|= _?ݜ{YXS2یݮ*5/ﺠ>ݪ,
-endstream
-endobj
-4 0 obj
- 145
-endobj
-2 0 obj
-<<
- /ExtGState <<
- /a0 << /CA 1 /ca 1 >>
- /a1 << /CA 0.156863 /ca 0.156863 >>
- >>
->>
-endobj
-5 0 obj
-<< /Type /Page
- /Parent 1 0 R
- /MediaBox [ 0 0 12 12 ]
- /Contents 3 0 R
- /Group <<
- /Type /Group
- /S /Transparency
- /I true
- /CS /DeviceRGB
- >>
- /Resources 2 0 R
->>
-endobj
-1 0 obj
-<< /Type /Pages
- /Kids [ 5 0 R ]
- /Count 1
->>
-endobj
-6 0 obj
-<< /Creator (cairo 1.14.8 (http://cairographics.org))
- /Producer (cairo 1.14.8 (http://cairographics.org))
->>
-endobj
-7 0 obj
-<< /Type /Catalog
- /Pages 1 0 R
->>
-endobj
-xref
-0 8
-0000000000 65535 f
-0000000585 00000 n
-0000000259 00000 n
-0000000015 00000 n
-0000000237 00000 n
-0000000373 00000 n
-0000000650 00000 n
-0000000777 00000 n
-trailer
-<< /Size 8
- /Root 7 0 R
- /Info 6 0 R
->>
-startxref
-829
-%%EOF
diff --git a/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/Contents.json
deleted file mode 100644
index ad4293958f..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/Contents.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "symbol.pdf"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- },
- "properties" : {
- "template-rendering-intent" : "template"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/symbol.pdf b/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/symbol.pdf
deleted file mode 100644
index ce4aaa198e..0000000000
--- a/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/symbol.pdf
+++ /dev/null
@@ -1,71 +0,0 @@
-%PDF-1.5
-%
-3 0 obj
-<< /Length 4 0 R
- /Filter /FlateDecode
->>
-stream
-x]A
-@ E9ſqIgR\EqqQ !'
-ua{ HXRLQ&~'/p#!ʎ26a0scR_CYr씪KFʖ9O׋.pN- yV
-yOh4
-endstream
-endobj
-4 0 obj
- 152
-endobj
-2 0 obj
-<<
- /ExtGState <<
- /a0 << /CA 1 /ca 1 >>
- >>
->>
-endobj
-5 0 obj
-<< /Type /Page
- /Parent 1 0 R
- /MediaBox [ 0 0 12.8 12.8 ]
- /Contents 3 0 R
- /Group <<
- /Type /Group
- /S /Transparency
- /I true
- /CS /DeviceRGB
- >>
- /Resources 2 0 R
->>
-endobj
-1 0 obj
-<< /Type /Pages
- /Kids [ 5 0 R ]
- /Count 1
->>
-endobj
-6 0 obj
-<< /Creator (cairo 1.14.0 (http://cairographics.org))
- /Producer (cairo 1.14.0 (http://cairographics.org))
->>
-endobj
-7 0 obj
-<< /Type /Catalog
- /Pages 1 0 R
->>
-endobj
-xref
-0 8
-0000000000 65535 f
-0000000554 00000 n
-0000000266 00000 n
-0000000015 00000 n
-0000000244 00000 n
-0000000338 00000 n
-0000000619 00000 n
-0000000746 00000 n
-trailer
-<< /Size 8
- /Root 7 0 R
- /Info 6 0 R
->>
-startxref
-798
-%%EOF
diff --git a/platform/macos/app/Assets.xcassets/Radar/Contents.json b/platform/macos/app/Assets.xcassets/Radar/Contents.json
deleted file mode 100644
index da4a164c91..0000000000
--- a/platform/macos/app/Assets.xcassets/Radar/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/Contents.json
deleted file mode 100644
index ea096b04b8..0000000000
--- a/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "southeast_radar_0.png",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/southeast_radar_0.png b/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/southeast_radar_0.png
deleted file mode 100644
index c304b619c4..0000000000
--- a/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/southeast_radar_0.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/Contents.json
deleted file mode 100644
index a6a031ae2b..0000000000
--- a/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "southeast_radar_1.png",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/southeast_radar_1.png b/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/southeast_radar_1.png
deleted file mode 100644
index ed09fffbe1..0000000000
--- a/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/southeast_radar_1.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_2.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Radar/southeast_2.imageset/Contents.json
deleted file mode 100644
index d607dda298..0000000000
--- a/platform/macos/app/Assets.xcassets/Radar/southeast_2.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "southeast_radar_2.png",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_2.imageset/southeast_radar_2.png b/platform/macos/app/Assets.xcassets/Radar/southeast_2.imageset/southeast_radar_2.png
deleted file mode 100644
index fee630f863..0000000000
--- a/platform/macos/app/Assets.xcassets/Radar/southeast_2.imageset/southeast_radar_2.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/Contents.json
deleted file mode 100644
index 9a110068a1..0000000000
--- a/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "southeast_radar_3.png",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-} \ No newline at end of file
diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/southeast_radar_3.png b/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/southeast_radar_3.png
deleted file mode 100644
index c4c7146afa..0000000000
--- a/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/southeast_radar_3.png
+++ /dev/null
Binary files differ
diff --git a/platform/macos/app/Base.lproj/Localizable.strings b/platform/macos/app/Base.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/Base.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/Base.lproj/MainMenu.xib b/platform/macos/app/Base.lproj/MainMenu.xib
deleted file mode 100644
index 6f8f24ce99..0000000000
--- a/platform/macos/app/Base.lproj/MainMenu.xib
+++ /dev/null
@@ -1,982 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14269.14" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
- <dependencies>
- <deployment identifier="macosx"/>
- <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14269.14"/>
- <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
- </dependencies>
- <objects>
- <customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
- <connections>
- <outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
- </connections>
- </customObject>
- <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
- <customObject id="-3" userLabel="Application" customClass="NSObject">
- <connections>
- <outlet property="delegate" destination="Voe-Tx-rLC" id="z9N-Fm-MUP"/>
- </connections>
- </customObject>
- <customObject id="Voe-Tx-rLC" customClass="AppDelegate">
- <connections>
- <outlet property="offlinePacksArrayController" destination="dWe-R6-sRz" id="Ar5-xu-ABm"/>
- <outlet property="offlinePacksPanel" destination="Jjv-gs-Tx6" id="0vK-rR-3ZX"/>
- <outlet property="preferencesWindow" destination="UWc-yQ-qda" id="Ota-aT-Mz2"/>
- </connections>
- </customObject>
- <menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
- <items>
- <menuItem title="Mapbox GL" id="1Xt-HY-uBw">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Mapbox GL" systemMenu="apple" id="uQy-DD-JDr">
- <items>
- <menuItem title="About Mapbox GL" id="5kV-Vb-QxS">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
- <menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW">
- <connections>
- <action selector="showPreferences:" target="-1" id="Llx-Uy-HTS"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
- <menuItem title="Services" id="NMo-om-nkz">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
- <menuItem title="Hide Mapbox GL" keyEquivalent="h" id="Olw-nP-bQN">
- <connections>
- <action selector="hide:" target="-1" id="PnN-Uc-m68"/>
- </connections>
- </menuItem>
- <menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
- <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
- <connections>
- <action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
- </connections>
- </menuItem>
- <menuItem title="Show All" id="Kd2-mp-pUS">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
- <menuItem title="Quit Mapbox GL" keyEquivalent="q" id="4sb-4s-VLi">
- <connections>
- <action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem title="File" id="dMs-cI-mzQ">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="File" id="bib-Uj-vzu">
- <items>
- <menuItem title="New" keyEquivalent="n" id="Was-JA-tGl">
- <connections>
- <action selector="newDocument:" target="-1" id="4Si-XN-c54"/>
- </connections>
- </menuItem>
- <menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
- <connections>
- <action selector="openDocument:" target="-1" id="bVn-NM-KNZ"/>
- </connections>
- </menuItem>
- <menuItem title="Open Recent" id="tXI-mr-wws">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="oas-Oc-fiZ">
- <items>
- <menuItem title="Clear Menu" id="vNY-rz-j42">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="clearRecentDocuments:" target="-1" id="Daa-9d-B3U"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="m54-Is-iLE"/>
- <menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG">
- <connections>
- <action selector="performClose:" target="-1" id="HmO-Ls-i7Q"/>
- </connections>
- </menuItem>
- <menuItem title="Save…" keyEquivalent="s" id="pxx-59-PXV">
- <connections>
- <action selector="saveDocument:" target="-1" id="teZ-XB-qJY"/>
- </connections>
- </menuItem>
- <menuItem title="Save As…" keyEquivalent="S" id="Bw7-FT-i3A">
- <connections>
- <action selector="saveDocumentAs:" target="-1" id="mDf-zr-I0C"/>
- </connections>
- </menuItem>
- <menuItem title="Save Offline Pack…" id="UXB-sj-C7i">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="addOfflinePack:" target="-1" id="Usu-xO-QEx"/>
- </connections>
- </menuItem>
- <menuItem title="Revert to Saved" id="KaW-ft-85H">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="revertDocumentToSaved:" target="-1" id="iJ3-Pv-kwq"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="VwR-Dd-ah9"/>
- <menuItem title="Import…" id="DJk-k8-14Y">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="import:" target="-1" id="1Qm-l8-9Rn"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="w4w-CJ-fv2"/>
- <menuItem title="Export Image…" id="vjX-0E-kLO">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="takeSnapshot:" target="-1" id="H06-sU-n4U"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
- <menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK">
- <connections>
- <action selector="runPageLayout:" target="-1" id="Din-rz-gC5"/>
- </connections>
- </menuItem>
- <menuItem title="Print…" keyEquivalent="p" id="aTl-1u-JFS">
- <connections>
- <action selector="print:" target="Voe-Tx-rLC" id="rXg-Pd-AG8"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem title="Edit" id="5QF-Oa-p0T">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Edit" id="W48-6f-4Dl">
- <items>
- <menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
- <connections>
- <action selector="undo:" target="-1" id="M6e-cu-g7V"/>
- </connections>
- </menuItem>
- <menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
- <connections>
- <action selector="redo:" target="-1" id="oIA-Rs-6OD"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
- <menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
- <connections>
- <action selector="cut:" target="-1" id="YJe-68-I9s"/>
- </connections>
- </menuItem>
- <menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
- <connections>
- <action selector="copy:" target="-1" id="G1f-GL-Joy"/>
- </connections>
- </menuItem>
- <menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
- <connections>
- <action selector="paste:" target="-1" id="UvS-8e-Qdg"/>
- </connections>
- </menuItem>
- <menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
- <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
- <connections>
- <action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/>
- </connections>
- </menuItem>
- <menuItem title="Delete" id="pa3-QI-u2k">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
- </connections>
- </menuItem>
- <menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
- <connections>
- <action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
- <menuItem title="Find" id="4EN-yA-p0u">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Find" id="1b7-l0-nxx">
- <items>
- <menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
- <connections>
- <action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
- </connections>
- </menuItem>
- <menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
- <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
- <connections>
- <action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
- </connections>
- </menuItem>
- <menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
- <connections>
- <action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
- </connections>
- </menuItem>
- <menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
- <connections>
- <action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
- </connections>
- </menuItem>
- <menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
- <connections>
- <action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
- </connections>
- </menuItem>
- <menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
- <connections>
- <action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
- <items>
- <menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
- <connections>
- <action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
- </connections>
- </menuItem>
- <menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
- <connections>
- <action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
- <menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
- </connections>
- </menuItem>
- <menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
- </connections>
- </menuItem>
- <menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem title="Substitutions" id="9ic-FL-obx">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
- <items>
- <menuItem title="Show Substitutions" id="z6F-FW-3nz">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
- <menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
- </connections>
- </menuItem>
- <menuItem title="Smart Quotes" id="hQb-2v-fYv">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
- </connections>
- </menuItem>
- <menuItem title="Smart Dashes" id="rgM-f4-ycn">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
- </connections>
- </menuItem>
- <menuItem title="Smart Links" id="cwL-P1-jid">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
- </connections>
- </menuItem>
- <menuItem title="Data Detectors" id="tRr-pd-1PS">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
- </connections>
- </menuItem>
- <menuItem title="Text Replacement" id="HFQ-gK-NFA">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem title="Transformations" id="2oI-Rn-ZJC">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Transformations" id="c8a-y6-VQd">
- <items>
- <menuItem title="Make Upper Case" id="vmV-6d-7jI">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
- </connections>
- </menuItem>
- <menuItem title="Make Lower Case" id="d9M-CD-aMd">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
- </connections>
- </menuItem>
- <menuItem title="Capitalize" id="UEZ-Bs-lqG">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem title="Speech" id="xrE-MZ-jX0">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Speech" id="3rS-ZA-NoH">
- <items>
- <menuItem title="Start Speaking" id="Ynk-f8-cLZ">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
- </connections>
- </menuItem>
- <menuItem title="Stop Speaking" id="Oyz-dy-DGm">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem title="View" id="H8h-7b-M4v">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="View" id="HyV-fh-RgO">
- <items>
- <menuItem title="Streets" state="on" tag="1" keyEquivalent="1" id="17N-yz-NNo">
- <connections>
- <action selector="showStyle:" target="-1" id="BGu-va-ftr"/>
- </connections>
- </menuItem>
- <menuItem title="Outdoors" tag="2" keyEquivalent="2" id="BBa-Qa-SQr">
- <connections>
- <action selector="showStyle:" target="-1" id="sQ3-b6-G1A"/>
- </connections>
- </menuItem>
- <menuItem title="Light" tag="3" keyEquivalent="3" id="HWe-7u-UVJ">
- <connections>
- <action selector="showStyle:" target="-1" id="jMN-oR-sbZ"/>
- </connections>
- </menuItem>
- <menuItem title="Dark" tag="4" keyEquivalent="4" id="6HI-q6-AeV">
- <connections>
- <action selector="showStyle:" target="-1" id="xgf-Sq-eJw"/>
- </connections>
- </menuItem>
- <menuItem title="Satellite" tag="5" keyEquivalent="5" id="h0J-5X-kgF">
- <connections>
- <action selector="showStyle:" target="-1" id="YyE-2C-Vhj"/>
- </connections>
- </menuItem>
- <menuItem title="Satellite Streets" tag="6" keyEquivalent="6" id="9BL-00-HFt">
- <connections>
- <action selector="showStyle:" target="-1" id="NTT-Y1-EqU"/>
- </connections>
- </menuItem>
- <menuItem title="Custom Style…" id="L0h-86-2cU">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="chooseCustomStyle:" target="-1" id="QJF-fM-Ty3"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="BMF-ml-0Bd"/>
- <menuItem title="Zoom In" keyEquivalent="+" id="W82-WO-xvB">
- <connections>
- <action selector="zoomIn:" target="-1" id="g33-vK-zUu"/>
- </connections>
- </menuItem>
- <menuItem title="Zoom Out" keyEquivalent="-" id="j7h-PY-edM">
- <connections>
- <action selector="zoomOut:" target="-1" id="0pP-tO-9ex"/>
- </connections>
- </menuItem>
- <menuItem title="Snap to North" keyEquivalent="" id="Zss-3w-wkz">
- <connections>
- <action selector="snapToNorth:" target="-1" id="Ayq-GE-Lb5"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="mkP-YN-G0w"/>
- <menuItem title="Reload" keyEquivalent="r" id="JvI-nv-KaE">
- <connections>
- <action selector="reload:" target="-1" id="xkh-9F-mOe"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="CyM-Wv-Bnc"/>
- <menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5">
- <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
- <connections>
- <action selector="toggleToolbarShown:" target="-1" id="BXY-wc-z0C"/>
- </connections>
- </menuItem>
- <menuItem title="Show Layers" keyEquivalent="L" id="qtg-l9-BH3">
- <connections>
- <action selector="toggleLayers:" target="-1" id="YdA-Mr-MHi"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="8aO-Nm-fxF"/>
- <menuItem title="Labels In" id="M7v-B1-vo3">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Labels In" id="gOc-5u-4v5">
- <items>
- <menuItem title="Local Language" id="hTL-wF-DEs">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="setLabelLanguage:" target="-1" id="Zc4-TL-Cxe"/>
- </connections>
- </menuItem>
- <menuItem title="Preferred Language" tag="1" id="PkP-Ne-ISX">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="setLabelLanguage:" target="-1" id="7Io-iF-xf8"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="qTh-Hu-dGV"/>
- </items>
- </menu>
- </menuItem>
- <menuItem title="Debug" id="ZNC-5r-eBw">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Debug" id="McE-ka-r79">
- <items>
- <menuItem title="Show Tile Boundaries" keyEquivalent="b" id="rDE-dG-rTR">
- <connections>
- <action selector="toggleTileBoundaries:" target="-1" id="LAO-88-F7h"/>
- </connections>
- </menuItem>
- <menuItem title="Show Tile Info" keyEquivalent="i" id="LoH-qD-kb0">
- <connections>
- <action selector="toggleTileInfo:" target="-1" id="KCn-0G-V87"/>
- </connections>
- </menuItem>
- <menuItem title="Show Tile Timestamps" keyEquivalent="t" id="bY0-2E-LZ7">
- <connections>
- <action selector="toggleTileTimestamps:" target="-1" id="tBs-2N-KEG"/>
- </connections>
- </menuItem>
- <menuItem title="Show Collision Boxes" keyEquivalent="C" id="Y0b-3K-mJE">
- <connections>
- <action selector="toggleCollisionBoxes:" target="-1" id="EYa-7n-iWZ"/>
- </connections>
- </menuItem>
- <menuItem title="Show Overdraw Visualization" keyEquivalent="O" id="hSX-Be-8xC">
- <connections>
- <action selector="toggleOverdrawVisualization:" target="-1" id="usj-ug-upt"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="2EG-Hp-4FA"/>
- <menuItem title="Color Buffer" keyEquivalent="c" id="Eao-WE-BWz">
- <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
- <connections>
- <action selector="showColorBuffer:" target="-1" id="Nuq-Qs-98g"/>
- </connections>
- </menuItem>
- <menuItem title="Stencil Buffer" keyEquivalent="s" id="LlS-Yh-RkN">
- <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
- <connections>
- <action selector="showStencilBuffer:" target="-1" id="WkN-t9-Mpv"/>
- </connections>
- </menuItem>
- <menuItem title="Depth Buffer" keyEquivalent="d" id="CDq-70-oPa">
- <modifierMask key="keyEquivalentModifierMask" control="YES" option="YES" command="YES"/>
- <connections>
- <action selector="showDepthBuffer:" target="-1" id="h7r-eM-ZEu"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="dYw-bb-tr1"/>
- <menuItem title="Show Tooltips on Dropped Pins" id="uir-Rx-zmw">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleShowsToolTipsOnDroppedPins:" target="-1" id="1YC-Co-QQ6"/>
- </connections>
- </menuItem>
- <menuItem title="Use Random Cursors for Dropped Pins" id="ZTk-lc-Jgu">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleRandomizesCursorsOnDroppedPins:" target="-1" id="Mpw-b8-oub"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="Sl5-nE-kHd"/>
- <menuItem title="Blanket Map With Pins" keyEquivalent="." id="LMZ-oe-Ngh">
- <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
- <connections>
- <action selector="dropManyPins:" target="-1" id="Rtv-8N-3Z8"/>
- </connections>
- </menuItem>
- <menuItem title="Add Polygon and Polyline" keyEquivalent="l" id="DVr-vT-lpe">
- <connections>
- <action selector="drawPolygonAndPolyLineAnnotations:" target="-1" id="EhT-CB-gee"/>
- </connections>
- </menuItem>
- <menuItem title="Add Animated Annotation" id="Etf-JN-Aoc">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="drawAnimatedAnnotation:" target="-1" id="CYM-WB-s97"/>
- </connections>
- </menuItem>
- <menuItem title="Select an Offscreen Point Annotation" id="Xy2-Cc-RUB">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="selectOffscreenPointAnnotation:" target="-1" id="Fhm-l3-G6h"/>
- </connections>
- </menuItem>
- <menuItem title="Show All Annotations" keyEquivalent="A" id="yMj-uM-8SN">
- <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
- <connections>
- <action selector="showAllAnnotations:" target="-1" id="ahr-OR-Em2"/>
- </connections>
- </menuItem>
- <menuItem title="Remove All Annotations" id="6rC-68-vk0">
- <string key="keyEquivalent" base64-UTF8="YES">
-CA
-</string>
- <connections>
- <action selector="removeAllAnnotations:" target="-1" id="6v3-0E-LsR"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="cbI-Nd-MAp"/>
- <menuItem title="Add Lime Green Layer" id="UWY-vl-t2m">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="insertCustomStyleLayer:" target="-1" id="LE5-lz-kx3"/>
- </connections>
- </menuItem>
- <menuItem title="Add Animated Image Source" id="tjA-fT-GbA">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="addAnimatedImageSource:" target="-1" id="TuN-Pa-hTG"/>
- </connections>
- </menuItem>
- <menuItem title="Add Graticule" id="Msk-p2-Lwt">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="insertGraticuleLayer:" target="-1" id="LE5-lz-kx4"/>
- </connections>
- </menuItem>
- <menuItem title="Enhance Terrain" id="2ZT-uE-kUR">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="enhanceTerrain:" target="-1" id="TXX-Yv-ZY1"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="wQq-Mx-QY0"/>
- <menuItem title="Manipulate Style" id="Zli-T5-cTQ">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="manipulateStyle:" target="-1" id="9Np-3n-FXK"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="vMh-WE-Frt"/>
- <menuItem title="Start World Tour" id="VFo-Jh-2sw">
- <modifierMask key="keyEquivalentModifierMask" option="YES"/>
- <connections>
- <action selector="startWorldTour:" target="-1" id="66Y-Gm-Yn1"/>
- </connections>
- </menuItem>
- <menuItem title="Stop World Tour" id="Pa8-qU-xfr">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="stopWorldTour:" target="-1" id="aq0-7t-AGi"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem title="Window" id="aUF-d1-5bR">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
- <items>
- <menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
- <connections>
- <action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
- </connections>
- </menuItem>
- <menuItem title="Zoom" keyEquivalent="z" id="R4o-n2-Eq4">
- <modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
- <connections>
- <action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="Uix-g7-fAt"/>
- <menuItem title="Offline Packs" id="YW3-jR-knj">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="showOfflinePacksPanel:" target="Voe-Tx-rLC" id="kj9-ht-KmF"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
- <menuItem title="Bring All to Front" id="LE2-aR-0XJ">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- <menuItem title="Help" id="wpr-3q-Mcd">
- <modifierMask key="keyEquivalentModifierMask"/>
- <menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
- <items>
- <menuItem title="Mapbox GL Help" keyEquivalent="?" id="FKE-Sm-Kum">
- <connections>
- <action selector="showShortcuts:" target="-1" id="hNZ-sm-X2q"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="EpY-wQ-SjH"/>
- <menuItem title="Improve This Map" id="xu5-WN-qYK">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="giveFeedback:" target="-1" id="cil-i9-r39"/>
- </connections>
- </menuItem>
- </items>
- </menu>
- </menuItem>
- </items>
- </menu>
- <window title="Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="Preferences" animationBehavior="default" id="UWc-yQ-qda">
- <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
- <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
- <rect key="contentRect" x="109" y="131" width="350" height="84"/>
- <rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
- <view key="contentView" id="eA4-n3-qPe">
- <rect key="frame" x="0.0" y="0.0" width="350" height="84"/>
- <autoresizingMask key="autoresizingMask"/>
- <subviews>
- <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="0IK-AW-Gg3">
- <rect key="frame" x="18" y="45" width="89" height="17"/>
- <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Access token:" id="Ptd-FI-M5A">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <connections>
- <accessibilityConnection property="link" destination="7sb-sf-oJU" id="U0t-jC-oQ7"/>
- </connections>
- </textField>
- <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7sb-sf-oJU">
- <rect key="frame" x="113" y="42" width="197" height="22"/>
- <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="jlV-TC-NUv">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <connections>
- <binding destination="45S-yT-WUN" name="value" keyPath="values.MGLMapboxAccessToken" id="iJE-S2-ALY"/>
- </connections>
- </textField>
- <button translatesAutoresizingMaskIntoConstraints="NO" id="c3S-LC-PoX">
- <rect key="frame" x="318" y="47" width="12" height="12"/>
- <constraints>
- <constraint firstAttribute="width" constant="12" id="M3J-pU-gKn"/>
- </constraints>
- <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSFollowLinkFreestandingTemplate" imagePosition="only" alignment="center" controlSize="small" imageScaling="proportionallyUpOrDown" inset="2" id="38x-37-Ay0">
- <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
- <font key="font" metaFont="smallSystem"/>
- </buttonCell>
- <connections>
- <action selector="openAccessTokenManager:" target="-1" id="1LX-4G-roC"/>
- </connections>
- </button>
- <button translatesAutoresizingMaskIntoConstraints="NO" id="7IZ-zl-iT1">
- <rect key="frame" x="18" y="18" width="109" height="18"/>
- <buttonCell key="cell" type="check" title="Scroll to zoom" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="hVR-66-JSh">
- <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
- <font key="font" metaFont="system"/>
- </buttonCell>
- <connections>
- <binding destination="45S-yT-WUN" name="value" keyPath="values.MGLScrollWheelZoomsMapView" id="2AZ-bk-DM5"/>
- </connections>
- </button>
- </subviews>
- <constraints>
- <constraint firstAttribute="trailing" secondItem="c3S-LC-PoX" secondAttribute="trailing" constant="20" symbolic="YES" id="7QU-Jd-Rg6"/>
- <constraint firstItem="c3S-LC-PoX" firstAttribute="top" secondItem="eA4-n3-qPe" secondAttribute="top" constant="25" id="JOS-HU-27c"/>
- <constraint firstItem="7sb-sf-oJU" firstAttribute="leading" secondItem="0IK-AW-Gg3" secondAttribute="trailing" constant="8" symbolic="YES" id="SS6-VQ-sLK"/>
- <constraint firstItem="0IK-AW-Gg3" firstAttribute="leading" secondItem="eA4-n3-qPe" secondAttribute="leading" constant="20" symbolic="YES" id="TYG-io-qfV"/>
- <constraint firstItem="7sb-sf-oJU" firstAttribute="top" secondItem="eA4-n3-qPe" secondAttribute="top" constant="20" symbolic="YES" id="Vzb-q8-ecP"/>
- <constraint firstItem="7IZ-zl-iT1" firstAttribute="leading" secondItem="0IK-AW-Gg3" secondAttribute="leading" id="aIY-WX-AW9"/>
- <constraint firstItem="7IZ-zl-iT1" firstAttribute="top" secondItem="7sb-sf-oJU" secondAttribute="bottom" constant="8" symbolic="YES" id="ide-24-GqL"/>
- <constraint firstItem="c3S-LC-PoX" firstAttribute="leading" secondItem="7sb-sf-oJU" secondAttribute="trailing" constant="8" symbolic="YES" id="pjl-9u-IgM"/>
- <constraint firstItem="7sb-sf-oJU" firstAttribute="baseline" secondItem="0IK-AW-Gg3" secondAttribute="baseline" id="qIY-Jr-9Ws"/>
- <constraint firstAttribute="bottom" secondItem="7IZ-zl-iT1" secondAttribute="bottom" constant="20" symbolic="YES" id="wng-pn-VIz"/>
- <constraint firstItem="7sb-sf-oJU" firstAttribute="centerY" secondItem="c3S-LC-PoX" secondAttribute="centerY" id="zej-gw-fC0"/>
- </constraints>
- </view>
- <connections>
- <outlet property="delegate" destination="Voe-Tx-rLC" id="PNO-Pp-jOX"/>
- <outlet property="initialFirstResponder" destination="7sb-sf-oJU" id="UZe-di-dnA"/>
- </connections>
- <point key="canvasLocation" x="754" y="221"/>
- </window>
- <userDefaultsController representsSharedInstance="YES" id="45S-yT-WUN"/>
- <window title="Offline Packs" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="MBXOfflinePacksPanel" animationBehavior="default" id="Jjv-gs-Tx6" customClass="NSPanel">
- <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" utility="YES"/>
- <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
- <rect key="contentRect" x="830" y="430" width="400" height="300"/>
- <rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
- <view key="contentView" id="8ha-hw-zOD">
- <rect key="frame" x="0.0" y="0.0" width="400" height="300"/>
- <autoresizingMask key="autoresizingMask"/>
- <subviews>
- <scrollView autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q8b-0e-dLv">
- <rect key="frame" x="-1" y="20" width="402" height="281"/>
- <clipView key="contentView" id="J9U-Yx-o2S">
- <rect key="frame" x="1" y="0.0" width="400" height="265"/>
- <autoresizingMask key="autoresizingMask"/>
- <subviews>
- <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" autosaveColumns="NO" headerView="MAZ-Iq-hBi" id="Ato-Vu-HYT">
- <rect key="frame" x="0.0" y="0.0" width="423" height="242"/>
- <autoresizingMask key="autoresizingMask"/>
- <size key="intercellSpacing" width="3" height="2"/>
- <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
- <color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
- <tableColumns>
- <tableColumn editable="NO" width="16" minWidth="10" maxWidth="3.4028234663852886e+38" id="xtw-hQ-8C5" userLabel="State">
- <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
- </tableHeaderCell>
- <imageCell key="dataCell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="edU-Yw-20f"/>
- <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
- <connections>
- <binding destination="dWe-R6-sRz" name="value" keyPath="arrangedObjects.stateImage" id="2wd-1J-TZt"/>
- </connections>
- </tableColumn>
- <tableColumn editable="NO" width="116" minWidth="40" maxWidth="1000" id="2hD-LN-h0L">
- <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Name">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
- </tableHeaderCell>
- <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="oys-QZ-34I">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
- <connections>
- <binding destination="dWe-R6-sRz" name="value" keyPath="arrangedObjects.context" id="NtD-s5-ZUq">
- <dictionary key="options">
- <string key="NSValueTransformerName">OfflinePackNameValueTransformer</string>
- </dictionary>
- </binding>
- </connections>
- </tableColumn>
- <tableColumn editable="NO" width="50" minWidth="40" maxWidth="1000" id="pkI-c7-xoD">
- <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Downloaded Resources">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
- </tableHeaderCell>
- <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="WfC-qb-HsW">
- <numberFormatter key="formatter" formatterBehavior="default10_4" numberStyle="decimal" minimumIntegerDigits="1" maximumIntegerDigits="2000000000" id="sNm-Qn-ne6"/>
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
- <connections>
- <binding destination="dWe-R6-sRz" name="value" keyPath="arrangedObjects.countOfResourcesCompleted" id="mu6-Jg-GiU"/>
- </connections>
- </tableColumn>
- <tableColumn editable="NO" width="50" minWidth="10" maxWidth="3.4028234663852886e+38" id="Rrd-A9-jqc">
- <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Total Resources">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
- </tableHeaderCell>
- <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="mHy-qJ-rOA">
- <numberFormatter key="formatter" formatterBehavior="default10_4" numberStyle="decimal" minimumIntegerDigits="1" maximumIntegerDigits="2000000000" id="kyx-ZP-OBH"/>
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
- <connections>
- <binding destination="dWe-R6-sRz" name="value" keyPath="arrangedObjects.countOfResourcesExpected" id="mh2-k0-vvB"/>
- </connections>
- </tableColumn>
- <tableColumn editable="NO" width="50" minWidth="40" maxWidth="1000" id="kCO-Cd-bQt">
- <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Downloaded Tiles">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
- </tableHeaderCell>
- <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="hUl-2C-sHr">
- <numberFormatter key="formatter" formatterBehavior="default10_4" numberStyle="decimal" minimumIntegerDigits="1" maximumIntegerDigits="2000000000" id="KjY-J1-gSm"/>
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
- <connections>
- <binding destination="dWe-R6-sRz" name="value" keyPath="arrangedObjects.countOfTilesCompleted" id="XHn-D7-zqf">
- <dictionary key="options">
- <bool key="NSConditionallySetsEditable" value="YES"/>
- </dictionary>
- </binding>
- </connections>
- </tableColumn>
- <tableColumn editable="NO" width="60" minWidth="10" maxWidth="3.4028234663852886e+38" id="WO5-Ci-HgG">
- <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Downloaded Tiles Size">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
- </tableHeaderCell>
- <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="cKy-kF-5Pv">
- <byteCountFormatter key="formatter" allowsNonnumericFormatting="NO" includesActualByteCount="YES" id="bHS-Ch-aXU"/>
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
- <connections>
- <binding destination="dWe-R6-sRz" name="value" keyPath="arrangedObjects.countOfTileBytesCompleted" id="Xpk-BZ-Xcr">
- <dictionary key="options">
- <bool key="NSConditionallySetsEditable" value="YES"/>
- </dictionary>
- </binding>
- </connections>
- </tableColumn>
- <tableColumn editable="NO" width="60" minWidth="10" maxWidth="3.4028234663852886e+38" id="h7m-6l-KaS">
- <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Downloaded Resources Size">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
- </tableHeaderCell>
- <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="701-bg-k6L">
- <byteCountFormatter key="formatter" allowsNonnumericFormatting="NO" includesActualByteCount="YES" id="IXV-J9-sP3"/>
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
- <connections>
- <binding destination="dWe-R6-sRz" name="value" keyPath="arrangedObjects.countOfBytesCompleted" id="Zsa-Na-yFN"/>
- </connections>
- </tableColumn>
- </tableColumns>
- <connections>
- <action trigger="doubleAction" selector="chooseOfflinePack:" target="-1" id="pUN-eT-zRT"/>
- </connections>
- </tableView>
- </subviews>
- </clipView>
- <scroller key="horizontalScroller" verticalHuggingPriority="750" horizontal="YES" id="QLr-6P-Ogs">
- <rect key="frame" x="1" y="265" width="400" height="15"/>
- <autoresizingMask key="autoresizingMask"/>
- </scroller>
- <scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="q0K-eE-mzL">
- <rect key="frame" x="224" y="17" width="15" height="102"/>
- <autoresizingMask key="autoresizingMask"/>
- </scroller>
- <tableHeaderView key="headerView" id="MAZ-Iq-hBi">
- <rect key="frame" x="0.0" y="0.0" width="423" height="23"/>
- <autoresizingMask key="autoresizingMask"/>
- </tableHeaderView>
- </scrollView>
- <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wzf-ce-Spm">
- <rect key="frame" x="0.0" y="-1" width="21" height="21"/>
- <constraints>
- <constraint firstAttribute="width" constant="21" id="5ST-tY-8Ph"/>
- </constraints>
- <buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSAddTemplate" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" id="sew-F7-i5T">
- <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
- <font key="font" metaFont="system"/>
- </buttonCell>
- <connections>
- <action selector="addOfflinePack:" target="-1" id="SN0-PM-HoU"/>
- </connections>
- </button>
- <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7L7-hr-zId">
- <rect key="frame" x="20" y="0.0" width="21" height="19"/>
- <constraints>
- <constraint firstAttribute="width" constant="21" id="JYb-AF-8gZ"/>
- </constraints>
- <buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" id="oTF-3m-6qT">
- <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
- <font key="font" metaFont="system"/>
- <string key="keyEquivalent" base64-UTF8="YES">
-CA
-</string>
- </buttonCell>
- <connections>
- <action selector="delete:" target="-1" id="EGL-bf-yUD"/>
- </connections>
- </button>
- </subviews>
- <constraints>
- <constraint firstItem="7L7-hr-zId" firstAttribute="centerY" secondItem="wzf-ce-Spm" secondAttribute="centerY" id="7TI-6w-bf1"/>
- <constraint firstAttribute="bottom" secondItem="Q8b-0e-dLv" secondAttribute="bottom" constant="20" symbolic="YES" id="DZa-ly-bhV"/>
- <constraint firstItem="wzf-ce-Spm" firstAttribute="top" secondItem="Q8b-0e-dLv" secondAttribute="bottom" id="LhK-5z-CQA"/>
- <constraint firstItem="Q8b-0e-dLv" firstAttribute="leading" secondItem="8ha-hw-zOD" secondAttribute="leading" constant="-1" id="Oyo-ch-rZo"/>
- <constraint firstAttribute="bottom" secondItem="7L7-hr-zId" secondAttribute="bottom" id="TtY-j1-T5h"/>
- <constraint firstItem="Q8b-0e-dLv" firstAttribute="top" secondItem="8ha-hw-zOD" secondAttribute="top" constant="-1" id="WDk-Ig-Grr"/>
- <constraint firstAttribute="trailing" secondItem="Q8b-0e-dLv" secondAttribute="trailing" constant="-1" id="hHf-rd-Wcv"/>
- <constraint firstItem="7L7-hr-zId" firstAttribute="leading" secondItem="8ha-hw-zOD" secondAttribute="leading" constant="20" symbolic="YES" id="iKJ-ph-ACS"/>
- <constraint firstAttribute="bottom" secondItem="wzf-ce-Spm" secondAttribute="bottom" constant="-1" id="jFV-Xi-fWr"/>
- <constraint firstItem="wzf-ce-Spm" firstAttribute="leading" secondItem="8ha-hw-zOD" secondAttribute="leading" id="kJt-oJ-72R"/>
- </constraints>
- </view>
- <point key="canvasLocation" x="720" y="317"/>
- </window>
- <arrayController objectClassName="MGLOfflinePack" editable="NO" avoidsEmptySelection="NO" id="dWe-R6-sRz" userLabel="Offline Packs Array Controller">
- <declaredKeys>
- <string>context</string>
- <string>countOfResourcesCompleted</string>
- <string>countOfResourcesExpected</string>
- <string>countOfTilesCompleted</string>
- <string>countOfTileBytesCompleted</string>
- <string>countOfBytesCompleted</string>
- <string>stateImage</string>
- </declaredKeys>
- </arrayController>
- </objects>
- <resources>
- <image name="NSAddTemplate" width="11" height="11"/>
- <image name="NSFollowLinkFreestandingTemplate" width="14" height="14"/>
- <image name="NSRemoveTemplate" width="11" height="11"/>
- </resources>
-</document>
diff --git a/platform/macos/app/Base.lproj/MapDocument.xib b/platform/macos/app/Base.lproj/MapDocument.xib
deleted file mode 100644
index 084bb76adf..0000000000
--- a/platform/macos/app/Base.lproj/MapDocument.xib
+++ /dev/null
@@ -1,497 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
- <dependencies>
- <deployment identifier="macosx"/>
- <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
- <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
- </dependencies>
- <objects>
- <customObject id="-2" userLabel="File's Owner" customClass="MapDocument">
- <connections>
- <outlet property="addOfflinePackWindow" destination="NmZ-Tf-v2O" id="ZPE-9L-vPJ"/>
- <outlet property="includesIdeographicGlyphsBox" destination="Jbt-z6-eg9" id="4M4-jN-qxP"/>
- <outlet property="mapView" destination="q4d-kF-8Hi" id="7hI-dS-A5R"/>
- <outlet property="mapViewContextMenu" destination="XbX-6a-Mgy" id="YD0-1r-5N2"/>
- <outlet property="maximumOfflinePackZoomLevelField" destination="5sj-XD-neD" id="Edu-lU-3j9"/>
- <outlet property="maximumOfflinePackZoomLevelFormatter" destination="4cD-xh-teT" id="IOh-5e-4FO"/>
- <outlet property="minimumOfflinePackZoomLevelField" destination="Xo1-tZ-WQ6" id="ETh-er-ReB"/>
- <outlet property="minimumOfflinePackZoomLevelFormatter" destination="LGN-Et-RKY" id="Klk-iF-fM0"/>
- <outlet property="offlinePackNameField" destination="tUU-DX-RxU" id="r7P-uL-4qo"/>
- <outlet property="splitView" destination="IPR-fm-vk8" id="9xt-ar-uad"/>
- <outlet property="styleLayersArrayController" destination="GXW-3J-Gff" id="Ygs-7o-juz"/>
- <outlet property="styleLayersTableView" destination="Mm4-6F-qEb" id="TB5-ha-JJE"/>
- <outlet property="window" destination="cSv-fg-MAQ" id="TBu-Mu-79N"/>
- </connections>
- </customObject>
- <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
- <objectController objectClassName="MGLMapView" id="jxx-uM-ZTC" userLabel="Map View Object Controller">
- <declaredKeys>
- <string>style</string>
- </declaredKeys>
- <connections>
- <outlet property="content" destination="q4d-kF-8Hi" id="Zpe-0y-eG3"/>
- </connections>
- </objectController>
- <objectController objectClassName="MGLStyle" id="Xji-k6-iQ4" userLabel="Style Object Controller">
- <declaredKeys>
- <string>layers</string>
- <string>name</string>
- <string>reversedLayers</string>
- </declaredKeys>
- <connections>
- <binding destination="jxx-uM-ZTC" name="contentObject" keyPath="selection.style" id="60N-aU-tgJ"/>
- </connections>
- </objectController>
- <arrayController objectClassName="MGLStyleLayer" avoidsEmptySelection="NO" id="GXW-3J-Gff" userLabel="Style Layers Array Controller">
- <declaredKeys>
- <string>identifier</string>
- <string>visible</string>
- </declaredKeys>
- <connections>
- <binding destination="Xji-k6-iQ4" name="contentArray" keyPath="selection.reversedLayers" id="wtL-d8-GNd"/>
- </connections>
- </arrayController>
- <customObject id="-3" userLabel="Application" customClass="NSObject"/>
- <window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="MBXMapWindow" animationBehavior="default" id="cSv-fg-MAQ">
- <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" fullSizeContentView="YES"/>
- <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
- <rect key="contentRect" x="388" y="211" width="642" height="480"/>
- <rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
- <view key="contentView" id="TuG-C5-zLS">
- <rect key="frame" x="0.0" y="0.0" width="642" height="480"/>
- <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
- <subviews>
- <splitView autosaveName="MBXLayersSplitView" dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="IPR-fm-vk8">
- <rect key="frame" x="0.0" y="0.0" width="642" height="480"/>
- <subviews>
- <scrollView misplaced="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" id="sMc-vT-RwH">
- <rect key="frame" x="0.0" y="0.0" width="163" height="480"/>
- <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
- <clipView key="contentView" id="bSc-hK-bzQ">
- <rect key="frame" x="0.0" y="0.0" width="163" height="480"/>
- <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
- <subviews>
- <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnResizing="NO" autosaveColumns="NO" id="Mm4-6F-qEb">
- <rect key="frame" x="0.0" y="0.0" width="163" height="480"/>
- <autoresizingMask key="autoresizingMask"/>
- <size key="intercellSpacing" width="3" height="2"/>
- <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
- <color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
- <tableColumns>
- <tableColumn editable="NO" width="16" minWidth="16" maxWidth="1000" id="P3U-a3-c8q">
- <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
- </tableHeaderCell>
- <imageCell key="dataCell" lineBreakMode="truncatingTail" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="symbol" id="JWq-c8-aB1"/>
- <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
- <connections>
- <binding destination="GXW-3J-Gff" name="value" keyPath="arrangedObjects" id="ST5-mo-Mkt">
- <dictionary key="options">
- <bool key="NSConditionallySetsEnabled" value="NO"/>
- <string key="NSValueTransformerName">StyleLayerIconTransformer</string>
- </dictionary>
- </binding>
- </connections>
- </tableColumn>
- <tableColumn editable="NO" width="141" minWidth="40" maxWidth="1000" id="BwD-ww-7uw">
- <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
- </tableHeaderCell>
- <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="6wl-F2-yK2">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
- <connections>
- <binding destination="GXW-3J-Gff" name="value" keyPath="arrangedObjects.identifier" id="vQC-tc-CMF">
- <dictionary key="options">
- <bool key="NSConditionallySetsEditable" value="YES"/>
- </dictionary>
- </binding>
- <binding destination="GXW-3J-Gff" name="fontItalic" keyPath="arrangedObjects.visible" id="6Wu-cz-WSI">
- <dictionary key="options">
- <string key="NSValueTransformerName">NSNegateBoolean</string>
- </dictionary>
- </binding>
- </connections>
- </tableColumn>
- </tableColumns>
- <connections>
- <action trigger="doubleAction" selector="toggleStyleLayers:" target="-1" id="Q1v-2T-sIC"/>
- <outlet property="menu" destination="OHX-Pa-tDw" id="wnL-Ux-WaH"/>
- </connections>
- </tableView>
- </subviews>
- </clipView>
- <constraints>
- <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="185" id="VQs-2Z-hmP"/>
- </constraints>
- <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="NDx-rn-TLj">
- <rect key="frame" x="0.0" y="464" width="163" height="16"/>
- <autoresizingMask key="autoresizingMask"/>
- </scroller>
- <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="0vt-rI-sHB">
- <rect key="frame" x="147" y="480" width="16" height="0.0"/>
- <autoresizingMask key="autoresizingMask"/>
- </scroller>
- </scrollView>
- <customView misplaced="YES" id="q4d-kF-8Hi" customClass="MGLMapView">
- <rect key="frame" x="164" y="0.0" width="478" height="480"/>
- <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
- <constraints>
- <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="200" id="kg3-4h-7Hl"/>
- </constraints>
- <connections>
- <outlet property="delegate" destination="-2" id="dh2-0H-jFZ"/>
- <outlet property="menu" destination="XbX-6a-Mgy" id="dSu-HR-Kq2"/>
- </connections>
- </customView>
- </subviews>
- <holdingPriorities>
- <real value="250"/>
- <real value="250"/>
- </holdingPriorities>
- <connections>
- <outlet property="delegate" destination="-2" id="dbC-MC-CAy"/>
- </connections>
- </splitView>
- </subviews>
- <constraints>
- <constraint firstAttribute="trailing" secondItem="IPR-fm-vk8" secondAttribute="trailing" id="ABk-5R-Uzg"/>
- <constraint firstAttribute="bottom" secondItem="IPR-fm-vk8" secondAttribute="bottom" id="CHa-BK-6ld"/>
- <constraint firstItem="IPR-fm-vk8" firstAttribute="leading" secondItem="TuG-C5-zLS" secondAttribute="leading" id="hcR-y2-x3l"/>
- <constraint firstItem="IPR-fm-vk8" firstAttribute="top" secondItem="TuG-C5-zLS" secondAttribute="top" id="u78-BU-s5g"/>
- </constraints>
- </view>
- <toolbar key="toolbar" implicitIdentifier="A3AC6577-4712-4628-813D-113498171A84" allowsUserCustomization="NO" displayMode="iconOnly" sizeMode="regular" id="DTc-AP-Bah">
- <allowedToolbarItems>
- <toolbarItem implicitItemIdentifier="NSToolbarSpaceItem" id="bld-8W-Wgg"/>
- <toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="z4l-5x-MzK"/>
- <toolbarItem implicitItemIdentifier="2CB58C0A-7B95-4233-8DD3-F94BFE7D3061" label="Share" paletteLabel="Share" image="NSShareTemplate" id="XJT-Ho-tuZ" customClass="ValidatedToolbarItem">
- <nil key="toolTip"/>
- <size key="minSize" width="40" height="32"/>
- <size key="maxSize" width="48" height="32"/>
- <button key="view" verticalHuggingPriority="750" id="y6e-ev-rVL">
- <rect key="frame" x="0.0" y="14" width="48" height="32"/>
- <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
- <buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSShareTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="TBK-Ra-XzZ">
- <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
- <font key="font" metaFont="system"/>
- </buttonCell>
- </button>
- <connections>
- <action selector="showShareMenu:" target="-1" id="fCB-HP-iou"/>
- </connections>
- </toolbarItem>
- <toolbarItem implicitItemIdentifier="BA3542AF-D63A-4893-9CC7-8F67EF2E82B0" label="Style" paletteLabel="Style" id="u23-0z-Otl" customClass="ValidatedToolbarItem">
- <nil key="toolTip"/>
- <size key="minSize" width="100" height="26"/>
- <size key="maxSize" width="150" height="26"/>
- <popUpButton key="view" verticalHuggingPriority="750" id="Tzm-Cy-dQg">
- <rect key="frame" x="0.0" y="14" width="150" height="26"/>
- <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
- <popUpButtonCell key="cell" type="roundTextured" title="Streets" bezelStyle="texturedRounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="border" tag="1" imageScaling="proportionallyDown" inset="2" selectedItem="wvt-tP-O3a" id="3PJ-qK-Oh3">
- <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
- <font key="font" metaFont="menu"/>
- <menu key="menu" id="xf3-qk-IhF">
- <items>
- <menuItem title="Streets" state="on" tag="1" id="wvt-tP-O3a"/>
- <menuItem title="Outdoors" tag="2" id="RkE-lp-fL9"/>
- <menuItem title="Light" tag="3" id="R4X-kt-HHb"/>
- <menuItem title="Dark" tag="4" id="jUC-5X-0Zx">
- <modifierMask key="keyEquivalentModifierMask"/>
- </menuItem>
- <menuItem title="Satellite" tag="5" id="CTe-e2-o42">
- <modifierMask key="keyEquivalentModifierMask"/>
- </menuItem>
- <menuItem title="Satellite Streets" tag="6" id="7ly-oA-0ND">
- <modifierMask key="keyEquivalentModifierMask"/>
- </menuItem>
- </items>
- </menu>
- </popUpButtonCell>
- </popUpButton>
- <connections>
- <action selector="showStyle:" target="-1" id="pBn-SO-HIX"/>
- </connections>
- </toolbarItem>
- <toolbarItem implicitItemIdentifier="ACA1D8BE-A108-4BF9-92DC-AE7AA7342CF9" label="Layers" paletteLabel="Show Layers" image="NSListViewTemplate" id="THR-Dm-mn8" customClass="ValidatedToolbarItem">
- <nil key="toolTip"/>
- <size key="minSize" width="47" height="32"/>
- <size key="maxSize" width="48" height="32"/>
- <button key="view" verticalHuggingPriority="750" id="C3e-Oy-STT">
- <rect key="frame" x="14" y="14" width="47" height="32"/>
- <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
- <buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSListViewTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="2Gf-wm-QuI">
- <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
- <font key="font" metaFont="system"/>
- </buttonCell>
- </button>
- <connections>
- <action selector="toggleLayers:" target="-1" id="NHT-rn-BuG"/>
- </connections>
- </toolbarItem>
- </allowedToolbarItems>
- <defaultToolbarItems>
- <toolbarItem reference="THR-Dm-mn8"/>
- <toolbarItem reference="XJT-Ho-tuZ"/>
- <toolbarItem reference="z4l-5x-MzK"/>
- <toolbarItem reference="u23-0z-Otl"/>
- </defaultToolbarItems>
- <connections>
- <outlet property="delegate" destination="-2" id="V9D-gS-Tvu"/>
- </connections>
- </toolbar>
- <connections>
- <binding destination="-2" name="displayPatternTitle1" keyPath="mapView.centerCoordinate" id="p1k-yo-4Nb">
- <dictionary key="options">
- <string key="NSDisplayPattern">%{title1}@ @ %{title2}@</string>
- <string key="NSValueTransformerName">LocationCoordinate2DTransformer</string>
- </dictionary>
- </binding>
- <binding destination="-2" name="displayPatternTitle2" keyPath="mapView.zoomLevel" previousBinding="p1k-yo-4Nb" id="HBB-y3-89c">
- <dictionary key="options">
- <string key="NSDisplayPattern">%{title1}@ @ %{title2}@</string>
- </dictionary>
- </binding>
- <outlet property="delegate" destination="-2" id="HEo-Qf-o6o"/>
- </connections>
- </window>
- <menu title="Map View" id="XbX-6a-Mgy">
- <items>
- <menuItem title="Drop Pin" id="KiK-wh-YwN">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="dropPin:" target="-1" id="ZH6-Tj-IJT"/>
- </connections>
- </menuItem>
- <menuItem title="Remove Pin" id="Zhx-30-VmE">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="removePin:" target="-1" id="w0R-0B-7mG"/>
- </connections>
- </menuItem>
- <menuItem title="Select Features" id="za5-bY-mdf">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="selectFeatures:" target="-1" id="ikt-CZ-yZT"/>
- </connections>
- </menuItem>
- </items>
- <connections>
- <outlet property="delegate" destination="-2" id="oHe-ZP-lyc"/>
- </connections>
- <point key="canvasLocation" x="820" y="254.5"/>
- </menu>
- <menu title="Layer" id="OHX-Pa-tDw" userLabel="Layers Context Menu">
- <items>
- <menuItem title="Show" id="KWq-LM-Qqo">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="toggleStyleLayers:" target="-1" id="kXn-ug-tWC"/>
- </connections>
- </menuItem>
- <menuItem isSeparatorItem="YES" id="uWQ-uj-mZn"/>
- <menuItem title="Delete" id="Myg-EZ-Pnq">
- <modifierMask key="keyEquivalentModifierMask"/>
- <connections>
- <action selector="deleteStyleLayers:" target="-1" id="cE5-ZP-BDC"/>
- </connections>
- </menuItem>
- </items>
- <connections>
- <outlet property="delegate" destination="-2" id="yvb-NB-VGl"/>
- </connections>
- </menu>
- <window title="Add Offline Pack" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="NmZ-Tf-v2O">
- <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
- <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
- <rect key="contentRect" x="109" y="131" width="392" height="221"/>
- <rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
- <view key="contentView" id="Aqq-bl-feU">
- <rect key="frame" x="0.0" y="0.0" width="392" height="221"/>
- <autoresizingMask key="autoresizingMask"/>
- <subviews>
- <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Xjw-df-oAz">
- <rect key="frame" x="98" y="184" width="276" height="17"/>
- <textFieldCell key="cell" lineBreakMode="clipping" title="Add offline pack" id="Iec-RB-iqn">
- <font key="font" metaFont="systemBold"/>
- <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- </textField>
- <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sui-dp-hbb">
- <rect key="frame" x="98" y="107" width="44" height="17"/>
- <textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Name:" id="2El-Zw-T6E">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- </textField>
- <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="D3l-hX-2Dh">
- <rect key="frame" x="98" y="134" width="276" height="42"/>
- <textFieldCell key="cell" selectable="YES" title="Mapbox GL will download all the resources needed for viewing the currently visible coordinate bounds in the current style." id="3Gw-Zy-sBT">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- </textField>
- <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tUU-DX-RxU">
- <rect key="frame" x="148" y="104" width="224" height="22"/>
- <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="lwQ-N1-PTI">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <connections>
- <outlet property="nextKeyView" destination="Xo1-tZ-WQ6" id="VIu-TG-LQu"/>
- </connections>
- </textField>
- <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="p5T-3H-wqL">
- <rect key="frame" x="20" y="137" width="64" height="64"/>
- <constraints>
- <constraint firstAttribute="height" constant="64" id="2Xy-pC-rE3"/>
- <constraint firstAttribute="width" constant="64" id="SWY-Rg-9R8"/>
- </constraints>
- <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSApplicationIcon" id="cww-fO-sNX"/>
- </imageView>
- <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Xo1-tZ-WQ6">
- <rect key="frame" x="148" y="78" width="96" height="22"/>
- <constraints>
- <constraint firstAttribute="width" constant="96" id="8Rw-FU-HGV"/>
- </constraints>
- <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="g7z-bq-I00">
- <numberFormatter key="formatter" formatterBehavior="custom10_4" positiveFormat="z#,##0" numberStyle="decimal" allowsFloats="NO" minimumIntegerDigits="1" maximumIntegerDigits="2000000000" id="LGN-Et-RKY">
- <real key="minimum" value="0.0"/>
- </numberFormatter>
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <connections>
- <outlet property="nextKeyView" destination="5sj-XD-neD" id="90r-pR-v8j"/>
- </connections>
- </textField>
- <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8r0-F0-e5i">
- <rect key="frame" x="250" y="81" width="20" height="17"/>
- <textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="to:" id="RBS-Uj-AVT">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- </textField>
- <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5sj-XD-neD">
- <rect key="frame" x="276" y="78" width="96" height="22"/>
- <constraints>
- <constraint firstAttribute="width" constant="96" id="faj-tE-bfc"/>
- </constraints>
- <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="dUq-Vg-vgQ">
- <numberFormatter key="formatter" formatterBehavior="custom10_4" positiveFormat="z#,##0" numberStyle="decimal" allowsFloats="NO" minimumIntegerDigits="1" maximumIntegerDigits="2000000000" id="4cD-xh-teT">
- <real key="minimum" value="0.0"/>
- </numberFormatter>
- <font key="font" metaFont="system"/>
- <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <connections>
- <outlet property="nextKeyView" destination="Jbt-z6-eg9" id="273-nM-wgO"/>
- </connections>
- </textField>
- <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jbt-z6-eg9">
- <rect key="frame" x="98" y="54" width="276" height="18"/>
- <buttonCell key="cell" type="check" title="Include CJK characters" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="whL-VW-8fY">
- <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
- <font key="font" metaFont="system"/>
- </buttonCell>
- <connections>
- <outlet property="nextKeyView" destination="tUU-DX-RxU" id="bQK-xN-9lx"/>
- </connections>
- </button>
- <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hhq-J9-mzB">
- <rect key="frame" x="98" y="81" width="44" height="17"/>
- <textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="From:" id="fkO-YX-Yzt">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- </textField>
- <button verticalHuggingPriority="750" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="EyW-0r-iV7">
- <rect key="frame" x="313" y="13" width="65" height="32"/>
- <buttonCell key="cell" type="push" title="Add" bezelStyle="rounded" alignment="center" borderStyle="border" tag="1" imageScaling="proportionallyDown" inset="2" id="5xR-IX-Qnp">
- <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
- <font key="font" metaFont="system"/>
- <string key="keyEquivalent" base64-UTF8="YES">
-DQ
-</string>
- </buttonCell>
- <connections>
- <action selector="confirmAddingOfflinePack:" target="-2" id="7ic-hp-A2O"/>
- </connections>
- </button>
- <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ggP-hg-92n">
- <rect key="frame" x="231" y="13" width="82" height="32"/>
- <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="L4F-7l-Wwq">
- <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
- <font key="font" metaFont="system"/>
- <string key="keyEquivalent" base64-UTF8="YES">
-Gw
-</string>
- </buttonCell>
- <connections>
- <action selector="confirmAddingOfflinePack:" target="-2" id="Ljo-bK-4BU"/>
- </connections>
- </button>
- </subviews>
- <constraints>
- <constraint firstItem="hhq-J9-mzB" firstAttribute="firstBaseline" secondItem="Xo1-tZ-WQ6" secondAttribute="firstBaseline" id="0Rv-Ze-u9B"/>
- <constraint firstAttribute="trailing" secondItem="Xjw-df-oAz" secondAttribute="trailing" constant="20" id="0gu-PF-adU"/>
- <constraint firstItem="p5T-3H-wqL" firstAttribute="top" secondItem="Aqq-bl-feU" secondAttribute="top" constant="20" id="2bA-hD-M6H"/>
- <constraint firstItem="ggP-hg-92n" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Aqq-bl-feU" secondAttribute="leading" constant="20" symbolic="YES" id="493-sg-uf0"/>
- <constraint firstItem="Xo1-tZ-WQ6" firstAttribute="top" secondItem="tUU-DX-RxU" secondAttribute="bottom" constant="4" id="4Ql-yp-7Kv"/>
- <constraint firstAttribute="bottom" secondItem="EyW-0r-iV7" secondAttribute="bottom" constant="20" id="7cm-ds-QeW"/>
- <constraint firstItem="D3l-hX-2Dh" firstAttribute="leading" secondItem="p5T-3H-wqL" secondAttribute="trailing" constant="16" id="7xT-tt-0Wx"/>
- <constraint firstItem="EyW-0r-iV7" firstAttribute="leading" secondItem="ggP-hg-92n" secondAttribute="trailing" constant="12" id="9AJ-g9-XXg"/>
- <constraint firstItem="Jbt-z6-eg9" firstAttribute="top" secondItem="Xo1-tZ-WQ6" secondAttribute="bottom" constant="8" id="BGA-2c-w6i"/>
- <constraint firstItem="ggP-hg-92n" firstAttribute="top" secondItem="Jbt-z6-eg9" secondAttribute="bottom" constant="15" id="BXD-Xj-NJb"/>
- <constraint firstItem="D3l-hX-2Dh" firstAttribute="top" secondItem="Xjw-df-oAz" secondAttribute="bottom" constant="8" id="BwZ-hX-4t5"/>
- <constraint firstItem="sui-dp-hbb" firstAttribute="firstBaseline" secondItem="tUU-DX-RxU" secondAttribute="firstBaseline" id="MUq-FE-BiZ"/>
- <constraint firstItem="sui-dp-hbb" firstAttribute="leading" secondItem="D3l-hX-2Dh" secondAttribute="leading" id="NU2-ve-0Mo"/>
- <constraint firstItem="tUU-DX-RxU" firstAttribute="top" secondItem="D3l-hX-2Dh" secondAttribute="bottom" constant="8" id="Rn0-66-xYg"/>
- <constraint firstItem="8r0-F0-e5i" firstAttribute="firstBaseline" secondItem="5sj-XD-neD" secondAttribute="firstBaseline" id="Shc-KJ-NR4"/>
- <constraint firstItem="Xo1-tZ-WQ6" firstAttribute="leading" secondItem="tUU-DX-RxU" secondAttribute="leading" id="Usc-k5-8R9"/>
- <constraint firstItem="8r0-F0-e5i" firstAttribute="leading" secondItem="Xo1-tZ-WQ6" secondAttribute="trailing" constant="8" id="W7y-oQ-Tsb"/>
- <constraint firstItem="Xo1-tZ-WQ6" firstAttribute="leading" secondItem="hhq-J9-mzB" secondAttribute="trailing" constant="8" id="g3w-AE-VVQ"/>
- <constraint firstItem="5sj-XD-neD" firstAttribute="trailing" secondItem="tUU-DX-RxU" secondAttribute="trailing" id="gWo-ar-g0U"/>
- <constraint firstItem="Xjw-df-oAz" firstAttribute="leading" secondItem="p5T-3H-wqL" secondAttribute="trailing" constant="16" id="jRa-3D-tbZ"/>
- <constraint firstItem="Jbt-z6-eg9" firstAttribute="leading" secondItem="Xjw-df-oAz" secondAttribute="leading" id="mDq-XI-GdW"/>
- <constraint firstItem="Xjw-df-oAz" firstAttribute="top" secondItem="Aqq-bl-feU" secondAttribute="top" constant="20" id="nrG-fO-QE5"/>
- <constraint firstItem="D3l-hX-2Dh" firstAttribute="trailing" secondItem="Xjw-df-oAz" secondAttribute="trailing" id="o5U-kq-Wbz"/>
- <constraint firstItem="Jbt-z6-eg9" firstAttribute="trailing" secondItem="D3l-hX-2Dh" secondAttribute="trailing" id="o9H-cU-YAR"/>
- <constraint firstItem="tUU-DX-RxU" firstAttribute="leading" secondItem="sui-dp-hbb" secondAttribute="trailing" constant="8" id="oVs-7V-Dxq"/>
- <constraint firstItem="tUU-DX-RxU" firstAttribute="trailing" secondItem="D3l-hX-2Dh" secondAttribute="trailing" id="p3o-y4-fNP"/>
- <constraint firstItem="hhq-J9-mzB" firstAttribute="leading" secondItem="sui-dp-hbb" secondAttribute="leading" id="sff-ty-Y6C"/>
- <constraint firstItem="5sj-XD-neD" firstAttribute="leading" secondItem="8r0-F0-e5i" secondAttribute="trailing" constant="8" id="tf8-pK-DZR"/>
- <constraint firstItem="Xo1-tZ-WQ6" firstAttribute="firstBaseline" secondItem="8r0-F0-e5i" secondAttribute="firstBaseline" id="vdt-kP-ISY"/>
- <constraint firstItem="EyW-0r-iV7" firstAttribute="trailing" secondItem="5sj-XD-neD" secondAttribute="trailing" id="wWy-ra-Uqt"/>
- <constraint firstItem="p5T-3H-wqL" firstAttribute="leading" secondItem="Aqq-bl-feU" secondAttribute="leading" constant="20" id="whj-f7-Iu6"/>
- <constraint firstItem="ggP-hg-92n" firstAttribute="firstBaseline" secondItem="EyW-0r-iV7" secondAttribute="firstBaseline" id="yl0-vC-sO8"/>
- </constraints>
- </view>
- <connections>
- <outlet property="initialFirstResponder" destination="tUU-DX-RxU" id="W2D-pZ-p0s"/>
- </connections>
- <point key="canvasLocation" x="79" y="881.5"/>
- </window>
- </objects>
- <resources>
- <image name="NSApplicationIcon" width="32" height="32"/>
- <image name="NSListViewTemplate" width="14" height="10"/>
- <image name="NSShareTemplate" width="11" height="16"/>
- <image name="symbol" width="13" height="13"/>
- </resources>
-</document>
diff --git a/platform/macos/app/Credits.rtf b/platform/macos/app/Credits.rtf
deleted file mode 100644
index 6b17eb34b2..0000000000
--- a/platform/macos/app/Credits.rtf
+++ /dev/null
@@ -1,9 +0,0 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf130
-{\fonttbl\f0\fnil\fcharset0 SFUIText-Regular;}
-{\colortbl;\red255\green255\blue255;}
-\margl1440\margr1440\vieww10800\viewh8400\viewkind0
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\qc\partightenfactor0
-
-\f0\fs20 \cf0 Copyright \'a9 {\field{\*\fldinst{HYPERLINK "https://www.mapbox.com/about/maps/"}}{\fldrslt Mapbox}}.\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\qc\partightenfactor0
-\cf0 Copyright \'a9 {\field{\*\fldinst{HYPERLINK "http://www.openstreetmap.org/about/"}}{\fldrslt OpenStreetMap contributors}}.} \ No newline at end of file
diff --git a/platform/macos/app/DroppedPinAnnotation.h b/platform/macos/app/DroppedPinAnnotation.h
deleted file mode 100644
index 0897219b13..0000000000
--- a/platform/macos/app/DroppedPinAnnotation.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#import <Mapbox/Mapbox.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface DroppedPinAnnotation : MGLPointAnnotation
-
-@property (nonatomic, copy, nullable) NSString *note;
-@property (nonatomic, readonly) NSTimeInterval elapsedShownTime;
-
-- (void)resume;
-- (void)pause;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/platform/macos/app/DroppedPinAnnotation.m b/platform/macos/app/DroppedPinAnnotation.m
deleted file mode 100644
index b601405095..0000000000
--- a/platform/macos/app/DroppedPinAnnotation.m
+++ /dev/null
@@ -1,73 +0,0 @@
-#import "DroppedPinAnnotation.h"
-
-#import "LocationCoordinate2DTransformer.h"
-#import "TimeIntervalTransformer.h"
-
-#import <Mapbox/Mapbox.h>
-
-static MGLCoordinateFormatter *DroppedPinCoordinateFormatter;
-
-@implementation DroppedPinAnnotation {
- NSTimer *_timer;
- NSTimeInterval _priorShownTimeInterval;
- NSDate *_dateShown;
-
- NSValueTransformer *_timeIntervalTransformer;
-}
-
-+ (void)initialize {
- if (self == [DroppedPinAnnotation class]) {
- DroppedPinCoordinateFormatter = [[MGLCoordinateFormatter alloc] init];
- }
-}
-
-- (instancetype)init {
- if (self = [super init]) {
- _timeIntervalTransformer = [NSValueTransformer valueTransformerForName:
- NSStringFromClass([TimeIntervalTransformer class])];
- [self update:nil];
- }
- return self;
-}
-
-- (void)dealloc {
- [self pause];
-}
-
-- (void)setCoordinate:(CLLocationCoordinate2D)coordinate {
- super.coordinate = coordinate;
- [self update:nil];
-}
-
-- (NSTimeInterval)elapsedShownTime {
- return _priorShownTimeInterval - _dateShown.timeIntervalSinceNow;
-}
-
-- (void)resume {
- _dateShown = [NSDate date];
- _timer = [NSTimer scheduledTimerWithTimeInterval:1
- target:self
- selector:@selector(update:)
- userInfo:nil
- repeats:YES];
-}
-
-- (void)pause {
- [_timer invalidate];
- _timer = nil;
- _priorShownTimeInterval -= _dateShown.timeIntervalSinceNow;
- _dateShown = nil;
-}
-
-- (void)update:(NSTimer *)timer {
- NSString *coordinate = [DroppedPinCoordinateFormatter stringFromCoordinate:self.coordinate];
- if (self.note) {
- self.subtitle = [@[self.note, coordinate] componentsJoinedByString:@"\n"];
- } else {
- NSString *elapsedTime = [_timeIntervalTransformer transformedValue:@(self.elapsedShownTime)];
- NSString *elapsedString = [NSString stringWithFormat:@"Selected for %@", elapsedTime];
- self.subtitle = [@[coordinate, elapsedString] componentsJoinedByString:@"\n"];
- }
-}
-
-@end
diff --git a/platform/macos/app/Info.plist b/platform/macos/app/Info.plist
deleted file mode 100644
index 21b86bfc75..0000000000
--- a/platform/macos/app/Info.plist
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>en</string>
- <key>CFBundleDocumentTypes</key>
- <array>
- <dict>
- <key>CFBundleTypeExtensions</key>
- <array>
- <string>mbx</string>
- </array>
- <key>CFBundleTypeName</key>
- <string>Mapbox GL Map</string>
- <key>CFBundleTypeRole</key>
- <string>Editor</string>
- <key>NSDocumentClass</key>
- <string>MapDocument</string>
- </dict>
- </array>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIdentifier</key>
- <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>0.1.0</string>
- <key>CFBundleSignature</key>
- <string>MBGL</string>
- <key>CFBundleURLTypes</key>
- <array>
- <dict>
- <key>CFBundleURLName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundleURLSchemes</key>
- <array>
- <string>mapboxgl</string>
- </array>
- </dict>
- </array>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>LSMinimumSystemVersion</key>
- <string>$(MACOSX_DEPLOYMENT_TARGET)</string>
- <key>NSMainNibFile</key>
- <string>MainMenu</string>
- <key>NSPrincipalClass</key>
- <string>NSApplication</string>
- <key>NSSupportsAutomaticGraphicsSwitching</key>
- <true/>
-</dict>
-</plist>
diff --git a/platform/macos/app/LocationCoordinate2DTransformer.h b/platform/macos/app/LocationCoordinate2DTransformer.h
deleted file mode 100644
index 162325fbad..0000000000
--- a/platform/macos/app/LocationCoordinate2DTransformer.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-
-@interface LocationCoordinate2DTransformer : NSValueTransformer
-
-@end
diff --git a/platform/macos/app/LocationCoordinate2DTransformer.m b/platform/macos/app/LocationCoordinate2DTransformer.m
deleted file mode 100644
index 59654f1676..0000000000
--- a/platform/macos/app/LocationCoordinate2DTransformer.m
+++ /dev/null
@@ -1,31 +0,0 @@
-#import "LocationCoordinate2DTransformer.h"
-
-#import <Mapbox/Mapbox.h>
-
-@implementation LocationCoordinate2DTransformer {
- MGLCoordinateFormatter *_coordinateFormatter;
-}
-
-+ (Class)transformedValueClass {
- return [NSString class];
-}
-
-+ (BOOL)allowsReverseTransformation {
- return NO;
-}
-
-- (instancetype)init {
- if (self = [super init]) {
- _coordinateFormatter = [[MGLCoordinateFormatter alloc] init];
- }
- return self;
-}
-
-- (id)transformedValue:(id)value {
- if (![value isKindOfClass:[NSValue class]]) {
- return nil;
- }
- return [_coordinateFormatter stringForObjectValue:value].capitalizedString;
-}
-
-@end
diff --git a/platform/macos/app/MGLStyle+MBXAdditions.h b/platform/macos/app/MGLStyle+MBXAdditions.h
deleted file mode 100644
index 29c2cda867..0000000000
--- a/platform/macos/app/MGLStyle+MBXAdditions.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#import <Mapbox/Mapbox.h>
-
-@interface MGLStyle (MBXAdditions)
-
-@property (nonatomic, strong) NSArray<__kindof MGLStyleLayer *> *reversedLayers;
-
-@end
diff --git a/platform/macos/app/MGLStyle+MBXAdditions.m b/platform/macos/app/MGLStyle+MBXAdditions.m
deleted file mode 100644
index a0773cc2c0..0000000000
--- a/platform/macos/app/MGLStyle+MBXAdditions.m
+++ /dev/null
@@ -1,42 +0,0 @@
-#import "MGLStyle+MBXAdditions.h"
-
-@implementation MGLStyle (MBXAdditions)
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingReversedLayers {
- return [NSSet setWithObject:@"layers"];
-}
-
-- (NSArray<__kindof MGLStyleLayer *> *)reversedLayers {
- return self.layers.reverseObjectEnumerator.allObjects;
-}
-
-- (void)setReversedLayers:(NSArray<__kindof MGLStyleLayer *> *)reversedLayers {
- self.layers = reversedLayers.reverseObjectEnumerator.allObjects;
-}
-
-- (NSUInteger)countOfReversedLayers {
- return self.layers.count;
-}
-
-- (id)objectInReversedLayersAtIndex:(NSUInteger)index {
- NSArray *layers = self.layers;
- return layers[layers.count - 1 - index];
-}
-
-- (void)getReversedLayers:(__kindof MGLStyleLayer **)buffer range:(NSRange)inRange {
- NSArray *layers = self.layers;
- for (NSUInteger i = inRange.location; i < NSMaxRange(inRange); i++) {
- MGLStyleLayer *styleLayer = layers[layers.count - 1 - i];
- buffer[i] = styleLayer;
- }
-}
-
-- (void)insertObject:(__kindof MGLStyleLayer *)object inReversedLayersAtIndex:(NSUInteger)index {
- [self insertLayer:object atIndex:self.layers.count - index];
-}
-
-- (void)removeObjectFromReversedLayersAtIndex:(NSUInteger)index {
- [self removeLayer:[self objectInReversedLayersAtIndex:index]];
-}
-
-@end
diff --git a/platform/macos/app/MapDocument.h b/platform/macos/app/MapDocument.h
deleted file mode 100644
index fa70212cf8..0000000000
--- a/platform/macos/app/MapDocument.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#import <Cocoa/Cocoa.h>
-
-@class MGLMapView;
-
-@interface MapDocument : NSDocument
-
-@property (weak) IBOutlet MGLMapView *mapView;
-
-- (IBAction)showStyle:(id)sender;
-- (IBAction)chooseCustomStyle:(id)sender;
-
-- (IBAction)reload:(id)sender;
-
-@end
diff --git a/platform/macos/app/MapDocument.m b/platform/macos/app/MapDocument.m
deleted file mode 100644
index 1ab8b690b9..0000000000
--- a/platform/macos/app/MapDocument.m
+++ /dev/null
@@ -1,1507 +0,0 @@
-#import "MapDocument.h"
-
-#import "AppDelegate.h"
-#import "LimeGreenStyleLayer.h"
-#import "DroppedPinAnnotation.h"
-#import "MGLMapsnapshotter.h"
-
-#import "MGLStyle+MBXAdditions.h"
-#import "MGLVectorTileSource_Private.h"
-
-#import <Mapbox/Mapbox.h>
-
-static NSString * const MGLDroppedPinAnnotationImageIdentifier = @"dropped";
-
-static const CLLocationCoordinate2D WorldTourDestinations[] = {
- { .latitude = 38.8999418, .longitude = -77.033996 },
- { .latitude = 37.7884307, .longitude = -122.3998631 },
- { .latitude = 52.5003103, .longitude = 13.4197763 },
- { .latitude = 60.1712627, .longitude = 24.9378866 },
- { .latitude = 53.8948782, .longitude = 27.5558476 },
-};
-
-NSArray<id <MGLAnnotation>> *MBXFlattenedShapes(NSArray<id <MGLAnnotation>> *shapes) {
- NSMutableArray *flattenedShapes = [NSMutableArray arrayWithCapacity:shapes.count];
- for (id <MGLAnnotation> shape in shapes) {
- NSArray *subshapes;
- if ([shape isKindOfClass:[MGLMultiPolyline class]]) {
- subshapes = [(MGLMultiPolyline *)shape polylines];
- } else if ([shape isKindOfClass:[MGLMultiPolygon class]]) {
- subshapes = [(MGLMultiPolygon *)shape polygons];
- } else if ([shape isKindOfClass:[MGLPointCollection class]]) {
- NSUInteger pointCount = [(MGLPointCollection *)shape pointCount];
- CLLocationCoordinate2D *coordinates = [(MGLPointCollection *)shape coordinates];
- NSMutableArray *pointAnnotations = [NSMutableArray arrayWithCapacity:pointCount];
- for (NSUInteger i = 0; i < pointCount; i++) {
- MGLPointAnnotation *pointAnnotation = [[MGLPointAnnotation alloc] init];
- pointAnnotation.coordinate = coordinates[i];
- [pointAnnotations addObject:pointAnnotation];
- }
- subshapes = pointAnnotations;
- } else if ([shape isKindOfClass:[MGLShapeCollection class]]) {
- subshapes = MBXFlattenedShapes([(MGLShapeCollection *)shape shapes]);
- }
-
- if (subshapes) {
- [flattenedShapes addObjectsFromArray:subshapes];
- } else {
- [flattenedShapes addObject:shape];
- }
- }
- return flattenedShapes;
-}
-
-@interface MGLVectorTileSource (MBXAdditions)
-
-@property (nonatomic, readonly, getter=isMapboxTerrain) BOOL mapboxTerrain;
-
-@end
-
-@implementation MGLVectorTileSource (MBXAdditions)
-
-- (BOOL)isMapboxTerrain {
- NSURL *url = self.configurationURL;
- if (![url.scheme isEqualToString:@"mapbox"]) {
- return NO;
- }
- NSArray *identifiers = [url.host componentsSeparatedByString:@","];
- return [identifiers containsObject:@"mapbox.mapbox-terrain-v2"] || [identifiers containsObject:@"mapbox.mapbox-terrain-v1"];
-}
-
-@end
-
-@interface MapDocument () <NSWindowDelegate, NSSharingServicePickerDelegate, NSMenuDelegate, NSSplitViewDelegate, MGLMapViewDelegate, MGLComputedShapeSourceDataSource>
-
-@property (weak) IBOutlet NSArrayController *styleLayersArrayController;
-@property (weak) IBOutlet NSTableView *styleLayersTableView;
-@property (weak) IBOutlet NSMenu *mapViewContextMenu;
-@property (weak) IBOutlet NSSplitView *splitView;
-@property (weak) IBOutlet NSWindow *addOfflinePackWindow;
-@property (weak) IBOutlet NSTextField *offlinePackNameField;
-@property (weak) IBOutlet NSTextField *minimumOfflinePackZoomLevelField;
-@property (weak) IBOutlet NSNumberFormatter *minimumOfflinePackZoomLevelFormatter;
-@property (weak) IBOutlet NSTextField *maximumOfflinePackZoomLevelField;
-@property (weak) IBOutlet NSNumberFormatter *maximumOfflinePackZoomLevelFormatter;
-@property (weak) IBOutlet NSButton *includesIdeographicGlyphsBox;
-
-@end
-
-@implementation MapDocument {
- /// Style URL inherited from an existing document at the time this document
- /// was created.
- NSURL *_inheritedStyleURL;
-
- NSPoint _mouseLocationForMapViewContextMenu;
- NSUInteger _droppedPinCounter;
- NSNumberFormatter *_spellOutNumberFormatter;
-
- BOOL _isLocalizingLabels;
- BOOL _showsToolTipsOnDroppedPins;
- BOOL _randomizesCursorsOnDroppedPins;
- BOOL _isTouringWorld;
- BOOL _isShowingPolygonAndPolylineAnnotations;
- BOOL _isShowingAnimatedAnnotation;
-
- MGLMapSnapshotter *_snapshotter;
-}
-
-#pragma mark Lifecycle
-
-- (NSString *)windowNibName {
- return @"MapDocument";
-}
-
-- (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-- (void)windowControllerWillLoadNib:(NSWindowController *)windowController {
- NSDocument *currentDocument = [NSDocumentController sharedDocumentController].currentDocument;
- if ([currentDocument isKindOfClass:[MapDocument class]]) {
- _inheritedStyleURL = [(MapDocument *)currentDocument mapView].styleURL;
- }
-}
-
-- (void)windowControllerDidLoadNib:(NSWindowController *)controller {
- [super windowControllerDidLoadNib:controller];
-
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(userDefaultsDidChange:)
- name:NSUserDefaultsDidChangeNotification
- object:nil];
-
- _spellOutNumberFormatter = [[NSNumberFormatter alloc] init];
-
- NSPressGestureRecognizer *pressGestureRecognizer = [[NSPressGestureRecognizer alloc] initWithTarget:self action:@selector(handlePressGesture:)];
- [self.mapView addGestureRecognizer:pressGestureRecognizer];
-
- [self.splitView setPosition:0 ofDividerAtIndex:0];
-
- [self applyPendingState];
-}
-
-- (NSWindow *)window {
- return self.windowControllers.firstObject.window;
-}
-
-- (void)userDefaultsDidChange:(NSNotification *)notification {
- NSUserDefaults *userDefaults = notification.object;
- NSString *accessToken = [userDefaults stringForKey:MGLMapboxAccessTokenDefaultsKey];
- if (![accessToken isEqualToString:[MGLAccountManager accessToken]]) {
- [MGLAccountManager setAccessToken:accessToken];
- [self reload:self];
- }
-}
-
-#pragma mark NSWindowDelegate methods
-
-- (void)window:(NSWindow *)window willEncodeRestorableState:(NSCoder *)state {
- [state encodeObject:self.mapView.styleURL forKey:@"MBXMapViewStyleURL"];
- [state encodeBool:_isLocalizingLabels forKey:@"MBXLocalizeLabels"];
-}
-
-- (void)window:(NSWindow *)window didDecodeRestorableState:(NSCoder *)state {
- self.mapView.styleURL = [state decodeObjectForKey:@"MBXMapViewStyleURL"];
- _isLocalizingLabels = [state decodeBoolForKey:@"MBXLocalizeLabels"];
-}
-
-#pragma mark Services
-
-- (IBAction)showShareMenu:(id)sender {
- NSSharingServicePicker *picker = [[NSSharingServicePicker alloc] initWithItems:@[self.shareURL]];
- picker.delegate = self;
- [picker showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMinYEdge];
-}
-
-- (NSURL *)shareURL {
- NSArray *components = self.mapView.styleURL.pathComponents;
- MGLMapCamera *camera = self.mapView.camera;
- return [NSURL URLWithString:
- [NSString stringWithFormat:@"https://api.mapbox.com/styles/v1/%@/%@.html?access_token=%@#%.2f/%.5f/%.5f/%.f/%.f",
- components[1], components[2], [MGLAccountManager accessToken],
- self.mapView.zoomLevel, camera.centerCoordinate.latitude, camera.centerCoordinate.longitude,
- camera.heading, camera.pitch]];
-}
-
-#pragma mark File methods
-
-- (IBAction)import:(id)sender {
- NSOpenPanel *panel = [NSOpenPanel openPanel];
- panel.allowedFileTypes = @[@"public.json", @"json", @"geojson"];
- panel.allowsMultipleSelection = YES;
-
- __weak __typeof__(self) weakSelf = self;
- [panel beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse result) {
- if (result != NSFileHandlingPanelOKButton) {
- return;
- }
-
- for (NSURL *url in panel.URLs) {
- [weakSelf importFromURL:url];
- }
- }];
-}
-
-/**
- Adds the contents of the GeoJSON file at the given URL to the map.
-
- GeoJSON features are styled according to
- [simplestyle-spec](https://github.com/mapbox/simplestyle-spec/tree/master/1.1.0/).
- */
-- (void)importFromURL:(NSURL *)url {
- MGLStyle *style = self.mapView.style;
- if (!style) {
- return;
- }
-
- MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:[NSUUID UUID].UUIDString URL:url options:nil];
- [self.mapView.style addSource:source];
-
- NSString *pointIdentifier = [NSString stringWithFormat:@"%@ marker", source.identifier];
- MGLSymbolStyleLayer *pointLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:pointIdentifier source:source];
- pointLayer.iconImageName =
- [NSExpression expressionWithFormat:@"mgl_join({%K, '-', CAST(TERNARY(%K = 'small', 11, 15), 'NSString')})",
- @"marker-symbol", @"marker-size"];
- pointLayer.iconScale = [NSExpression expressionForConstantValue:@1];
- pointLayer.iconColor = [NSExpression expressionWithFormat:@"CAST(mgl_coalesce({%K, '#7e7e7e'}), 'NSColor')",
- @"marker-color"];
- pointLayer.iconAllowsOverlap = [NSExpression expressionForConstantValue:@YES];
- [style addLayer:pointLayer];
-
- NSString *fillIdentifier = [NSString stringWithFormat:@"%@ fill", source.identifier];
- MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:fillIdentifier source:source];
- fillLayer.predicate = [NSPredicate predicateWithFormat:@"fill != nil OR %K != nil", @"fill-opacity"];
- fillLayer.fillColor = [NSExpression expressionWithFormat:@"CAST(mgl_coalesce({fill, '#555555'}), 'NSColor')"];
- fillLayer.fillOpacity = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, 0.5})", @"fill-opacity"];
- [style addLayer:fillLayer];
-
- NSString *lineIdentifier = [NSString stringWithFormat:@"%@ stroke", source.identifier];
- MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:lineIdentifier source:source];
- lineLayer.lineColor = [NSExpression expressionWithFormat:@"CAST(mgl_coalesce({stroke, '#555555'}), 'NSColor')"];
- lineLayer.lineOpacity = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, 1.0})", @"stroke-opacity"];
- lineLayer.lineWidth = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, 2})", @"stroke-width"];
- lineLayer.lineCap = [NSExpression expressionForConstantValue:@"round"];
- lineLayer.lineJoin = [NSExpression expressionForConstantValue:@"bevel"];
- [style addLayer:lineLayer];
-}
-
-- (IBAction)takeSnapshot:(id)sender {
- MGLMapCamera *camera = self.mapView.camera;
-
- MGLMapSnapshotOptions *options = [[MGLMapSnapshotOptions alloc] initWithStyleURL:self.mapView.styleURL camera:camera size:self.mapView.bounds.size];
- options.zoomLevel = self.mapView.zoomLevel;
-
- // Create and start the snapshotter
- __weak __typeof__(self) weakSelf = self;
- _snapshotter = [[MGLMapSnapshotter alloc] initWithOptions:options];
- [_snapshotter startWithCompletionHandler:^(MGLMapSnapshot *snapshot, NSError *error) {
- __typeof__(self) strongSelf = weakSelf;
- if (!strongSelf) {
- return;
- }
-
- if (error) {
- NSLog(@"Could not load snapshot: %@", error.localizedDescription);
- } else {
- // Set the default name for the file and show the panel.
- NSSavePanel *panel = [NSSavePanel savePanel];
- panel.nameFieldStringValue = [strongSelf.mapView.styleURL.lastPathComponent.stringByDeletingPathExtension stringByAppendingPathExtension:@"png"];
- panel.allowedFileTypes = [@[(NSString *)kUTTypePNG] arrayByAddingObjectsFromArray:[NSBitmapImageRep imageUnfilteredTypes]];
-
- [panel beginSheetModalForWindow:strongSelf.window completionHandler:^(NSInteger result) {
- if (result == NSFileHandlingPanelOKButton) {
- // Write the contents in the new format.
- NSURL *fileURL = panel.URL;
-
- NSBitmapImageRep *bitmapRep;
- for (NSImageRep *imageRep in snapshot.image.representations) {
- if ([imageRep isKindOfClass:[NSBitmapImageRep class]]) {
- bitmapRep = (NSBitmapImageRep *)imageRep;
- break; // stop on first bitmap rep we find
- }
- }
-
- if (!bitmapRep) {
- bitmapRep = [NSBitmapImageRep imageRepWithData:snapshot.image.TIFFRepresentation];
- }
-
- CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)fileURL.pathExtension, NULL /* inConformingToUTI */);
- NSBitmapImageFileType fileType = NSTIFFFileType;
- if (UTTypeConformsTo(uti, kUTTypePNG)) {
- fileType = NSPNGFileType;
- } else if (UTTypeConformsTo(uti, kUTTypeGIF)) {
- fileType = NSGIFFileType;
- } else if (UTTypeConformsTo(uti, kUTTypeJPEG2000)) {
- fileType = NSJPEG2000FileType;
- } else if (UTTypeConformsTo(uti, kUTTypeJPEG)) {
- fileType = NSJPEGFileType;
- } else if (UTTypeConformsTo(uti, kUTTypeBMP)) {
- fileType = NSBitmapImageFileTypeBMP;
- }
-
- NSData *imageData = [bitmapRep representationUsingType:fileType properties:@{}];
- [imageData writeToURL:fileURL atomically:NO];
- }
- }];
-
- }
-
- strongSelf->_snapshotter = nil;
- }];
-}
-
-#pragma mark View methods
-
-- (IBAction)showStyle:(id)sender {
- NSInteger tag = -1;
- if ([sender isKindOfClass:[NSMenuItem class]]) {
- tag = [sender tag];
- } else if ([sender isKindOfClass:[NSPopUpButton class]]) {
- tag = [sender selectedTag];
- }
- NSURL *styleURL;
- switch (tag) {
- case 1:
- styleURL = [MGLStyle streetsStyleURL];
- break;
- case 2:
- styleURL = [MGLStyle outdoorsStyleURL];
- break;
- case 3:
- styleURL = [MGLStyle lightStyleURL];
- break;
- case 4:
- styleURL = [MGLStyle darkStyleURL];
- break;
- case 5:
- styleURL = [MGLStyle satelliteStyleURL];
- break;
- case 6:
- styleURL = [MGLStyle satelliteStreetsStyleURL];
- break;
- default:
- NSAssert(NO, @"Cannot set style from control with tag %li", (long)tag);
- break;
- }
- [self.undoManager removeAllActionsWithTarget:self];
- self.mapView.styleURL = styleURL;
- [self.window.toolbar validateVisibleItems];
-}
-
-- (IBAction)chooseCustomStyle:(id)sender {
- NSAlert *alert = [[NSAlert alloc] init];
- alert.messageText = @"Apply custom style";
- alert.informativeText = @"Enter the URL to a JSON file that conforms to the Mapbox Style Specification, such as a style designed in Mapbox Studio:";
- NSTextField *textField = [[NSTextField alloc] initWithFrame:NSZeroRect];
- [textField sizeToFit];
- NSRect textFieldFrame = textField.frame;
- textFieldFrame.size.width = 300;
- textField.frame = textFieldFrame;
- NSURL *savedURL = [[NSUserDefaults standardUserDefaults] URLForKey:@"MBXCustomStyleURL"];
- if (savedURL) {
- textField.stringValue = savedURL.absoluteString;
- }
- alert.accessoryView = textField;
- [alert addButtonWithTitle:@"Apply"];
- [alert addButtonWithTitle:@"Cancel"];
- if ([alert runModal] == NSAlertFirstButtonReturn) {
- [self.undoManager removeAllActionsWithTarget:self];
- self.mapView.styleURL = [NSURL URLWithString:textField.stringValue];
- [[NSUserDefaults standardUserDefaults] setURL:self.mapView.styleURL forKey:@"MBXCustomStyleURL"];
- [self.window.toolbar validateVisibleItems];
- }
-}
-
-- (IBAction)zoomIn:(id)sender {
- [self.mapView setZoomLevel:round(self.mapView.zoomLevel) + 1 animated:YES];
-}
-
-- (IBAction)zoomOut:(id)sender {
- [self.mapView setZoomLevel:round(self.mapView.zoomLevel) - 1 animated:YES];
-}
-
-- (IBAction)snapToNorth:(id)sender {
- [self.mapView setDirection:0 animated:YES];
-}
-
-- (IBAction)reload:(id)sender {
- [self.undoManager removeAllActionsWithTarget:self];
- [self.mapView reloadStyle:sender];
-}
-
-/**
- Show or hide the Layers sidebar.
- */
-- (IBAction)toggleLayers:(id)sender {
- BOOL isShown = ![self.splitView isSubviewCollapsed:self.splitView.arrangedSubviews.firstObject];
- [NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull context) {
- context.allowsImplicitAnimation = YES;
- [self.splitView setPosition:isShown ? 0 : 100 ofDividerAtIndex:0];
- [self.window.toolbar validateVisibleItems];
- } completionHandler:nil];
-}
-
-/**
- Show or hide the selected layers.
- */
-- (IBAction)toggleStyleLayers:(id)sender {
- NSInteger clickedRow = self.styleLayersTableView.clickedRow;
- NSIndexSet *indices = self.styleLayersTableView.selectedRowIndexes;
- if (clickedRow >= 0 && ![indices containsIndex:clickedRow]) {
- indices = [NSIndexSet indexSetWithIndex:clickedRow];
- }
- [self toggleStyleLayersAtArrangedObjectIndexes:indices];
-}
-
-- (void)toggleStyleLayersAtArrangedObjectIndexes:(NSIndexSet *)indices {
- NSArray<MGLStyleLayer *> *layers = [self.mapView.style.reversedLayers objectsAtIndexes:indices];
- BOOL isVisible = layers.firstObject.visible;
- [self.undoManager registerUndoWithTarget:self handler:^(MapDocument * _Nonnull target) {
- [target toggleStyleLayersAtArrangedObjectIndexes:indices];
- }];
-
- if (!self.undoManager.undoing) {
- NSString *actionName;
- if (indices.count == 1) {
- actionName = [NSString stringWithFormat:@"%@ Layer “%@”", isVisible ? @"Hide" : @"Show", layers.firstObject.identifier];
- } else {
- actionName = [NSString stringWithFormat:@"%@ %@ Layers", isVisible ? @"Hide" : @"Show",
- [NSNumberFormatter localizedStringFromNumber:@(indices.count)
- numberStyle:NSNumberFormatterDecimalStyle]];
- }
- [self.undoManager setActionIsDiscardable:YES];
- [self.undoManager setActionName:actionName];
- }
-
- for (MGLStyleLayer *layer in layers) {
- layer.visible = !isVisible;
- }
-
- NSIndexSet *columnIndices = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)];
- [self.styleLayersTableView reloadDataForRowIndexes:indices columnIndexes:columnIndices];
-}
-
-- (IBAction)deleteStyleLayers:(id)sender {
- NSInteger clickedRow = self.styleLayersTableView.clickedRow;
- NSIndexSet *indices = self.styleLayersTableView.selectedRowIndexes;
- if (clickedRow >= 0 && ![indices containsIndex:clickedRow]) {
- indices = [NSIndexSet indexSetWithIndex:clickedRow];
- }
- [self deleteStyleLayersAtArrangedObjectIndexes:indices];
-}
-
-- (void)insertStyleLayers:(NSArray<MGLStyleLayer *> *)layers atArrangedObjectIndexes:(NSIndexSet *)indices {
- [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) {
- [self deleteStyleLayersAtArrangedObjectIndexes:indices];
- }];
-
- if (!self.undoManager.undoing) {
- NSString *actionName;
- if (indices.count == 1) {
- actionName = [NSString stringWithFormat:@"Add Layer “%@”", layers.firstObject.identifier];
- } else {
- actionName = [NSString stringWithFormat:@"Add %@ Layers",
- [NSNumberFormatter localizedStringFromNumber:@(indices.count) numberStyle:NSNumberFormatterDecimalStyle]];
- }
- [self.undoManager setActionName:actionName];
- }
-
- [self.styleLayersArrayController insertObjects:layers atArrangedObjectIndexes:indices];
-}
-
-- (void)deleteStyleLayersAtArrangedObjectIndexes:(NSIndexSet *)indices {
- NSArray<MGLStyleLayer *> *layers = [self.mapView.style.reversedLayers objectsAtIndexes:indices];
- [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) {
- [self insertStyleLayers:layers atArrangedObjectIndexes:indices];
- }];
-
- if (!self.undoManager.undoing) {
- NSString *actionName;
- if (indices.count == 1) {
- actionName = [NSString stringWithFormat:@"Delete Layer “%@”", layers.firstObject.identifier];
- } else {
- actionName = [NSString stringWithFormat:@"Delete %@ Layers",
- [NSNumberFormatter localizedStringFromNumber:@(indices.count) numberStyle:NSNumberFormatterDecimalStyle]];
- }
- [self.undoManager setActionName:actionName];
- }
-
- [self.styleLayersArrayController removeObjectsAtArrangedObjectIndexes:indices];
-}
-
-- (IBAction)setLabelLanguage:(NSMenuItem *)sender {
- _isLocalizingLabels = sender.tag;
- [self reload:sender];
-}
-
-- (void)updateLabels {
- [self.mapView.style localizeLabelsIntoLocale:_isLocalizingLabels ? nil : [NSLocale localeWithLocaleIdentifier:@"mul"]];
-}
-
-- (void)applyPendingState {
- if (_inheritedStyleURL) {
- self.mapView.styleURL = _inheritedStyleURL;
- _inheritedStyleURL = nil;
- }
-
- AppDelegate *appDelegate = (AppDelegate *)NSApp.delegate;
- if (appDelegate.pendingStyleURL) {
- self.mapView.styleURL = appDelegate.pendingStyleURL;
- }
- if (appDelegate.pendingCamera) {
- if (appDelegate.pendingZoomLevel >= 0) {
- self.mapView.zoomLevel = appDelegate.pendingZoomLevel;
- appDelegate.pendingCamera.altitude = self.mapView.camera.altitude;
- }
- self.mapView.camera = appDelegate.pendingCamera;
- appDelegate.pendingZoomLevel = -1;
- appDelegate.pendingCamera = nil;
- }
- if (!MGLCoordinateBoundsIsEmpty(appDelegate.pendingVisibleCoordinateBounds)) {
- self.mapView.visibleCoordinateBounds = appDelegate.pendingVisibleCoordinateBounds;
- appDelegate.pendingVisibleCoordinateBounds = (MGLCoordinateBounds){ { 0, 0 }, { 0, 0 } };
- }
- if (appDelegate.pendingDebugMask) {
- self.mapView.debugMask = appDelegate.pendingDebugMask;
- }
- if (appDelegate.pendingMinimumZoomLevel >= 0) {
- self.mapView.zoomLevel = MAX(appDelegate.pendingMinimumZoomLevel, self.mapView.zoomLevel);
- appDelegate.pendingMaximumZoomLevel = -1;
- }
- if (appDelegate.pendingMaximumZoomLevel >= 0) {
- self.mapView.zoomLevel = MIN(appDelegate.pendingMaximumZoomLevel, self.mapView.zoomLevel);
- appDelegate.pendingMaximumZoomLevel = -1;
- }
-
- // Temporarily set the display name to the default center coordinate instead
- // of “Untitled” until the binding kicks in.
- NSValue *coordinateValue = [NSValue valueWithMGLCoordinate:self.mapView.centerCoordinate];
- NSString *coordinateString = [[NSValueTransformer valueTransformerForName:@"LocationCoordinate2DTransformer"]
- transformedValue:coordinateValue];
-
-
- self.displayName = [NSString stringWithFormat:@"%@ @ %f", coordinateString, _mapView.zoomLevel];
-}
-
-#pragma mark Debug methods
-
-- (IBAction)toggleTileBoundaries:(id)sender {
- self.mapView.debugMask ^= MGLMapDebugTileBoundariesMask;
-}
-
-- (IBAction)toggleTileInfo:(id)sender {
- self.mapView.debugMask ^= MGLMapDebugTileInfoMask;
-}
-
-- (IBAction)toggleTileTimestamps:(id)sender {
- self.mapView.debugMask ^= MGLMapDebugTimestampsMask;
-}
-
-- (IBAction)toggleCollisionBoxes:(id)sender {
- self.mapView.debugMask ^= MGLMapDebugCollisionBoxesMask;
-}
-
-- (IBAction)toggleOverdrawVisualization:(id)sender {
- self.mapView.debugMask ^= MGLMapDebugOverdrawVisualizationMask;
-}
-
-- (IBAction)showColorBuffer:(id)sender {
- self.mapView.debugMask &= ~MGLMapDebugStencilBufferMask;
- self.mapView.debugMask &= ~MGLMapDebugDepthBufferMask;
-}
-
-- (IBAction)showStencilBuffer:(id)sender {
- self.mapView.debugMask &= ~MGLMapDebugDepthBufferMask;
- self.mapView.debugMask |= MGLMapDebugStencilBufferMask;
-}
-
-- (IBAction)showDepthBuffer:(id)sender {
- self.mapView.debugMask &= ~MGLMapDebugStencilBufferMask;
- self.mapView.debugMask |= MGLMapDebugDepthBufferMask;
-}
-
-- (IBAction)toggleShowsToolTipsOnDroppedPins:(id)sender {
- _showsToolTipsOnDroppedPins = !_showsToolTipsOnDroppedPins;
-}
-
-- (IBAction)toggleRandomizesCursorsOnDroppedPins:(id)sender {
- _randomizesCursorsOnDroppedPins = !_randomizesCursorsOnDroppedPins;
-}
-
-- (IBAction)dropManyPins:(id)sender {
- [self removeAllAnnotations:sender];
-
- NSRect bounds = self.mapView.bounds;
- NSMutableArray *annotations = [NSMutableArray array];
- for (CGFloat x = NSMinX(bounds); x < NSMaxX(bounds); x += arc4random_uniform(50)) {
- for (CGFloat y = NSMaxY(bounds); y >= NSMinY(bounds); y -= arc4random_uniform(100)) {
- [annotations addObject:[self pinAtPoint:NSMakePoint(x, y)]];
- }
- }
-
- [NSTimer scheduledTimerWithTimeInterval:1.0/60.0
- target:self
- selector:@selector(dropOneOfManyPins:)
- userInfo:annotations
- repeats:YES];
-}
-
-- (void)dropOneOfManyPins:(NSTimer *)timer {
- NSMutableArray *annotations = timer.userInfo;
- NSUInteger numberOfAnnotationsToAdd = 50;
- if (annotations.count < numberOfAnnotationsToAdd) {
- numberOfAnnotationsToAdd = annotations.count;
- }
- NSArray *annotationsToAdd = [annotations subarrayWithRange:
- NSMakeRange(0, numberOfAnnotationsToAdd)];
- [self.mapView addAnnotations:annotationsToAdd];
- [annotations removeObjectsInRange:NSMakeRange(0, numberOfAnnotationsToAdd)];
- if (!annotations.count) {
- [timer invalidate];
- }
-}
-
-- (IBAction)showAllAnnotations:(id)sender {
- [self.mapView showAnnotations:self.mapView.annotations animated:YES];
-}
-
-- (IBAction)removeAllAnnotations:(id)sender {
- [self.mapView removeAnnotations:self.mapView.annotations];
- _isShowingPolygonAndPolylineAnnotations = NO;
- _isShowingAnimatedAnnotation = NO;
-}
-
-- (IBAction)startWorldTour:(id)sender {
- _isTouringWorld = YES;
-
- [self removeAllAnnotations:sender];
- NSUInteger numberOfAnnotations = sizeof(WorldTourDestinations) / sizeof(WorldTourDestinations[0]);
- NSMutableArray *annotations = [NSMutableArray arrayWithCapacity:numberOfAnnotations];
- for (NSUInteger i = 0; i < numberOfAnnotations; i++) {
- MGLPointAnnotation *annotation = [[MGLPointAnnotation alloc] init];
- annotation.coordinate = WorldTourDestinations[i];
- [annotations addObject:annotation];
- }
- [self.mapView addAnnotations:annotations];
- [self continueWorldTourWithRemainingAnnotations:annotations];
-}
-
-- (void)continueWorldTourWithRemainingAnnotations:(NSMutableArray<MGLPointAnnotation *> *)annotations {
- MGLPointAnnotation *nextAnnotation = annotations.firstObject;
- if (!nextAnnotation || !_isTouringWorld) {
- _isTouringWorld = NO;
- return;
- }
-
- [annotations removeObjectAtIndex:0];
- MGLMapCamera *camera = [MGLMapCamera cameraLookingAtCenterCoordinate:nextAnnotation.coordinate
- acrossDistance:0
- pitch:arc4random_uniform(60)
- heading:arc4random_uniform(360)];
- __weak MapDocument *weakSelf = self;
- [self.mapView flyToCamera:camera completionHandler:^{
- MapDocument *strongSelf = weakSelf;
- [strongSelf performSelector:@selector(continueWorldTourWithRemainingAnnotations:)
- withObject:annotations
- afterDelay:2];
- }];
-}
-
-- (IBAction)stopWorldTour:(id)sender {
- _isTouringWorld = NO;
- // Any programmatic viewpoint change cancels outstanding animations.
- self.mapView.camera = self.mapView.camera;
-}
-
-- (IBAction)drawPolygonAndPolyLineAnnotations:(id)sender {
-
- if (_isShowingPolygonAndPolylineAnnotations) {
- [self removeAllAnnotations:sender];
- return;
- }
-
- _isShowingPolygonAndPolylineAnnotations = YES;
-
- // Pacific Northwest triangle
- CLLocationCoordinate2D triangleCoordinates[3] = {
- CLLocationCoordinate2DMake(44, -122),
- CLLocationCoordinate2DMake(46, -122),
- CLLocationCoordinate2DMake(46, -121)
- };
- MGLPolygon *triangle = [MGLPolygon polygonWithCoordinates:triangleCoordinates count:3];
- [self.mapView addAnnotation:triangle];
-
- // West coast line
- CLLocationCoordinate2D lineCoordinates[4] = {
- CLLocationCoordinate2DMake(47.6025, -122.3327),
- CLLocationCoordinate2DMake(45.5189, -122.6726),
- CLLocationCoordinate2DMake(37.7790, -122.4177),
- CLLocationCoordinate2DMake(34.0532, -118.2349)
- };
- MGLPolyline *line = [MGLPolyline polylineWithCoordinates:lineCoordinates count:4];
- [self.mapView addAnnotation:line];
-}
-
-- (IBAction)drawAnimatedAnnotation:(id)sender {
- DroppedPinAnnotation *annotation = [[DroppedPinAnnotation alloc] init];
- [self.mapView addAnnotation:annotation];
-
- _isShowingAnimatedAnnotation = YES;
-
- [NSTimer scheduledTimerWithTimeInterval:1.0/60.0
- target:self
- selector:@selector(updateAnimatedAnnotation:)
- userInfo:annotation
- repeats:YES];
-}
-
-
-- (id<MGLAnnotation>)randomOffscreenPointAnnotation {
-
- NSPredicate *pointAnnotationPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
- return [evaluatedObject isKindOfClass:[MGLPointAnnotation class]];
- }];
-
- NSArray *annotations = [self.mapView.annotations filteredArrayUsingPredicate:pointAnnotationPredicate];
-
- if (annotations.count == 0) {
- return nil;
- }
-
- // NOTE: self.mapView.visibleAnnotations occasionally returns nil - see
- // https://github.com/mapbox/mapbox-gl-native/issues/11296
- NSArray *visibleAnnotations = [self.mapView.visibleAnnotations filteredArrayUsingPredicate:pointAnnotationPredicate];
-
- NSLog(@"Number of visible point annotations = %ld", visibleAnnotations.count);
-
- if (visibleAnnotations.count == annotations.count) {
- return nil;
- }
-
- NSMutableArray *invisibleAnnotations = [annotations mutableCopy];
-
- if (visibleAnnotations.count > 0) {
- [invisibleAnnotations removeObjectsInArray:visibleAnnotations];
- }
-
- // Now pick a random offscreen annotation.
- uint32_t index = arc4random_uniform((uint32_t)invisibleAnnotations.count);
- return invisibleAnnotations[index];
-}
-
-- (IBAction)selectOffscreenPointAnnotation:(id)sender {
- id<MGLAnnotation> annotation = [self randomOffscreenPointAnnotation];
- if (annotation) {
- [self.mapView selectAnnotation:annotation];
-
- // Alternative method to select the annotation. These two should do the same thing.
- // self.mapView.selectedAnnotations = @[annotation];
- NSAssert(self.mapView.selectedAnnotations.firstObject, @"The annotation was not selected");
- }
-}
-
-- (void)updateAnimatedAnnotation:(NSTimer *)timer {
- DroppedPinAnnotation *annotation = timer.userInfo;
- double angle = timer.fireDate.timeIntervalSinceReferenceDate;
- annotation.coordinate = CLLocationCoordinate2DMake(
- sin(angle) * 20,
- cos(angle) * 20);
-}
-
-- (IBAction) addAnimatedImageSource:(id)sender {
-
- MGLImage *image = [[NSBundle bundleForClass:[self class]] imageForResource:@"southeast_0"];
-
- MGLCoordinateBounds bounds = { {22.551103322318994, -90.24006072802854}, {36.928147474567794, -75.1441643681673} };
- MGLImageSource *imageSource = [[MGLImageSource alloc] initWithIdentifier:@"animated-radar-source" coordinateQuad:MGLCoordinateQuadFromCoordinateBounds(bounds) image:image];
- [self.mapView.style addSource:imageSource];
-
- MGLRasterStyleLayer * imageLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"animated-radar-layer" source:imageSource];
- [self.mapView.style addLayer:imageLayer];
-
- [NSTimer scheduledTimerWithTimeInterval:1.0
- target:self
- selector:@selector(updateAnimatedImageSource:)
- userInfo:imageSource
- repeats:YES];
-}
-
-
-- (void)updateAnimatedImageSource:(NSTimer *)timer {
- static int radarSuffix = 0;
- MGLImageSource *imageSource = (MGLImageSource *)timer.userInfo;
-
- MGLImage *image = [[NSBundle bundleForClass:[self class]] imageForResource:[NSString stringWithFormat:@"southeast_%d", radarSuffix++]];
- [imageSource setValue:image forKey:@"image"];
-
- if(radarSuffix > 3) {
- radarSuffix = 0 ;
- }
-}
-
-- (IBAction)insertCustomStyleLayer:(id)sender {
- [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) {
- [self removeCustomStyleLayer:sender];
- }];
-
- if (!self.undoManager.isUndoing) {
- [self.undoManager setActionName:@"Add Lime Green Layer"];
- }
-
- LimeGreenStyleLayer *layer = [[LimeGreenStyleLayer alloc] initWithIdentifier:@"mbx-custom"];
- MGLStyleLayer *houseNumberLayer = [self.mapView.style layerWithIdentifier:@"housenum-label"];
- if (houseNumberLayer) {
- [self.mapView.style insertLayer:layer belowLayer:houseNumberLayer];
- } else {
- [self.mapView.style addLayer:layer];
- }
-}
-
-- (IBAction)removeCustomStyleLayer:(id)sender {
- [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) {
- [self insertCustomStyleLayer:sender];
- }];
-
- if (!self.undoManager.isUndoing) {
- [self.undoManager setActionName:@"Delete Lime Green Layer"];
- }
-
- MGLStyleLayer *layer = [self.mapView.style layerWithIdentifier:@"mbx-custom"];
- [self.mapView.style removeLayer:layer];
-}
-
-- (IBAction)insertGraticuleLayer:(id)sender {
- [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) {
- [self removeGraticuleLayer:sender];
- }];
-
- if (!self.undoManager.isUndoing) {
- [self.undoManager setActionName:@"Add Graticule"];
- }
-
- NSDictionary *sourceOptions = @{
- MGLShapeSourceOptionMaximumZoomLevel:@14,
- MGLShapeSourceOptionWrapsCoordinates: @YES,
- MGLShapeSourceOptionClipsCoordinates: @YES,
- };
- MGLComputedShapeSource *source = [[MGLComputedShapeSource alloc] initWithIdentifier:@"graticule"
- options:sourceOptions];
-
- source.dataSource = self;
- [self.mapView.style addSource:source];
- MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"graticule.lines"
- source:source];
- [self.mapView.style addLayer:lineLayer];
- MGLSymbolStyleLayer *labelLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"graticule.labels"
- source:source];
- labelLayer.text = [NSExpression expressionWithFormat:@"value"];
- [self.mapView.style addLayer:labelLayer];
-}
-
-- (IBAction)removeGraticuleLayer:(id)sender {
- [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) {
- [self insertGraticuleLayer:sender];
- }];
-
- if (!self.undoManager.isUndoing) {
- [self.undoManager setActionName:@"Delete Graticule"];
- }
-
- MGLStyleLayer *layer = [self.mapView.style layerWithIdentifier:@"graticule.lines"];
- [self.mapView.style removeLayer:layer];
-
- layer = [self.mapView.style layerWithIdentifier:@"graticule.labels"];
- [self.mapView.style removeLayer:layer];
-
- MGLSource *source = [self.mapView.style sourceWithIdentifier:@"graticule"];
- [self.mapView.style removeSource:source];
-}
-
-- (IBAction)enhanceTerrain:(id)sender {
- // Find all the identifiers of Mapbox Terrain sources used in the style.
- NSMutableSet *terrainSourceIdentifiers = [NSMutableSet set];
- for (MGLVectorTileSource *source in self.mapView.style.sources) {
- if (![source isKindOfClass:[MGLVectorTileSource class]]) {
- continue;
- }
-
- if (source.mapboxTerrain) {
- [terrainSourceIdentifiers addObject:source.identifier];
- }
- }
-
- // Find and remove all the style layers using those sources.
- NSUInteger hillshadeIndex = NSNotFound;
- NSEnumerator *layerEnumerator = self.mapView.style.layers.objectEnumerator;
- MGLVectorStyleLayer *layer;
- for (NSUInteger i = 0; (layer = layerEnumerator.nextObject); i++) {
- if (![layer isKindOfClass:[MGLVectorStyleLayer class]]) {
- continue;
- }
-
- if ([terrainSourceIdentifiers containsObject:layer.sourceIdentifier]
- && [layer.sourceLayerIdentifier isEqualToString:@"hillshade"]) {
- hillshadeIndex = i;
- [self.mapView.style removeLayer:layer];
- }
- }
-
- if (hillshadeIndex == NSNotFound) {
- return;
- }
-
- // Add a Mapbox Terrain-RGB source.
- NSURL *terrainRGBURL = [NSURL URLWithString:@"mapbox://mapbox.terrain-rgb"];
- MGLRasterDEMSource *terrainRGBSource = [[MGLRasterDEMSource alloc] initWithIdentifier:@"terrain" configurationURL:terrainRGBURL];
- [self.mapView.style addSource:terrainRGBSource];
-
- // Insert a hillshade layer where the Mapbox Terrain–based layers were.
- MGLHillshadeStyleLayer *hillshadeLayer = [[MGLHillshadeStyleLayer alloc] initWithIdentifier:@"hillshade" source:terrainRGBSource];
- [self.mapView.style insertLayer:hillshadeLayer atIndex:hillshadeIndex];
-}
-
-#pragma mark Offline packs
-
-- (IBAction)addOfflinePack:(id)sender {
- self.offlinePackNameField.stringValue = @"";
- self.offlinePackNameField.placeholderString = MGLStringFromCoordinateBounds(self.mapView.visibleCoordinateBounds);
- self.minimumOfflinePackZoomLevelField.doubleValue = floor(self.mapView.zoomLevel);
- self.maximumOfflinePackZoomLevelField.doubleValue = ceil(self.mapView.maximumZoomLevel);
- self.minimumOfflinePackZoomLevelFormatter.minimum = @(floor(self.mapView.minimumZoomLevel));
- self.maximumOfflinePackZoomLevelFormatter.minimum = @(floor(self.mapView.minimumZoomLevel));
- self.minimumOfflinePackZoomLevelFormatter.maximum = @(ceil(self.mapView.maximumZoomLevel));
- self.maximumOfflinePackZoomLevelFormatter.maximum = @(ceil(self.mapView.maximumZoomLevel));
-
- id ideographicFontFamilyName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MGLIdeographicFontFamilyName"];
- self.includesIdeographicGlyphsBox.state = ([ideographicFontFamilyName isKindOfClass:[NSNumber class]] && ![ideographicFontFamilyName boolValue]) ? NSOffState : NSOnState;
- [self.addOfflinePackWindow makeFirstResponder:self.offlinePackNameField];
-
- __weak __typeof__(self) weakSelf = self;
- [self.window beginSheet:self.addOfflinePackWindow completionHandler:^(NSModalResponse returnCode) {
- __typeof__(self) strongSelf = weakSelf;
- if (!strongSelf || returnCode != NSModalResponseOK) {
- return;
- }
-
- id <MGLOfflineRegion> region =
- [[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:strongSelf.mapView.styleURL
- bounds:strongSelf.mapView.visibleCoordinateBounds
- fromZoomLevel:strongSelf.minimumOfflinePackZoomLevelField.integerValue
- toZoomLevel:strongSelf.maximumOfflinePackZoomLevelField.integerValue];
- region.includesIdeographicGlyphs = strongSelf.includesIdeographicGlyphsBox.state == NSOnState;
- NSString *name = strongSelf.offlinePackNameField.stringValue;
- if (!name.length) {
- name = strongSelf.offlinePackNameField.placeholderString;
- }
- NSData *context = [[NSValueTransformer valueTransformerForName:@"OfflinePackNameValueTransformer"] reverseTransformedValue:name];
- [[MGLOfflineStorage sharedOfflineStorage] addPackForRegion:region withContext:context completionHandler:^(MGLOfflinePack * _Nullable pack, NSError * _Nullable error) {
- if (error) {
- [[NSAlert alertWithError:error] runModal];
- } else {
- [(AppDelegate *)NSApp.delegate watchOfflinePack:pack];
- [pack resume];
- }
- }];
- }];
-}
-
-- (IBAction)confirmAddingOfflinePack:(id)sender {
- [self.window endSheet:self.addOfflinePackWindow returnCode:[sender tag] ? NSModalResponseOK : NSModalResponseCancel];
-}
-
-#pragma mark Mouse events
-
-- (void)handlePressGesture:(NSPressGestureRecognizer *)gestureRecognizer {
- if (gestureRecognizer.state == NSGestureRecognizerStateBegan) {
- NSPoint location = [gestureRecognizer locationInView:self.mapView];
- if (!NSPointInRect([gestureRecognizer locationInView:self.mapView.compass], self.mapView.compass.bounds)
- && !NSPointInRect([gestureRecognizer locationInView:self.mapView.zoomControls], self.mapView.zoomControls.bounds)
- && !NSPointInRect([gestureRecognizer locationInView:self.mapView.attributionView], self.mapView.attributionView.bounds)) {
- [self dropPinAtPoint:location];
- }
- }
-}
-
-- (IBAction)manipulateStyle:(id)sender {
- MGLTransition transition = { .duration = 5, .delay = 1 };
- self.mapView.style.transition = transition;
-
- MGLStyleLayer *waterLayer = [self.mapView.style layerWithIdentifier:@"water"];
- NSExpression *colorExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{
- @0.0: [NSColor redColor],
- @10.0: [NSColor yellowColor],
- @20.0: [NSColor blackColor],
- }];
-
- if ([waterLayer respondsToSelector:@selector(fillColor)]) {
- [waterLayer setValue:colorExpression forKey:@"fillColor"];
- } else if ([waterLayer respondsToSelector:@selector(lineColor)]) {
- [waterLayer setValue:colorExpression forKey:@"lineColor"];
- }
-
- NSString *filePath = [[NSBundle bundleForClass:self.class] pathForResource:@"amsterdam" ofType:@"geojson"];
- NSURL *geoJSONURL = [NSURL fileURLWithPath:filePath];
- MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"ams" URL:geoJSONURL options:nil];
- [self.mapView.style addSource:source];
-
- MGLCircleStyleLayer *circleLayer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"test" source:source];
- circleLayer.circleColor = [NSExpression expressionForConstantValue:[NSColor greenColor]];
- circleLayer.circleRadius = [NSExpression expressionForConstantValue:@40];
-// fillLayer.predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"type", @"park"];
- [self.mapView.style addLayer:circleLayer];
-
- MGLSource *streetsSource = [self.mapView.style sourceWithIdentifier:@"composite"];
- if (streetsSource) {
- NSImage *image = [NSImage imageNamed:NSImageNameIChatTheaterTemplate];
- [self.mapView.style setImage:image forName:NSImageNameIChatTheaterTemplate];
-
- MGLSymbolStyleLayer *theaterLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"theaters" source:streetsSource];
- theaterLayer.sourceLayerIdentifier = @"poi_label";
- theaterLayer.predicate = [NSPredicate predicateWithFormat:@"maki == 'theatre'"];
- theaterLayer.iconImageName = [NSExpression expressionForConstantValue:NSImageNameIChatTheaterTemplate];
- theaterLayer.iconScale = [NSExpression expressionForConstantValue:@2];
- theaterLayer.iconColor = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{
- @16.0: [NSColor redColor],
- @18.0: [NSColor yellowColor],
- @20.0: [NSColor blackColor],
- }];
- [self.mapView.style addLayer:theaterLayer];
- }
-
- NSURL *imageURL = [NSURL URLWithString:@"https://www.mapbox.com/mapbox-gl-js/assets/radar.gif"];
- MGLCoordinateQuad quad = { {46.437, -80.425},
- {37.936, -80.425},
- {37.936, -71.516},
- {46.437, -71.516} };
- MGLImageSource *imageSource = [[MGLImageSource alloc] initWithIdentifier:@"radar-source" coordinateQuad:quad URL:imageURL];
- [self.mapView.style addSource:imageSource];
-
- MGLRasterStyleLayer * imageLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"radar-layer" source:imageSource];
- [self.mapView.style addLayer:imageLayer];
-}
-
-- (IBAction)dropPin:(NSMenuItem *)sender {
- [self dropPinAtPoint:_mouseLocationForMapViewContextMenu];
-}
-
-- (void)dropPinAtPoint:(NSPoint)point {
- DroppedPinAnnotation *annotation = [self pinAtPoint:point];
- [self.mapView addAnnotation:annotation];
- [self.mapView selectAnnotation:annotation];
-}
-
-- (DroppedPinAnnotation *)pinAtPoint:(NSPoint)point {
- NSArray *features = [self.mapView visibleFeaturesAtPoint:point];
- NSString *title;
- NSString *description;
- for (id <MGLFeature> feature in features) {
- if (!title) {
- title = [feature attributeForKey:@"title"] ?: [feature attributeForKey:@"name_en"] ?: [feature attributeForKey:@"name"];
-
- // simplestyle-spec defines a “description” attribute in HTML format.
- NSString *featureDescription = [feature attributeForKey:@"description"];
- if (featureDescription) {
- // Convert HTML to plain text, because the default popover is
- // bound to an NSString-typed property.
- NSData *data = [featureDescription dataUsingEncoding:NSUTF8StringEncoding];
- description = [[NSAttributedString alloc] initWithHTML:data options:@{} documentAttributes:nil].string;
- }
-
- if (title) {
- break;
- }
- }
- }
-
- DroppedPinAnnotation *annotation = [[DroppedPinAnnotation alloc] init];
- annotation.coordinate = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
- annotation.title = title ?: @"Dropped Pin";
- annotation.note = description;
- _spellOutNumberFormatter.numberStyle = NSNumberFormatterSpellOutStyle;
- if (_showsToolTipsOnDroppedPins) {
- NSString *formattedNumber = [_spellOutNumberFormatter stringFromNumber:@(++_droppedPinCounter)];
- annotation.toolTip = formattedNumber;
- }
- return annotation;
-}
-
-- (IBAction)removePin:(NSMenuItem *)sender {
- [self removePinAtPoint:_mouseLocationForMapViewContextMenu];
-}
-
-- (void)removePinAtPoint:(NSPoint)point {
- [self.mapView removeAnnotation:[self.mapView annotationAtPoint:point]];
-}
-
-- (IBAction)selectFeatures:(id)sender {
- [self selectFeaturesAtPoint:_mouseLocationForMapViewContextMenu];
-}
-
-- (void)selectFeaturesAtPoint:(NSPoint)point {
- NSArray *features = [self.mapView visibleFeaturesAtPoint:point];
- NSArray *flattenedFeatures = MBXFlattenedShapes(features);
- [self.mapView addAnnotations:flattenedFeatures];
-}
-
-#pragma mark User interface validation
-
-- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
- if (menuItem.action == @selector(showStyle:)) {
- NSURL *styleURL = self.mapView.styleURL;
- NSCellStateValue state;
- switch (menuItem.tag) {
- case 1:
- state = [styleURL isEqual:[MGLStyle streetsStyleURL]];
- break;
- case 2:
- state = [styleURL isEqual:[MGLStyle outdoorsStyleURL]];
- break;
- case 3:
- state = [styleURL isEqual:[MGLStyle lightStyleURL]];
- break;
- case 4:
- state = [styleURL isEqual:[MGLStyle darkStyleURL]];
- break;
- case 5:
- state = [styleURL isEqual:[MGLStyle satelliteStyleURL]];
- break;
- case 6:
- state = [styleURL isEqual:[MGLStyle satelliteStreetsStyleURL]];
- break;
- default:
- return NO;
- }
- menuItem.state = state;
- return YES;
- }
- if (menuItem.action == @selector(chooseCustomStyle:)) {
- menuItem.state = self.indexOfStyleInToolbarItem == NSNotFound;
- return YES;
- }
- if (menuItem.action == @selector(zoomIn:)) {
- return self.mapView.zoomLevel < self.mapView.maximumZoomLevel;
- }
- if (menuItem.action == @selector(zoomOut:)) {
- return self.mapView.zoomLevel > self.mapView.minimumZoomLevel;
- }
- if (menuItem.action == @selector(snapToNorth:)) {
- return self.mapView.direction != 0;
- }
- if (menuItem.action == @selector(reload:)) {
- return YES;
- }
- if (menuItem.action == @selector(toggleLayers:)) {
- BOOL isShown = ![self.splitView isSubviewCollapsed:self.splitView.arrangedSubviews.firstObject];
- menuItem.title = isShown ? @"Hide Layers" : @"Show Layers";
- return YES;
- }
- if (menuItem.action == @selector(toggleStyleLayers:)) {
- NSInteger row = self.styleLayersTableView.clickedRow;
- if (row == -1) {
- row = self.styleLayersTableView.selectedRow;
- }
- if (row == -1) {
- menuItem.title = @"Show";
- } else {
- BOOL isVisible = self.mapView.style.reversedLayers[row].visible;
- menuItem.title = isVisible ? @"Hide" : @"Show";
- }
- return row != -1;
- }
- if (menuItem.action == @selector(deleteStyleLayers:)) {
- return self.styleLayersTableView.clickedRow >= 0 || self.styleLayersTableView.selectedRow >= 0;
- }
- if (menuItem.action == @selector(setLabelLanguage:)) {
- menuItem.state = menuItem.tag == _isLocalizingLabels ? NSOnState: NSOffState;
- if (menuItem.tag) {
- NSLocale *locale = [NSLocale localeWithLocaleIdentifier:[NSBundle mainBundle].developmentLocalization];
- NSString *preferredLanguage = [MGLVectorTileSource preferredMapboxStreetsLanguage] ?: @"en";
- menuItem.title = [locale displayNameForKey:NSLocaleIdentifier value:preferredLanguage];
- }
- return YES;
- }
- if (menuItem.action == @selector(manipulateStyle:)) {
- return YES;
- }
- if (menuItem.action == @selector(dropPin:)) {
- id <MGLAnnotation> annotationUnderCursor = [self.mapView annotationAtPoint:_mouseLocationForMapViewContextMenu];
- menuItem.hidden = annotationUnderCursor != nil;
- return YES;
- }
- if (menuItem.action == @selector(removePin:)) {
- id <MGLAnnotation> annotationUnderCursor = [self.mapView annotationAtPoint:_mouseLocationForMapViewContextMenu];
- menuItem.hidden = annotationUnderCursor == nil;
- return YES;
- }
- if (menuItem.action == @selector(selectFeatures:)) {
- return YES;
- }
- if (menuItem.action == @selector(toggleTileBoundaries:)) {
- BOOL isShown = self.mapView.debugMask & MGLMapDebugTileBoundariesMask;
- menuItem.title = isShown ? @"Hide Tile Boundaries" : @"Show Tile Boundaries";
- return YES;
- }
- if (menuItem.action == @selector(toggleTileInfo:)) {
- BOOL isShown = self.mapView.debugMask & MGLMapDebugTileInfoMask;
- menuItem.title = isShown ? @"Hide Tile Info" : @"Show Tile Info";
- return YES;
- }
- if (menuItem.action == @selector(toggleTileTimestamps:)) {
- BOOL isShown = self.mapView.debugMask & MGLMapDebugTimestampsMask;
- menuItem.title = isShown ? @"Hide Tile Timestamps" : @"Show Tile Timestamps";
- return YES;
- }
- if (menuItem.action == @selector(toggleCollisionBoxes:)) {
- BOOL isShown = self.mapView.debugMask & MGLMapDebugCollisionBoxesMask;
- menuItem.title = isShown ? @"Hide Collision Boxes" : @"Show Collision Boxes";
- return YES;
- }
- if (menuItem.action == @selector(toggleOverdrawVisualization:)) {
- BOOL isShown = self.mapView.debugMask & MGLMapDebugOverdrawVisualizationMask;
- menuItem.title = isShown ? @"Hide Overdraw Visualization" : @"Show Overdraw Visualization";
- return YES;
- }
- if (menuItem.action == @selector(showColorBuffer:)) {
- BOOL enabled = self.mapView.debugMask & (MGLMapDebugStencilBufferMask | MGLMapDebugDepthBufferMask);
- menuItem.state = enabled ? NSOffState : NSOnState;
- return YES;
- }
- if (menuItem.action == @selector(showStencilBuffer:)) {
- BOOL enabled = self.mapView.debugMask & MGLMapDebugStencilBufferMask;
- menuItem.state = enabled ? NSOnState : NSOffState;
- return YES;
- }
- if (menuItem.action == @selector(showDepthBuffer:)) {
- BOOL enabled = self.mapView.debugMask & MGLMapDebugDepthBufferMask;
- menuItem.state = enabled ? NSOnState : NSOffState;
- return YES;
- }
- if (menuItem.action == @selector(toggleShowsToolTipsOnDroppedPins:)) {
- BOOL isShown = _showsToolTipsOnDroppedPins;
- menuItem.title = isShown ? @"Hide Tooltips on Dropped Pins" : @"Show Tooltips on Dropped Pins";
- return YES;
- }
- if (menuItem.action == @selector(toggleRandomizesCursorsOnDroppedPins:)) {
- BOOL isRandom = _randomizesCursorsOnDroppedPins;
- menuItem.title = isRandom ? @"Use Default Cursor for Dropped Pins" : @"Use Random Cursors for Dropped Pins";
- return _showsToolTipsOnDroppedPins;
- }
- if (menuItem.action == @selector(dropManyPins:)) {
- return YES;
- }
- if (menuItem.action == @selector(drawPolygonAndPolyLineAnnotations:)) {
- return !_isShowingPolygonAndPolylineAnnotations;
- }
- if (menuItem.action == @selector(drawAnimatedAnnotation:)) {
- return !_isShowingAnimatedAnnotation;
- }
- if (menuItem.action == @selector(addAnimatedImageSource:)) {
- return YES;
- }
- if (menuItem.action == @selector(insertCustomStyleLayer:)) {
- return ![self.mapView.style layerWithIdentifier:@"mbx-custom"];
- }
- if (menuItem.action == @selector(insertGraticuleLayer:)) {
- return ![self.mapView.style sourceWithIdentifier:@"graticule"];
- }
- if (menuItem.action == @selector(selectOffscreenPointAnnotation:)) {
- return YES;
- }
- if (menuItem.action == @selector(showAllAnnotations:) || menuItem.action == @selector(removeAllAnnotations:)) {
- return self.mapView.annotations.count > 0;
- }
- if (menuItem.action == @selector(enhanceTerrain:)) {
- return YES;
- }
- if (menuItem.action == @selector(startWorldTour:)) {
- return !_isTouringWorld;
- }
- if (menuItem.action == @selector(stopWorldTour:)) {
- return _isTouringWorld;
- }
- if (menuItem.action == @selector(addOfflinePack:)) {
- NSURL *styleURL = self.mapView.styleURL;
- return !styleURL.isFileURL;
- }
- if (menuItem.action == @selector(giveFeedback:)) {
- return YES;
- }
- if (menuItem.action == @selector(import:)) {
- return YES;
- }
- if (menuItem.action == @selector(takeSnapshot:)) {
- return !(_snapshotter && [_snapshotter isLoading]);
- }
- return NO;
-}
-
-- (NSUInteger)indexOfStyleInToolbarItem {
- if (![MGLAccountManager accessToken]) {
- return NSNotFound;
- }
-
- NSArray *styleURLs = @[
- [MGLStyle streetsStyleURL],
- [MGLStyle outdoorsStyleURL],
- [MGLStyle lightStyleURL],
- [MGLStyle darkStyleURL],
- [MGLStyle satelliteStyleURL],
- [MGLStyle satelliteStreetsStyleURL],
- ];
- return [styleURLs indexOfObject:self.mapView.styleURL];
-}
-
-- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem {
- if (!self.mapView) {
- return NO;
- }
-
- SEL action = toolbarItem.action;
- if (action == @selector(showShareMenu:)) {
- [(NSButton *)toolbarItem.view sendActionOn:NSLeftMouseDownMask];
- if (![MGLAccountManager accessToken]) {
- return NO;
- }
- NSURL *styleURL = self.mapView.styleURL;
- return ([styleURL.scheme isEqualToString:@"mapbox"]
- && [styleURL.pathComponents.firstObject isEqualToString:@"styles"]);
- }
- if (action == @selector(showStyle:)) {
- NSPopUpButton *popUpButton = (NSPopUpButton *)toolbarItem.view;
- NSInteger index = self.indexOfStyleInToolbarItem;
- if (index == NSNotFound) {
- index = -1;
- }
- [popUpButton selectItemAtIndex:index];
- if (index == -1) {
- NSString *name = self.mapView.style.name;
- popUpButton.title = name ?: @"Custom";
- }
- }
- if (action == @selector(toggleLayers:)) {
- BOOL isShown = ![self.splitView isSubviewCollapsed:self.splitView.arrangedSubviews.firstObject];
- [(NSButton *)toolbarItem.view setState:isShown ? NSOnState : NSOffState];
- }
- return NO;
-}
-
-#pragma mark NSSharingServicePickerDelegate methods
-
-- (NSArray<NSSharingService *> *)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker sharingServicesForItems:(NSArray *)items proposedSharingServices:(NSArray<NSSharingService *> *)proposedServices {
- NSURL *shareURL = self.shareURL;
- NSURL *browserURL = [[NSWorkspace sharedWorkspace] URLForApplicationToOpenURL:shareURL];
- NSImage *browserIcon = [[NSWorkspace sharedWorkspace] iconForFile:browserURL.path];
- NSString *browserName = [[NSFileManager defaultManager] displayNameAtPath:browserURL.path];
- NSString *browserServiceName = [NSString stringWithFormat:@"Open in %@", browserName];
-
- NSSharingService *browserService = [[NSSharingService alloc] initWithTitle:browserServiceName
- image:browserIcon
- alternateImage:nil
- handler:^{
- [[NSWorkspace sharedWorkspace] openURL:self.shareURL];
- }];
-
- NSMutableArray *sharingServices = [proposedServices mutableCopy];
- [sharingServices insertObject:browserService atIndex:0];
- return sharingServices;
-}
-
-#pragma mark NSMenuDelegate methods
-
-- (void)menuWillOpen:(NSMenu *)menu {
- if (menu == self.mapViewContextMenu) {
- _mouseLocationForMapViewContextMenu = [self.window.contentView convertPoint:self.window.mouseLocationOutsideOfEventStream
- toView:self.mapView];
- }
-}
-
-#pragma mark NSSplitViewDelegate methods
-
-- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview {
- return subview != self.mapView;
-}
-
-- (BOOL)splitView:(NSSplitView *)splitView shouldCollapseSubview:(NSView *)subview forDoubleClickOnDividerAtIndex:(NSInteger)dividerIndex {
- return YES;
-}
-
-#pragma mark MGLMapViewDelegate methods
-
-- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style {
- [self updateLabels];
-}
-
-- (BOOL)mapView:(MGLMapView *)mapView annotationCanShowCallout:(id <MGLAnnotation>)annotation {
- return YES;
-}
-
-- (MGLAnnotationImage *)mapView:(MGLMapView *)mapView imageForAnnotation:(id <MGLAnnotation>)annotation {
- MGLAnnotationImage *annotationImage = [self.mapView dequeueReusableAnnotationImageWithIdentifier:MGLDroppedPinAnnotationImageIdentifier];
- if (!annotationImage) {
- NSString *imagePath = [[NSBundle bundleForClass:[MGLMapView class]]
- pathForResource:@"default_marker" ofType:@"pdf"];
- NSImage *image = [[NSImage alloc] initWithContentsOfFile:imagePath];
- NSRect alignmentRect = image.alignmentRect;
- alignmentRect.origin.y = NSMidY(alignmentRect);
- alignmentRect.size.height /= 2;
- image.alignmentRect = alignmentRect;
- annotationImage = [MGLAnnotationImage annotationImageWithImage:image
- reuseIdentifier:MGLDroppedPinAnnotationImageIdentifier];
- }
- if (_randomizesCursorsOnDroppedPins) {
- NSArray *cursors = @[
- [NSCursor IBeamCursor],
- [NSCursor crosshairCursor],
- [NSCursor pointingHandCursor],
- [NSCursor disappearingItemCursor],
- [NSCursor IBeamCursorForVerticalLayout],
- [NSCursor operationNotAllowedCursor],
- [NSCursor dragLinkCursor],
- [NSCursor dragCopyCursor],
- [NSCursor contextualMenuCursor],
- ];
- annotationImage.cursor = cursors[arc4random_uniform((uint32_t)cursors.count) % cursors.count];
- } else {
- annotationImage.cursor = nil;
- }
- return annotationImage;
-}
-
-- (void)mapView:(MGLMapView *)mapView didSelectAnnotation:(id <MGLAnnotation>)annotation {
- if ([annotation isKindOfClass:[DroppedPinAnnotation class]]) {
- DroppedPinAnnotation *droppedPin = (DroppedPinAnnotation *)annotation;
- [droppedPin resume];
- }
-}
-
-- (void)mapView:(MGLMapView *)mapView didDeselectAnnotation:(id <MGLAnnotation>)annotation {
- if ([annotation isKindOfClass:[DroppedPinAnnotation class]]) {
- DroppedPinAnnotation *droppedPin = (DroppedPinAnnotation *)annotation;
- [droppedPin pause];
- }
-}
-
-- (CGFloat)mapView:(MGLMapView *)mapView alphaForShapeAnnotation:(MGLShape *)annotation {
- return 0.8;
-}
-
-#pragma mark - MGLComputedShapeSourceDataSource
-- (NSArray<id <MGLFeature>>*)featuresInCoordinateBounds:(MGLCoordinateBounds)bounds zoomLevel:(NSUInteger)zoom {
- double gridSpacing;
- if(zoom >= 13) {
- gridSpacing = 0.01;
- } else if(zoom >= 11) {
- gridSpacing = 0.05;
- } else if(zoom == 10) {
- gridSpacing = .1;
- } else if(zoom == 9) {
- gridSpacing = 0.25;
- } else if(zoom == 8) {
- gridSpacing = 0.5;
- } else if (zoom >= 6) {
- gridSpacing = 1;
- } else if(zoom == 5) {
- gridSpacing = 2;
- } else if(zoom >= 4) {
- gridSpacing = 5;
- } else if(zoom == 2) {
- gridSpacing = 10;
- } else {
- gridSpacing = 20;
- }
-
- NSMutableArray <id <MGLFeature>> * features = [NSMutableArray array];
- CLLocationCoordinate2D coords[2];
-
- for (double y = ceil(bounds.ne.latitude / gridSpacing) * gridSpacing; y >= floor(bounds.sw.latitude / gridSpacing) * gridSpacing; y -= gridSpacing) {
- coords[0] = CLLocationCoordinate2DMake(y, bounds.sw.longitude);
- coords[1] = CLLocationCoordinate2DMake(y, bounds.ne.longitude);
- MGLPolylineFeature *feature = [MGLPolylineFeature polylineWithCoordinates:coords count:2];
- feature.attributes = @{@"value": @(y)};
- [features addObject:feature];
- }
-
- for (double x = floor(bounds.sw.longitude / gridSpacing) * gridSpacing; x <= ceil(bounds.ne.longitude / gridSpacing) * gridSpacing; x += gridSpacing) {
- coords[0] = CLLocationCoordinate2DMake(bounds.sw.latitude, x);
- coords[1] = CLLocationCoordinate2DMake(bounds.ne.latitude, x);
- MGLPolylineFeature *feature = [MGLPolylineFeature polylineWithCoordinates:coords count:2];
- feature.attributes = @{@"value": @(x)};
- [features addObject:feature];
- }
-
- return features;
-}
-
-@end
-
-@interface ValidatedToolbarItem : NSToolbarItem
-
-@end
-
-@implementation ValidatedToolbarItem
-
-- (void)validate {
- [(MapDocument *)self.toolbar.delegate validateToolbarItem:self];
-}
-
-@end
diff --git a/platform/macos/app/OfflinePackNameValueTransformer.h b/platform/macos/app/OfflinePackNameValueTransformer.h
deleted file mode 100644
index 11fe3ff441..0000000000
--- a/platform/macos/app/OfflinePackNameValueTransformer.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-
-@interface OfflinePackNameValueTransformer : NSValueTransformer
-
-@end
diff --git a/platform/macos/app/OfflinePackNameValueTransformer.m b/platform/macos/app/OfflinePackNameValueTransformer.m
deleted file mode 100644
index d1b3c20ac1..0000000000
--- a/platform/macos/app/OfflinePackNameValueTransformer.m
+++ /dev/null
@@ -1,33 +0,0 @@
-#import "OfflinePackNameValueTransformer.h"
-
-static NSString * const MBXOfflinePackContextNameKey = @"Name";
-
-@implementation OfflinePackNameValueTransformer
-
-+ (Class)transformedValueClass {
- return [NSString class];
-}
-
-+ (BOOL)allowsReverseTransformation {
- return YES;
-}
-
-- (NSString *)transformedValue:(NSData *)context {
- NSAssert([context isKindOfClass:[NSData class]], @"Context should be NSData.");
-
- NSDictionary *userInfo = [NSKeyedUnarchiver unarchiveObjectWithData:context];
- NSAssert([userInfo isKindOfClass:[NSDictionary class]], @"Context of offline pack isn’t a dictionary.");
- NSString *name = userInfo[MBXOfflinePackContextNameKey];
- NSAssert([name isKindOfClass:[NSString class]], @"Name of offline pack isn’t a string.");
- return name;
-}
-
-- (NSData *)reverseTransformedValue:(NSString *)name {
- NSAssert([name isKindOfClass:[NSString class]], @"Name should be a string.");
-
- return [NSKeyedArchiver archivedDataWithRootObject:@{
- MBXOfflinePackContextNameKey: name,
- }];
-}
-
-@end
diff --git a/platform/macos/app/StyleLayerIconTransformer.h b/platform/macos/app/StyleLayerIconTransformer.h
deleted file mode 100644
index 1af1d512d6..0000000000
--- a/platform/macos/app/StyleLayerIconTransformer.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-
-@interface StyleLayerIconTransformer : NSValueTransformer
-
-@end
diff --git a/platform/macos/app/StyleLayerIconTransformer.m b/platform/macos/app/StyleLayerIconTransformer.m
deleted file mode 100644
index c089165924..0000000000
--- a/platform/macos/app/StyleLayerIconTransformer.m
+++ /dev/null
@@ -1,47 +0,0 @@
-#import "StyleLayerIconTransformer.h"
-
-#import <Mapbox/Mapbox.h>
-
-@implementation StyleLayerIconTransformer
-
-+ (Class)transformedValueClass {
- return [NSString class];
-}
-
-+ (BOOL)allowsReverseTransformation {
- return NO;
-}
-
-- (id)transformedValue:(MGLStyleLayer *)layer {
- if ([layer isKindOfClass:[MGLBackgroundStyleLayer class]]) {
- return [NSImage imageNamed:@"background"];
- }
- if ([layer isKindOfClass:[MGLCircleStyleLayer class]]) {
- return [NSImage imageNamed:@"circle"];
- }
- if ([layer isKindOfClass:[MGLFillStyleLayer class]]) {
- return [NSImage imageNamed:@"fill"];
- }
- if ([layer isKindOfClass:[MGLFillExtrusionStyleLayer class]]) {
- return [NSImage imageNamed:@"fill-extrusion"];
- }
- if ([layer isKindOfClass:[MGLLineStyleLayer class]]) {
- return [NSImage imageNamed:@"NSListViewTemplate"];
- }
- if ([layer isKindOfClass:[MGLRasterStyleLayer class]]) {
- return [[NSWorkspace sharedWorkspace] iconForFileType:@"jpg"];
- }
- if ([layer isKindOfClass:[MGLSymbolStyleLayer class]]) {
- return [NSImage imageNamed:@"symbol"];
- }
- if ([layer isKindOfClass:[MGLHeatmapStyleLayer class]]) {
- return [NSImage imageNamed:@"heatmap"];
- }
- if ([layer isKindOfClass:[MGLHillshadeStyleLayer class]]) {
- return [NSImage imageNamed:@"hillshade"];
- }
-
- return nil;
-}
-
-@end
diff --git a/platform/macos/app/TimeIntervalTransformer.h b/platform/macos/app/TimeIntervalTransformer.h
deleted file mode 100644
index ca88ad2cd1..0000000000
--- a/platform/macos/app/TimeIntervalTransformer.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-
-@interface TimeIntervalTransformer : NSValueTransformer
-
-@end
diff --git a/platform/macos/app/TimeIntervalTransformer.m b/platform/macos/app/TimeIntervalTransformer.m
deleted file mode 100644
index 2c9cb6fc74..0000000000
--- a/platform/macos/app/TimeIntervalTransformer.m
+++ /dev/null
@@ -1,53 +0,0 @@
-#import "TimeIntervalTransformer.h"
-
-@implementation TimeIntervalTransformer
-
-+ (Class)transformedValueClass {
- return [NSString class];
-}
-
-+ (BOOL)allowsReverseTransformation {
- return NO;
-}
-
-NSString *NumberAndUnitString(NSInteger quantity, NSString *singular, NSString *plural) {
- return [NSString stringWithFormat:@"%ld %@", quantity, quantity == 1 ? singular : plural];
-}
-
-- (id)transformedValue:(id)value {
- if (![value isKindOfClass:[NSValue class]]) {
- return nil;
- }
-
- NSTimeInterval timeInterval = [value doubleValue];
- NSInteger seconds = floor(timeInterval);
- NSInteger minutes = floor(seconds / 60);
- seconds -= minutes * 60;
- NSInteger hours = floor(minutes / 60);
- minutes -= hours * 60;
- NSInteger days = floor(hours / 24);
- hours -= days * 24;
- NSInteger weeks = floor(days) / 7;
- days -= weeks * 7;
-
- NSMutableArray *components = [NSMutableArray array];
- if (seconds || timeInterval < 60) {
- [components addObject:NumberAndUnitString(seconds, @"second", @"seconds")];
- }
- if (minutes) {
- [components insertObject:NumberAndUnitString(minutes, @"minute", @"minutes") atIndex:0];
- }
- if (hours) {
- [components insertObject:NumberAndUnitString(hours, @"hour", @"hours") atIndex:0];
- }
- if (days) {
- [components insertObject:NumberAndUnitString(days, @"day", @"days") atIndex:0];
- }
- if (weeks) {
- [components insertObject:NumberAndUnitString(weeks, @"week", @"weeks") atIndex:0];
- }
-
- return [components componentsJoinedByString:@", "];
-}
-
-@end
diff --git a/platform/macos/app/ar.lproj/Localizable.strings b/platform/macos/app/ar.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/ar.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/bg.lproj/Localizable.strings b/platform/macos/app/bg.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/bg.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/ca.lproj/Localizable.strings b/platform/macos/app/ca.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/ca.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/cs.lproj/Localizable.strings b/platform/macos/app/cs.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/cs.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/da.lproj/Localizable.strings b/platform/macos/app/da.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/da.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/de.lproj/Localizable.strings b/platform/macos/app/de.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/de.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/es.lproj/Localizable.strings b/platform/macos/app/es.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/es.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/fi.lproj/Localizable.strings b/platform/macos/app/fi.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/fi.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/fr.lproj/Localizable.strings b/platform/macos/app/fr.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/fr.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/gl.lproj/Localizable.strings b/platform/macos/app/gl.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/gl.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/he.lproj/Localizable.strings b/platform/macos/app/he.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/he.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/heatmap.json b/platform/macos/app/heatmap.json
deleted file mode 100644
index 6469e57022..0000000000
--- a/platform/macos/app/heatmap.json
+++ /dev/null
@@ -1,809 +0,0 @@
-{
- "version": 8,
- "name": "Basic Heatmap",
- "center": [
- 30.49860107152665,
- 50.459868549177486
- ],
- "zoom": 14.033276876197775,
- "bearing": 0,
- "pitch": 0,
- "sources": {
- "mapbox": {
- "url": "mapbox://mapbox.mapbox-streets-v7",
- "type": "vector"
- }
- },
- "sprite": "mapbox://sprites/mourner/cjcgg2bl16cf42snvcbbaf09z",
- "glyphs": "mapbox://fonts/mourner/{fontstack}/{range}.pbf",
- "layers": [
- {
- "id": "background",
- "type": "background",
- "paint": {
- "background-color": "#dedede"
- }
- },
- {
- "id": "landuse_overlay_national_park",
- "type": "fill",
- "source": "mapbox",
- "source-layer": "landuse_overlay",
- "filter": [
- "==",
- "class",
- "national_park"
- ],
- "paint": {
- "fill-color": "#d2edae",
- "fill-opacity": 0.75
- }
- },
- {
- "id": "landuse_park",
- "type": "fill",
- "source": "mapbox",
- "source-layer": "landuse",
- "filter": [
- "==",
- "class",
- "park"
- ],
- "paint": {
- "fill-color": "#d2edae"
- }
- },
- {
- "id": "waterway",
- "type": "line",
- "source": "mapbox",
- "source-layer": "waterway",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "in",
- "class",
- "canal",
- "river"
- ]
- ],
- "paint": {
- "line-color": "#a0cfdf",
- "line-width": {
- "base": 1.4,
- "stops": [
- [
- 8,
- 0.5
- ],
- [
- 20,
- 15
- ]
- ]
- }
- }
- },
- {
- "id": "water",
- "type": "fill",
- "source": "mapbox",
- "source-layer": "water",
- "paint": {
- "fill-color": "#a0cfdf"
- }
- },
- {
- "id": "building",
- "type": "fill",
- "source": "mapbox",
- "source-layer": "building",
- "paint": {
- "fill-color": "#d6d6d6"
- }
- },
- {
- "id": "tunnel_minor",
- "type": "line",
- "source": "mapbox",
- "source-layer": "road",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "all",
- [
- "==",
- "structure",
- "tunnel"
- ],
- [
- "in",
- "class",
- "link",
- "motorway_link",
- "path",
- "pedestrian",
- "service",
- "street",
- "street_limited",
- "track"
- ]
- ]
- ],
- "layout": {
- "line-cap": "butt",
- "line-join": "miter"
- },
- "paint": {
- "line-color": "#efefef",
- "line-width": {
- "base": 1.55,
- "stops": [
- [
- 4,
- 0.25
- ],
- [
- 20,
- 30
- ]
- ]
- },
- "line-dasharray": [
- 0.36,
- 0.18
- ]
- }
- },
- {
- "id": "tunnel_major",
- "type": "line",
- "source": "mapbox",
- "source-layer": "road",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "all",
- [
- "==",
- "structure",
- "tunnel"
- ],
- [
- "in",
- "class",
- "motorway",
- "primary",
- "secondary",
- "tertiary",
- "trunk"
- ]
- ]
- ],
- "layout": {
- "line-cap": "butt",
- "line-join": "miter"
- },
- "paint": {
- "line-color": "#fff",
- "line-width": {
- "base": 1.4,
- "stops": [
- [
- 6,
- 0.5
- ],
- [
- 20,
- 30
- ]
- ]
- },
- "line-dasharray": [
- 0.28,
- 0.14
- ]
- }
- },
- {
- "id": "road_minor",
- "type": "line",
- "source": "mapbox",
- "source-layer": "road",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "all",
- [
- "in",
- "class",
- "link",
- "motorway_link",
- "path",
- "pedestrian",
- "service",
- "street",
- "street_limited",
- "track"
- ],
- [
- "in",
- "structure",
- "ford",
- "none"
- ]
- ]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#efefef",
- "line-width": {
- "base": 1.55,
- "stops": [
- [
- 4,
- 0.25
- ],
- [
- 20,
- 30
- ]
- ]
- }
- }
- },
- {
- "id": "road_major",
- "type": "line",
- "source": "mapbox",
- "source-layer": "road",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "all",
- [
- "in",
- "class",
- "motorway",
- "primary",
- "secondary",
- "tertiary",
- "trunk"
- ],
- [
- "in",
- "structure",
- "ford",
- "none"
- ]
- ]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff",
- "line-width": {
- "base": 1.4,
- "stops": [
- [
- 6,
- 0.5
- ],
- [
- 20,
- 30
- ]
- ]
- }
- }
- },
- {
- "id": "bridge_minor case",
- "type": "line",
- "source": "mapbox",
- "source-layer": "road",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "all",
- [
- "==",
- "structure",
- "bridge"
- ],
- [
- "in",
- "class",
- "link",
- "motorway_link",
- "path",
- "pedestrian",
- "service",
- "street",
- "street_limited",
- "track"
- ]
- ]
- ],
- "layout": {
- "line-cap": "butt",
- "line-join": "miter"
- },
- "paint": {
- "line-color": "#dedede",
- "line-width": {
- "base": 1.6,
- "stops": [
- [
- 12,
- 0.5
- ],
- [
- 20,
- 10
- ]
- ]
- },
- "line-gap-width": {
- "base": 1.55,
- "stops": [
- [
- 4,
- 0.25
- ],
- [
- 20,
- 30
- ]
- ]
- }
- }
- },
- {
- "id": "bridge_major case",
- "type": "line",
- "source": "mapbox",
- "source-layer": "road",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "all",
- [
- "==",
- "structure",
- "bridge"
- ],
- [
- "in",
- "class",
- "motorway",
- "primary",
- "secondary",
- "tertiary",
- "trunk"
- ]
- ]
- ],
- "layout": {
- "line-cap": "butt",
- "line-join": "miter"
- },
- "paint": {
- "line-color": "#dedede",
- "line-width": {
- "base": 1.6,
- "stops": [
- [
- 12,
- 0.5
- ],
- [
- 20,
- 10
- ]
- ]
- },
- "line-gap-width": {
- "base": 1.55,
- "stops": [
- [
- 4,
- 0.25
- ],
- [
- 20,
- 30
- ]
- ]
- }
- }
- },
- {
- "id": "bridge_minor",
- "type": "line",
- "source": "mapbox",
- "source-layer": "road",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "all",
- [
- "==",
- "structure",
- "bridge"
- ],
- [
- "in",
- "class",
- "link",
- "motorway_link",
- "path",
- "pedestrian",
- "service",
- "street",
- "street_limited",
- "track"
- ]
- ]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#efefef",
- "line-width": {
- "base": 1.55,
- "stops": [
- [
- 4,
- 0.25
- ],
- [
- 20,
- 30
- ]
- ]
- }
- }
- },
- {
- "id": "bridge_major",
- "type": "line",
- "source": "mapbox",
- "source-layer": "road",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "all",
- [
- "==",
- "structure",
- "bridge"
- ],
- [
- "in",
- "class",
- "motorway",
- "primary",
- "secondary",
- "tertiary",
- "trunk"
- ]
- ]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff",
- "line-width": {
- "base": 1.4,
- "stops": [
- [
- 6,
- 0.5
- ],
- [
- 20,
- 30
- ]
- ]
- }
- }
- },
- {
- "id": "admin_country",
- "type": "line",
- "source": "mapbox",
- "source-layer": "admin",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "all",
- [
- "<=",
- "admin_level",
- 2
- ],
- [
- "==",
- "maritime",
- 0
- ]
- ]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#8b8a8a",
- "line-width": {
- "base": 1.3,
- "stops": [
- [
- 3,
- 0.5
- ],
- [
- 22,
- 15
- ]
- ]
- }
- }
- },
- {
- "id": "road_major_label",
- "type": "symbol",
- "source": "mapbox",
- "source-layer": "road_label",
- "filter": [
- "all",
- [
- "==",
- "$type",
- "LineString"
- ],
- [
- "in",
- "class",
- "motorway",
- "primary",
- "secondary",
- "tertiary",
- "trunk"
- ]
- ],
- "layout": {
- "symbol-placement": "line",
- "text-field": "{name_en}",
- "text-font": [
- "Open Sans Semibold",
- "Arial Unicode MS Bold"
- ],
- "text-transform": "uppercase",
- "text-letter-spacing": 0.1,
- "text-size": {
- "base": 1.4,
- "stops": [
- [
- 10,
- 8
- ],
- [
- 20,
- 14
- ]
- ]
- }
- },
- "paint": {
- "text-color": "#666",
- "text-halo-color": "rgba(255,255,255,0.75)",
- "text-halo-width": 2
- }
- },
- {
- "id": "place_label_other",
- "type": "symbol",
- "source": "mapbox",
- "source-layer": "place_label",
- "minzoom": 8,
- "filter": [
- "all",
- [
- "==",
- "$type",
- "Point"
- ],
- [
- "in",
- "type",
- "hamlet",
- "island",
- "neighbourhood",
- "suburb",
- "town",
- "village"
- ]
- ],
- "layout": {
- "text-field": "{name_en}",
- "text-font": [
- "Open Sans Semibold",
- "Arial Unicode MS Bold"
- ],
- "text-max-width": 6,
- "text-size": {
- "stops": [
- [
- 6,
- 12
- ],
- [
- 12,
- 16
- ]
- ]
- }
- },
- "paint": {
- "text-color": "#666",
- "text-halo-color": "rgba(255,255,255,0.75)",
- "text-halo-width": 1,
- "text-halo-blur": 1
- }
- },
- {
- "id": "place_label_city",
- "type": "symbol",
- "source": "mapbox",
- "source-layer": "place_label",
- "maxzoom": 16,
- "filter": [
- "all",
- [
- "==",
- "$type",
- "Point"
- ],
- [
- "==",
- "type",
- "city"
- ]
- ],
- "layout": {
- "text-field": "{name_en}",
- "text-font": [
- "Open Sans Bold",
- "Arial Unicode MS Bold"
- ],
- "text-max-width": 10,
- "text-size": {
- "stops": [
- [
- 3,
- 12
- ],
- [
- 8,
- 16
- ]
- ]
- }
- },
- "paint": {
- "text-color": "#666",
- "text-halo-color": "rgba(255,255,255,0.75)",
- "text-halo-width": 1,
- "text-halo-blur": 1
- }
- },
- {
- "id": "country_label",
- "type": "symbol",
- "source": "mapbox",
- "source-layer": "country_label",
- "maxzoom": 12,
- "filter": [
- "==",
- "$type",
- "Point"
- ],
- "layout": {
- "text-field": "{name_en}",
- "text-font": [
- "Open Sans Regular",
- "Arial Unicode MS Regular"
- ],
- "text-max-width": 10,
- "text-size": {
- "stops": [
- [
- 3,
- 14
- ],
- [
- 8,
- 22
- ]
- ]
- }
- },
- "paint": {
- "text-color": "#666",
- "text-halo-color": "rgba(255,255,255,0.75)",
- "text-halo-width": 1,
- "text-halo-blur": 1
- }
- },
- {
- "id": "road-heatmap",
- "type": "heatmap",
- "source": "mapbox",
- "source-layer": "road",
- "paint": {
- "heatmap-intensity": 1
- }
- }
- ]
-}
diff --git a/platform/macos/app/hu.lproj/Localizable.strings b/platform/macos/app/hu.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/hu.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/ja.lproj/Localizable.strings b/platform/macos/app/ja.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/ja.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/ko.lproj/Localizable.strings b/platform/macos/app/ko.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/ko.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/lt.lproj/Localizable.strings b/platform/macos/app/lt.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/lt.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/main.m b/platform/macos/app/main.m
deleted file mode 100644
index 8a6799b414..0000000000
--- a/platform/macos/app/main.m
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Cocoa/Cocoa.h>
-
-int main(int argc, const char * argv[]) {
- return NSApplicationMain(argc, argv);
-}
diff --git a/platform/macos/app/nl.lproj/Localizable.strings b/platform/macos/app/nl.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/nl.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/pl.lproj/Localizable.strings b/platform/macos/app/pl.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/pl.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/pt-BR.lproj/Localizable.strings b/platform/macos/app/pt-BR.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/pt-BR.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/pt-PT.lproj/Localizable.strings b/platform/macos/app/pt-PT.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/pt-PT.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/resources/background.svg b/platform/macos/app/resources/background.svg
deleted file mode 100644
index 39451e8b13..0000000000
--- a/platform/macos/app/resources/background.svg
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16"
- height="16"
- viewBox="0 0 16 16"
- id="svg4148"
- version="1.1"
- inkscape:version="0.91 r13725"
- sodipodi:docname="background.svg"
- inkscape:export-filename="/Users/mxn/Desktop/symbol.png"
- inkscape:export-xdpi="90.000244"
- inkscape:export-ydpi="90.000244">
- <defs
- id="defs4150">
- <inkscape:path-effect
- effect="spiro"
- id="path-effect4877"
- is_visible="true" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="10.48171"
- inkscape:cx="8.5046012"
- inkscape:cy="7.2814248"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- units="px"
- inkscape:window-width="1280"
- inkscape:window-height="751"
- inkscape:window-x="0"
- inkscape:window-y="1"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1036.3622)">
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 2.8621284,1037.3477 c 2.5635185,5.7342 4.4524268,0.068 4.4524268,0.068 l 0.067461,-5e-4 c 2.4960576,4.9921 4.1825828,-0.1349 4.1825828,-0.1349 l 0.02385,0 c 2.765902,5.5993 4.091271,0 4.091271,0 l 0.02385,0 c 3.170668,5.9366 4.293654,0 4.293654,0"
- id="path4893"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m -4.1486618,1041.2371 c 2.5635185,5.7342 4.45242682,0.068 4.45242682,0.068 l 0.067461,-5e-4 c 2.49605748,4.9921 4.18258278,-0.1349 4.18258278,-0.1349 l 0.023851,0 c 2.7659014,5.5993 4.0912704,0 4.0912704,0 l 0.02385,0 c 3.1706688,5.9366 4.2936548,0 4.2936548,0"
- id="path4893-1"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 3.7221911,1045.5303 c 2.5635186,5.7342 4.4524269,0.068 4.4524269,0.068 l 0.067461,-5e-4 c 2.496057,4.9921 4.182583,-0.1349 4.182583,-0.1349 l 0.02385,0 c 2.765901,5.5993 4.09127,0 4.09127,0 l 0.02385,0 c 3.170668,5.9366 4.293654,0 4.293654,0"
- id="path4893-2"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m -3.5762361,1049.3465 c 2.5635185,5.7342 4.4524268,0.068 4.4524268,0.068 l 0.067461,-5e-4 c 2.4960575,4.9921 4.1825828,-0.1349 4.1825828,-0.1349 l 0.023851,0 c 2.7659014,5.5993 4.0912702,0 4.0912702,0 l 0.02385,0 c 3.1706683,5.9366 4.2936543,0 4.2936543,0"
- id="path4893-9"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
- </g>
-</svg>
diff --git a/platform/macos/app/resources/circle.svg b/platform/macos/app/resources/circle.svg
deleted file mode 100644
index 91e0b11990..0000000000
--- a/platform/macos/app/resources/circle.svg
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16"
- height="16"
- viewBox="0 0 16 16"
- id="svg4148"
- version="1.1"
- inkscape:version="0.91 r13725"
- sodipodi:docname="circle.svg"
- inkscape:export-filename="/Users/mxn/Desktop/symbol.png"
- inkscape:export-xdpi="90.000244"
- inkscape:export-ydpi="90.000244">
- <defs
- id="defs4150" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="7.9195959"
- inkscape:cx="3.8463784"
- inkscape:cy="-0.92094419"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- units="px"
- inkscape:window-width="1280"
- inkscape:window-height="751"
- inkscape:window-x="0"
- inkscape:window-y="1"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1036.3622)">
- <circle
- style="opacity:1;fill:none;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:1.49974895;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4778"
- cx="8"
- cy="1044.3622"
- r="7.2501254" />
- </g>
-</svg>
diff --git a/platform/macos/app/resources/fill-extrusion.svg b/platform/macos/app/resources/fill-extrusion.svg
deleted file mode 100644
index 4052ba5253..0000000000
--- a/platform/macos/app/resources/fill-extrusion.svg
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16"
- height="16"
- viewBox="0 0 16 16"
- id="svg4148"
- version="1.1"
- inkscape:version="0.92.2 5c3e80d, 2017-08-06"
- sodipodi:docname="fill-extrusion.svg"
- inkscape:export-filename="/Users/mxn/Desktop/symbol.png"
- inkscape:export-xdpi="90.000244"
- inkscape:export-ydpi="90.000244">
- <defs
- id="defs4150">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="27.393974 : 17.772818 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="-8.2635625 : 18.670616 : 1"
- inkscape:persp3d-origin="3.017385 : 22.114843 : 1"
- id="perspective909" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="7.9195959"
- inkscape:cx="-4.7399183"
- inkscape:cy="19.282107"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- units="px"
- inkscape:window-width="1280"
- inkscape:window-height="755"
- inkscape:window-x="0"
- inkscape:window-y="1"
- inkscape:window-maximized="1"
- inkscape:snap-nodes="false"
- inkscape:snap-others="false"
- inkscape:snap-grids="false"
- inkscape:snap-to-guides="false"
- inkscape:snap-global="true"
- inkscape:snap-page="true" />
- <metadata
- id="metadata4153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1036.3622)">
- <g
- sodipodi:type="inkscape:box3d"
- id="g1023"
- style="opacity:1;fill:#000000;fill-opacity:0.15686275;fill-rule:evenodd;stroke:#000000;stroke-width:1.00157475;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:perspectiveID="#perspective909"
- inkscape:corner0="1.0855329 : -0.011103979 : 0 : 1"
- inkscape:corner7="0.098433878 : -0.023326662 : 0.57925509 : 1">
- <path
- sodipodi:type="inkscape:box3dside"
- id="path1025"
- style="fill:#353564;fill-rule:evenodd;stroke:#000000;stroke-width:1.00157475;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="6"
- d="m 15.705552,1037.8317 v 5.8607 l -5.210258,-2.1739 v -4.5868 z"
- points="15.705552,1043.6924 10.495294,1041.5185 10.495294,1036.9317 15.705552,1037.8317 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path1029"
- style="fill:#8686bf;fill-rule:evenodd;stroke:#000000;stroke-width:1.00157475;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="3"
- d="m 15.705552,1037.8317 -10.5037094,2.9137 v 11.1274 l 10.5037094,-8.1804 z"
- points="5.2018426,1040.7454 5.2018426,1051.8728 15.705552,1043.6924 15.705552,1037.8317 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path1031"
- style="fill:#d7d7ff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00157475;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="14"
- d="m 5.2018426,1040.7454 v 11.1274 l -4.64919579,-6.2775 v -7.2854 z"
- points="5.2018426,1051.8728 0.55264681,1045.5953 0.55264681,1038.3099 5.2018426,1040.7454 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path1027"
- style="fill:#4d4d9f;fill-rule:evenodd;stroke:#000000;stroke-width:1.00157475;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="5"
- d="m 15.705552,1037.8317 -10.5037094,2.9137 -4.64919579,-2.4355 9.94264719,-1.3782 z"
- points="5.2018426,1040.7454 0.55264681,1038.3099 10.495294,1036.9317 15.705552,1037.8317 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path1033"
- style="fill:#afafde;fill-rule:evenodd;stroke:#000000;stroke-width:1.00157475;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="13"
- d="m 15.705552,1043.6924 -10.5037094,8.1804 -4.64919579,-6.2775 9.94264719,-4.0768 z"
- points="5.2018426,1051.8728 0.55264681,1045.5953 10.495294,1041.5185 15.705552,1043.6924 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path1035"
- style="fill:#e9e9ff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00157475;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="11"
- d="m 10.495294,1036.9317 -9.94264719,1.3782 v 7.2854 l 9.94264719,-4.0768 z"
- points="0.55264681,1038.3099 0.55264681,1045.5953 10.495294,1041.5185 10.495294,1036.9317 " />
- </g>
- </g>
-</svg>
diff --git a/platform/macos/app/resources/fill.svg b/platform/macos/app/resources/fill.svg
deleted file mode 100644
index 7860a5fddb..0000000000
--- a/platform/macos/app/resources/fill.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16"
- height="16"
- viewBox="0 0 16 16"
- id="svg4148"
- version="1.1"
- inkscape:version="0.91 r13725"
- sodipodi:docname="fill.svg"
- inkscape:export-filename="/Users/mxn/Desktop/symbol.png"
- inkscape:export-xdpi="90.000244"
- inkscape:export-ydpi="90.000244">
- <defs
- id="defs4150" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="7.9195959"
- inkscape:cx="0.31084444"
- inkscape:cy="-0.92094419"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- units="px"
- inkscape:window-width="1280"
- inkscape:window-height="751"
- inkscape:window-x="0"
- inkscape:window-y="1"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1036.3622)">
- <rect
- style="opacity:1;fill:#000000;fill-opacity:0.15686275;fill-rule:evenodd;stroke:#000000;stroke-width:1.37142861;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect4818"
- width="14.628572"
- height="14.628572"
- x="0.68571424"
- y="1037.048" />
- </g>
-</svg>
diff --git a/platform/macos/app/resources/heatmap.svg b/platform/macos/app/resources/heatmap.svg
deleted file mode 100644
index fa2a46590a..0000000000
--- a/platform/macos/app/resources/heatmap.svg
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16"
- height="16"
- viewBox="0 0 16 16"
- id="svg4148"
- version="1.1"
- inkscape:version="0.92.2 5c3e80d, 2017-08-06"
- sodipodi:docname="heatmap.svg"
- inkscape:export-filename="/Users/mxn/Desktop/symbol.png"
- inkscape:export-xdpi="90.000244"
- inkscape:export-ydpi="90.000244">
- <defs
- id="defs4150" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="23.25"
- inkscape:cx="4.7741936"
- inkscape:cy="7.6812068"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- units="px"
- inkscape:window-width="1280"
- inkscape:window-height="755"
- inkscape:window-x="0"
- inkscape:window-y="1"
- inkscape:window-maximized="1"
- inkscape:snap-bbox="true" />
- <metadata
- id="metadata4153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1036.3622)">
- <path
- style="opacity:1;fill:#ffffff;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:0.99369001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 11.237265,1036.8591 a 4.2655011,4.1972104 0 0 0 -4.2658922,4.1979 4.2655011,4.1972104 0 0 0 0.025231,0.427 5.3408028,5.2552965 0 0 0 -1.1586611,-0.1299 5.3408028,5.2552965 0 0 0 -5.34109749,5.2556 5.3408028,5.2552965 0 0 0 5.34109749,5.2557 5.3408028,5.2552965 0 0 0 5.3410983,-5.2557 5.3408028,5.2552965 0 0 0 -0.186318,-1.3664 4.2655011,4.1972104 0 0 0 0.244542,0.012 4.2655011,4.1972104 0 0 0 4.26589,-4.198 4.2655011,4.1972104 0 0 0 -4.26589,-4.1979 z"
- id="path818"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:1;fill:#000000;fill-opacity:0.15686275;fill-rule:evenodd;stroke:none;stroke-width:0.99369001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 11.005859,1038.875 c -4.8895767,1.3679 0.321278,7.2823 2.416016,2.7578 0.450567,-1.4666 -0.923376,-2.9624 -2.416016,-2.7578 z m -5.5078121,4.5 c -5.49629855,0.4756 -2.1892763,9.0394 2.2363281,5.9121 2.667642,-1.8963 1.5392118,-6.8607 -2.2363281,-5.9121 z"
- id="path836"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/platform/macos/app/resources/hillshade.svg b/platform/macos/app/resources/hillshade.svg
deleted file mode 100644
index d3f0d72999..0000000000
--- a/platform/macos/app/resources/hillshade.svg
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16"
- height="16"
- viewBox="0 0 16 16"
- id="svg4148"
- version="1.1"
- inkscape:version="0.92.2 5c3e80d, 2017-08-06"
- sodipodi:docname="hillshade.svg"
- inkscape:export-filename="/Users/mxn/Desktop/symbol.png"
- inkscape:export-xdpi="90.000244"
- inkscape:export-ydpi="90.000244">
- <defs
- id="defs4150" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="23.25"
- inkscape:cx="6.2795699"
- inkscape:cy="11.122067"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- units="px"
- inkscape:window-width="1280"
- inkscape:window-height="755"
- inkscape:window-x="0"
- inkscape:window-y="1"
- inkscape:window-maximized="1"
- inkscape:snap-bbox="true" />
- <metadata
- id="metadata4153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1036.3622)">
- <path
- sodipodi:type="star"
- style="opacity:1;fill:#ffffff;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path839"
- sodipodi:sides="3"
- sodipodi:cx="12.189357"
- sodipodi:cy="1045.3247"
- sodipodi:r1="12.575057"
- sodipodi:r2="6.2875285"
- sodipodi:arg1="0.52359878"
- sodipodi:arg2="1.5707963"
- inkscape:flatsided="true"
- inkscape:rounded="0"
- inkscape:randomized="0"
- d="m 23.079676,1051.6122 -21.7806381,0 10.8903191,-18.8625 z"
- inkscape:transform-center-y="-2.1749516"
- transform="matrix(0.6563034,0,0,0.75784422,8.3706122e-5,254.83559)" />
- <path
- transform="matrix(0.6563034,0,0,0.75784422,8.3706122e-5,254.83559)"
- style="opacity:1;fill:#000000;fill-opacity:0.15686275;fill-rule:evenodd;stroke:none;stroke-width:1.50017999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:transform-center-y="-2.1749516"
- d="m 23.079676,1051.6122 h -7.842948 l -3.047371,-18.8625 z"
- id="path841"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- </g>
-</svg>
diff --git a/platform/macos/app/resources/symbol.svg b/platform/macos/app/resources/symbol.svg
deleted file mode 100644
index 68847cb50f..0000000000
--- a/platform/macos/app/resources/symbol.svg
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16"
- height="16"
- viewBox="0 0 16 16"
- id="svg4148"
- version="1.1"
- inkscape:version="0.91 r13725"
- sodipodi:docname="symbol.svg"
- inkscape:export-filename="/Users/mxn/Desktop/symbol.png"
- inkscape:export-xdpi="90.000244"
- inkscape:export-ydpi="90.000244">
- <defs
- id="defs4150" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="7.9195959"
- inkscape:cx="3.8463784"
- inkscape:cy="-0.92094419"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- units="px"
- inkscape:window-width="1280"
- inkscape:window-height="751"
- inkscape:window-x="0"
- inkscape:window-y="1"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1036.3622)">
- <path
- inkscape:connector-curvature="0"
- style="fill:none;stroke:#000000;stroke-width:1.45454013;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path5359"
- d="m 13.062591,1042.4228 c 0,3.394 -5.0625908,9.2122 -5.0625908,9.2122 0,0 -5.0625898,-5.872 -5.0625898,-9.2122 0,-2.9629 2.2914879,-5.3333 5.0625898,-5.3333 2.7711018,0 5.0625908,2.3704 5.0625908,5.3333 z" />
- </g>
-</svg>
diff --git a/platform/macos/app/ru.lproj/Localizable.strings b/platform/macos/app/ru.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/ru.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/sv.lproj/Localizable.strings b/platform/macos/app/sv.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/sv.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/uk.lproj/Localizable.strings b/platform/macos/app/uk.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/uk.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/vi.lproj/Localizable.strings b/platform/macos/app/vi.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/vi.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/wms.json b/platform/macos/app/wms.json
deleted file mode 100644
index e5fb236259..0000000000
--- a/platform/macos/app/wms.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "version": 8,
- "name": "WMS Test",
- "sources": {
- "wms-test": {
- "type": "raster",
- "tiles": [
- "https://geodata.state.nj.us/imagerywms/Natural2015?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&width=256&height=256&layers=Natural2015"
- ],
- "tileSize": 256
- }
- },
- "layers": [{
- "id": "wms-test-layer",
- "type": "raster",
- "source": "wms-test",
- "paint": {
- "raster-fade-duration": 100
- }
- }]
-}
diff --git a/platform/macos/app/zh-Hans.lproj/Localizable.strings b/platform/macos/app/zh-Hans.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/zh-Hans.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/app/zh-Hant.lproj/Localizable.strings b/platform/macos/app/zh-Hant.lproj/Localizable.strings
deleted file mode 100644
index e69de29bb2..0000000000
--- a/platform/macos/app/zh-Hant.lproj/Localizable.strings
+++ /dev/null
diff --git a/platform/macos/docs/doc-README.md b/platform/macos/docs/doc-README.md
deleted file mode 100644
index 8ce2df39a4..0000000000
--- a/platform/macos/docs/doc-README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# [Mapbox Maps SDK for macOS](https://github.com/mapbox/mapbox-gl-native/tree/master/platform/macos/)
-
-The Mapbox Maps SDK for macOS is an open-source framework for embedding interactive map views with scalable, customizable vector maps into Cocoa applications on macOS 10.11.0 and above using Objective-C, Swift, Interface Builder, or AppleScript. The SDK takes stylesheets that conform to the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/), applies them to vector tiles that conform to the [Mapbox Vector Tile Specification](https://www.mapbox.com/developers/vector-tiles/), and renders them using OpenGL.
-
-![](img/screenshot.jpg)
-
-For setup information, consult the README.md that comes with this documentation. For further instructions, consult the [Mapbox Maps SDK for macOS documentation](https://mapbox.github.io/mapbox-gl-native/macos/). The [Mapbox Maps SDK for iOS](https://www.mapbox.com/ios-sdk/) has [API documentation](https://www.mapbox.com/ios-sdk/api/) and [online examples](https://www.mapbox.com/ios-sdk/examples/) that apply to the macOS SDK with few differences, mostly around unimplemented features like user location tracking. A [full changelog](https://github.com/mapbox/mapbox-gl-native/blob/master/platform/macos/CHANGELOG.md) is also available.
-
-Mapbox does not officially support the macOS SDK to the same extent as the iOS SDK; however, [bug reports and pull requests](https://github.com/mapbox/mapbox-gl-native/issues/) are certainly welcome.
diff --git a/platform/macos/docs/guides/For Style Authors.md b/platform/macos/docs/guides/For Style Authors.md
deleted file mode 100644
index 399ba6804b..0000000000
--- a/platform/macos/docs/guides/For Style Authors.md
+++ /dev/null
@@ -1,427 +0,0 @@
-<!--
- This file is generated.
- Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`.
--->
-# Information for Style Authors
-
-A _style_ defines a map view’s content and appearance. If you’ve authored a
-style using
-[Mapbox Studio’s Styles editor](https://www.mapbox.com/studio/styles/) or as
-JSON in a text editor, you can use that style in this SDK and manipulate it
-afterwards in code. This document provides information you can use to ensure a
-seamless transition from Mapbox Studio to your application.
-
-## Designing for macOS
-
-When designing your style, consider the context in which your application shows
-the style. There are a number of considerations specific to macOS that may
-not be obvious when designing your style in Mapbox Studio on the Web. A map view
-is essentially a graphical user interface element, so many of same issues in
-user interface design also apply when designing a map style.
-
-### Color
-
-Ensure sufficient contrast in your application’s user interface when your map
-style is present. Standard user interface elements such as toolbars, sidebars,
-and sheets often overlap the map view with a translucent, blurred background, so
-make sure the contents of these elements remain legible with the map view
-underneath.
-If you intend your style to be used in the dark, consider the impact that Night
-Shift may have on your style’s colors.
-
-### Typography and graphics
-
-
-Design sprite images and choose font weights that look crisp on both
-standard-resolution displays and Retina displays. This SDK supports the same
-resolutions as macOS.
-Standard-resolution displays are often found on external monitors. Even with
-built-in screens, some of your users may use the Larger Text option in Display
-Preferences, which is essentially standard resolution, to make text easier to
-read.
-
-Icon and text labels should be legible regardless of the map’s orientation.
-By default, this SDK makes it easy for your users to rotate or tilt the map
-using multitouch trackpad gestures or keyboard shortcuts.
-If you do not intend your design to accommodate rotation and tilting, disable
-these gestures using the `MGLMapView.rotateEnabled` and
-`MGLMapView.pitchEnabled` properties, respectively, or the corresponding
-inspectables in Interface Builder.
-
-### Interactivity
-
-Pay attention to whether elements of your style appear to be interactive.
-An icon with a shadow or shading effect may appear to be clickable.
-You can make an icon or text label interactive by installing a gesture
-recognizer and performing feature querying (e.g.,
-`-[MGLMapView visibleFeaturesAtPoint:]`) to get details about the selected
-feature.
-You can install cursor or tooltip tracking rectangles to indicate interactive
-features as an alternative to prominent hover effects.
-
-Make sure your users can easily distinguish any interactive elements from the
-surrounding map, such as pins or a route line. If your application supports
-printing, consider using the
-[runtime styling API](#manipulating-the-style-at-runtime) to optimize your style
-for ink economy before printing the map view.
-
-For more information about user interface design, consult Apple’s
-[_macOS Human Interface Guidelines_](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/OSXHIGuidelines/).
-
-## Applying your style
-
-You set an `MGLMapView` object’s style either in code, by setting the
-`MGLMapView.styleURL` property, or in Interface Builder, by setting the “Style
-URL” inspectable. The URL must point to a local or remote style JSON file. The
-style JSON file format is defined by the
-[Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/). This
-SDK supports the functionality defined by version 8 of the specification unless
-otherwise noted in the
-[style specification documentation](https://www.mapbox.com/mapbox-gl-style-spec/).
-
-## Manipulating the style at runtime
-
-The _runtime styling API_ enables you to modify every aspect of a style
-dynamically as a user interacts with your application. The style itself is
-represented at runtime by an `MGLStyle` object, which provides access to various
-`MGLSource` and `MGLStyleLayer` objects that represent content sources and style
-layers, respectively.
-
-The names of runtime styling classes and properties on macOS are generally
-consistent with the style specification and Mapbox Studio’s Styles editor. Any
-exceptions are listed in this document.
-
-To avoid conflicts with Objective-C keywords or Cocoa terminology, this SDK uses
-the following terms for concepts defined in the style specification:
-
-In the style specification | In the SDK
----------------------------|---------
-bounds | coordinate bounds
-filter | predicate
-function type | interpolation mode
-id | identifier
-image | style image
-layer | style layer
-property | attribute
-SDF icon | template image
-source | content source
-
-## Specifying the map’s content
-
-Each source defined by a style JSON file is represented at runtime by a content
-source object that you can use to initialize new style layers. The content
-source object is a member of one of the following subclasses of `MGLSource`:
-
-In style JSON | In the SDK
---------------|-----------
-`vector` | `MGLVectorTileSource`
-`raster` | `MGLRasterTileSource`
-`raster-dem` | `MGLRasterDEMSource`
-`geojson` | `MGLShapeSource`
-`image` | `MGLImageSource`
-
-`canvas` and `video` sources are not supported.
-
-### Tile sources
-
-Raster and vector tile sources may be defined in TileJSON configuration files.
-This SDK supports the properties defined in the style specification, which are a
-subset of the keys defined in version 2.1.0 of the
-[TileJSON](https://github.com/mapbox/tilejson-spec/tree/master/2.1.0)
-specification. As an alternative to authoring a custom TileJSON file, you may
-supply various tile source options when creating a raster or vector tile source.
-These options are detailed in the `MGLTileSourceOption` documentation:
-
-In style JSON | In TileJSON | In the SDK
---------------|---------------|-----------
-`url` | — | `configurationURL` parameter in `-[MGLTileSource initWithIdentifier:configurationURL:]`
-`tiles` | `tiles` | `tileURLTemplates` parameter in `-[MGLTileSource initWithIdentifier:tileURLTemplates:options:]`
-`minzoom` | `minzoom` | `MGLTileSourceOptionMinimumZoomLevel`
-`maxzoom` | `maxzoom` | `MGLTileSourceOptionMaximumZoomLevel`
-`bounds` | `bounds` | `MGLTileSourceOptionCoordinateBounds`
-`tileSize` | — | `MGLTileSourceOptionTileSize`
-`attribution` | `attribution` | `MGLTileSourceOptionAttributionHTMLString` (but consider specifying `MGLTileSourceOptionAttributionInfos` instead for improved security)
-`scheme` | `scheme` | `MGLTileSourceOptionTileCoordinateSystem`
-`encoding` | – | `MGLTileSourceOptionDEMEncoding`
-
-### Shape sources
-
-Shape sources also accept various options. These options are detailed in the
-`MGLShapeSourceOption` documentation:
-
-In style JSON | In the SDK
------------------|-----------
-`data` | `url` parameter in `-[MGLShapeSource initWithIdentifier:URL:options:]`
-`maxzoom` | `MGLShapeSourceOptionMaximumZoomLevel`
-`buffer` | `MGLShapeSourceOptionBuffer`
-`tolerance` | `MGLShapeSourceOptionSimplificationTolerance`
-`cluster` | `MGLShapeSourceOptionClustered`
-`clusterRadius` | `MGLShapeSourceOptionClusterRadius`
-`clusterMaxZoom` | `MGLShapeSourceOptionMaximumZoomLevelForClustering`
-`lineMetrics` | `MGLShapeSourceOptionLineDistanceMetrics`
-
-To create a shape source from local GeoJSON data, first
-[convert the GeoJSON data into a shape](working-with-geojson-data.html#converting-geojson-data-into-shape-objects),
-then use the `-[MGLShapeSource initWithIdentifier:shape:options:]` method.
-
-### Image sources
-
-Image sources accept a non-axis aligned quadrilateral as their geographic coordinates.
-These coordinates, in `MGLCoordinateQuad`, are described in counterclockwise order,
-in contrast to the clockwise order defined in the style specification.
-
-## Configuring the map content’s appearance
-
-Each layer defined by the style JSON file is represented at runtime by a style
-layer object, which you can use to refine the map’s appearance. The style layer
-object is a member of one of the following subclasses of `MGLStyleLayer`:
-
-In style JSON | In the SDK
---------------|-----------
-`background` | `MGLBackgroundStyleLayer`
-`circle` | `MGLCircleStyleLayer`
-`fill` | `MGLFillStyleLayer`
-`fill-extrusion` | `MGLFillExtrusionStyleLayer`
-`heatmap` | `MGLHeatmapStyleLayer`
-`hillshade` | `MGLHillshadeStyleLayer`
-`line` | `MGLLineStyleLayer`
-`raster` | `MGLRasterStyleLayer`
-`symbol` | `MGLSymbolStyleLayer`
-
-You configure layout and paint attributes by setting properties on these style
-layer objects. The property names generally correspond to the style JSON
-properties, except for the use of camelCase instead of kebab-case. Properties
-whose names differ from the style specification are listed below:
-
-### Circle style layers
-
-In style JSON | In Objective-C | In Swift
---------------|----------------|---------
-`circle-pitch-scale` | `MGLCircleStyleLayer.circleScaleAlignment` | `MGLCircleStyleLayer.circleScaleAlignment`
-`circle-translate` | `MGLCircleStyleLayer.circleTranslation` | `MGLCircleStyleLayer.circleTranslation`
-`circle-translate-anchor` | `MGLCircleStyleLayer.circleTranslationAnchor` | `MGLCircleStyleLayer.circleTranslationAnchor`
-
-### Fill style layers
-
-In style JSON | In Objective-C | In Swift
---------------|----------------|---------
-`fill-antialias` | `MGLFillStyleLayer.fillAntialiased` | `MGLFillStyleLayer.isFillAntialiased`
-`fill-translate` | `MGLFillStyleLayer.fillTranslation` | `MGLFillStyleLayer.fillTranslation`
-`fill-translate-anchor` | `MGLFillStyleLayer.fillTranslationAnchor` | `MGLFillStyleLayer.fillTranslationAnchor`
-
-### Fill extrusion style layers
-
-In style JSON | In Objective-C | In Swift
---------------|----------------|---------
-`fill-extrusion-vertical-gradient` | `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient` | `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient`
-`fill-extrusion-translate` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation`
-`fill-extrusion-translate-anchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor`
-
-### Line style layers
-
-In style JSON | In Objective-C | In Swift
---------------|----------------|---------
-`line-dasharray` | `MGLLineStyleLayer.lineDashPattern` | `MGLLineStyleLayer.lineDashPattern`
-`line-translate` | `MGLLineStyleLayer.lineTranslation` | `MGLLineStyleLayer.lineTranslation`
-`line-translate-anchor` | `MGLLineStyleLayer.lineTranslationAnchor` | `MGLLineStyleLayer.lineTranslationAnchor`
-
-### Raster style layers
-
-In style JSON | In Objective-C | In Swift
---------------|----------------|---------
-`raster-brightness-max` | `MGLRasterStyleLayer.maximumRasterBrightness` | `MGLRasterStyleLayer.maximumRasterBrightness`
-`raster-brightness-min` | `MGLRasterStyleLayer.minimumRasterBrightness` | `MGLRasterStyleLayer.minimumRasterBrightness`
-`raster-hue-rotate` | `MGLRasterStyleLayer.rasterHueRotation` | `MGLRasterStyleLayer.rasterHueRotation`
-`raster-resampling` | `MGLRasterStyleLayer.rasterResamplingMode` | `MGLRasterStyleLayer.rasterResamplingMode`
-
-### Symbol style layers
-
-In style JSON | In Objective-C | In Swift
---------------|----------------|---------
-`icon-allow-overlap` | `MGLSymbolStyleLayer.iconAllowsOverlap` | `MGLSymbolStyleLayer.iconAllowsOverlap`
-`icon-ignore-placement` | `MGLSymbolStyleLayer.iconIgnoresPlacement` | `MGLSymbolStyleLayer.iconIgnoresPlacement`
-`icon-image` | `MGLSymbolStyleLayer.iconImageName` | `MGLSymbolStyleLayer.iconImageName`
-`icon-optional` | `MGLSymbolStyleLayer.iconOptional` | `MGLSymbolStyleLayer.isIconOptional`
-`icon-rotate` | `MGLSymbolStyleLayer.iconRotation` | `MGLSymbolStyleLayer.iconRotation`
-`icon-size` | `MGLSymbolStyleLayer.iconScale` | `MGLSymbolStyleLayer.iconScale`
-`icon-keep-upright` | `MGLSymbolStyleLayer.keepsIconUpright` | `MGLSymbolStyleLayer.keepsIconUpright`
-`text-keep-upright` | `MGLSymbolStyleLayer.keepsTextUpright` | `MGLSymbolStyleLayer.keepsTextUpright`
-`text-max-angle` | `MGLSymbolStyleLayer.maximumTextAngle` | `MGLSymbolStyleLayer.maximumTextAngle`
-`text-max-width` | `MGLSymbolStyleLayer.maximumTextWidth` | `MGLSymbolStyleLayer.maximumTextWidth`
-`symbol-avoid-edges` | `MGLSymbolStyleLayer.symbolAvoidsEdges` | `MGLSymbolStyleLayer.symbolAvoidsEdges`
-`text-field` | `MGLSymbolStyleLayer.text` | `MGLSymbolStyleLayer.text`
-`text-allow-overlap` | `MGLSymbolStyleLayer.textAllowsOverlap` | `MGLSymbolStyleLayer.textAllowsOverlap`
-`text-font` | `MGLSymbolStyleLayer.textFontNames` | `MGLSymbolStyleLayer.textFontNames`
-`text-size` | `MGLSymbolStyleLayer.textFontSize` | `MGLSymbolStyleLayer.textFontSize`
-`text-ignore-placement` | `MGLSymbolStyleLayer.textIgnoresPlacement` | `MGLSymbolStyleLayer.textIgnoresPlacement`
-`text-justify` | `MGLSymbolStyleLayer.textJustification` | `MGLSymbolStyleLayer.textJustification`
-`text-optional` | `MGLSymbolStyleLayer.textOptional` | `MGLSymbolStyleLayer.isTextOptional`
-`text-rotate` | `MGLSymbolStyleLayer.textRotation` | `MGLSymbolStyleLayer.textRotation`
-`text-writing-mode` | `MGLSymbolStyleLayer.textWritingModes` | `MGLSymbolStyleLayer.textWritingModes`
-`icon-translate` | `MGLSymbolStyleLayer.iconTranslation` | `MGLSymbolStyleLayer.iconTranslation`
-`icon-translate-anchor` | `MGLSymbolStyleLayer.iconTranslationAnchor` | `MGLSymbolStyleLayer.iconTranslationAnchor`
-`text-translate` | `MGLSymbolStyleLayer.textTranslation` | `MGLSymbolStyleLayer.textTranslation`
-`text-translate-anchor` | `MGLSymbolStyleLayer.textTranslationAnchor` | `MGLSymbolStyleLayer.textTranslationAnchor`
-
-## Setting attribute values
-
-Each property representing a layout or paint attribute is set to an
-`NSExpression` object. `NSExpression` objects play the same role as
-[expressions in the Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions),
-but you create the former using a very different syntax. `NSExpression`’s format
-string syntax is reminiscent of a spreadsheet formula or an expression in a
-database query. See the
-“[Predicates and Expressions](predicates-and-expressions.html)” guide for an
-overview of the expression support in this SDK. This SDK no longer supports
-style functions; use expressions instead.
-
-### Constant values in expressions
-
-In contrast to the JSON type that the style specification defines for each
-layout or paint property, the style value object often contains a more specific
-Foundation or Cocoa type. General rules for attribute types are listed below.
-Pay close attention to the SDK documentation for the attribute you want to get
-or set.
-
-In style JSON | In Objective-C | In Swift
---------------|-----------------------|---------
-Color | `NSColor` | `NSColor`
-Enum | `NSString` | `String`
-String | `NSString` | `String`
-Boolean | `NSNumber.boolValue` | `NSNumber.boolValue`
-Number | `NSNumber.floatValue` | `NSNumber.floatValue`
-Array (`-dasharray`) | `NSArray<NSNumber>` | `[Float]`
-Array (`-font`) | `NSArray<NSString>` | `[String]`
-Array (`-offset`, `-translate`) | `NSValue` containing `CGVector` | `NSValue` containing `CGVector`
-Array (`-padding`) | `NSValue.edgeInsetsValue` | `NSValue.edgeInsetsValue`
-
-For padding attributes, note that the arguments to
-`NSEdgeInsetsMake()` in Objective-C and `EdgeInsets(top:left:bottom:right:)` in
-Swift
-are specified in counterclockwise order, in contrast to the clockwise order
-defined by the style specification.
-
-Additionally, on macOS, a screen coordinate of (0, 0) is located at the
-lower-left corner of the screen. Therefore, a positive `CGVector.dy` means an
-offset or translation upward, while a negative `CGVector.dy` means an offset or
-translation downward. This is the reverse of how `CGVector` is interpreted on
-iOS.
-
-### Expression operators
-
-Many expression operators defined in the style specification have corresponding
-symbols to be used with the `+[NSExpression expressionWithFormat:]`,
-`+[NSExpression expressionForFunction:arguments:]`, or
-`+[NSExpression expressionForFunction:selectorName:arguments:]` method:
-
-In style specification | Method, function, or predicate type | Format string syntax
------------------------|-------------------------------------|---------------------
-`array` | |
-`boolean` | |
-`collator` | `NSComparisonPredicateOptions` | `'Québec' =[cd] 'QUEBEC'`
-`literal` | `+[NSExpression expressionForConstantValue:]` | `%@` representing `NSArray` or `NSDictionary`
-`number` | |
-`string` | |
-`to-boolean` | `boolValue` |
-`to-color` | | `CAST(var, 'NSColor')`
-`to-number` | `mgl_numberWithFallbackValues:` | `CAST(zipCode, 'NSNumber')`
-`to-string` | `stringValue` | `CAST(ele, 'NSString')`
-`typeof` | |
-`geometry-type` | `NSExpression.geometryTypeVariableExpression` | `$geometryType`
-`id` | `NSExpression.featureIdentifierVariableExpression` | `$featureIdentifier`
-`properties` | `NSExpression.featureAttributesVariableExpression` | `$featureAttributes`
-`at` | `objectFrom:withIndex:` | `array[n]`
-`get` | `+[NSExpression expressionForKeyPath:]` | Key path
-`has` | `mgl_does:have:` | `mgl_does:have:(self, 'key')`
-`length` | `count:` | `count({1, 2, 2, 3, 4, 7, 9})`
-`!` | `NSNotPredicateType` | `NOT (p0 OR … OR pn)`
-`!=` | `NSNotEqualToPredicateOperatorType` | `key != value`
-`<` | `NSLessThanPredicateOperatorType` | `key < value`
-`<=` | `NSLessThanOrEqualToPredicateOperatorType` | `key <= value`
-`==` | `NSEqualToPredicateOperatorType` | `key == value`
-`>` | `NSGreaterThanPredicateOperatorType` | `key > value`
-`>=` | `NSGreaterThanOrEqualToPredicateOperatorType` | `key >= value`
-`all` | `NSAndPredicateType` | `p0 AND … AND pn`
-`any` | `NSOrPredicateType` | `p0 OR … OR pn`
-`case` | `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` or `MGL_IF` or `+[NSExpression mgl_expressionForConditional:trueExpression:falseExpresssion:]` | `TERNARY(1 = 2, YES, NO)` or `MGL_IF(1 = 2, YES, 2 = 2, YES, NO)`
-`coalesce` | `mgl_coalesce:` | `mgl_coalesce({x, y, z})`
-`match` | `MGL_MATCH` or `+[NSExpression mgl_expressionForMatchingExpression:inDictionary:defaultExpression:]` | `MGL_MATCH(x, 0, 'zero match', 1, 'one match', 'two match', 'default')`
-`interpolate` | `mgl_interpolate:withCurveType:parameters:stops:` or `+[NSExpression mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` |
-`step` | `mgl_step:from:stops:` or `+[NSExpression mgl_expressionForSteppingExpression:fromExpression:stops:]` |
-`let` | `mgl_expressionWithContext:` | `MGL_LET('ios', 11, 'macos', 10.13, $ios + $macos)`
-`var` | `+[NSExpression expressionForVariable:]` | `$variable`
-`concat` | `mgl_join:` or `-[NSExpression mgl_expressionByAppendingExpression:]` | `mgl_join({'Old', ' ', 'MacDonald'})`
-`downcase` | `lowercase:` | `lowercase('DOWNTOWN')`
-`upcase` | `uppercase:` | `uppercase('Elysian Fields')`
-`rgb` | `+[NSColor colorWithCalibratedRed:green:blue:alpha:]` |
-`rgba` | `+[NSColor colorWithCalibratedRed:green:blue:alpha:]` |
-`to-rgba` | | `CAST(noindex(var), 'NSArray')`
-`-` | `from:subtract:` | `2 - 1`
-`*` | `multiply:by:` | `1 * 2`
-`/` | `divide:by:` | `1 / 2`
-`%` | `modulus:by:` |
-`^` | `raise:toPower:` | `2 ** 2`
-`+` | `add:to:` | `1 + 2`
-`abs` | `abs:` | `abs(-1)`
-`acos` | `mgl_acos:` | `mgl_acos(1)`
-`asin` | `mgl_asin:` | `mgl_asin(0)`
-`atan` | `mgl_atan:` | `mgl_atan(20)`
-`ceil` | `ceiling:` | `ceiling(0.99999)`
-`cos` | `mgl_cos:` | `mgl_cos(0)`
-`e` | | `%@` representing `NSNumber` containing `M_E`
-`floor` | `floor:` | `floor(-0.99999)`
-`ln` | `ln:` | `ln(2)`
-`ln2` | | `%@` representing `NSNumber` containing `M_LN2`
-`log10` | `log:` | `log(1)`
-`log2` | `mgl_log2:` | `mgl_log2(1024)`
-`max` | `max:` | `max({1, 2, 2, 3, 4, 7, 9})`
-`min` | `min:` | `min({1, 2, 2, 3, 4, 7, 9})`
-`pi` | | `%@` representing `NSNumber` containing `M_PI`
-`round` | `mgl_round:` | `mgl_round(1.5)`
-`sin` | `mgl_sin:` | `mgl_sin(0)`
-`sqrt` | `sqrt:` | `sqrt(2)`
-`tan` | `mgl_tan:` | `mgl_tan(0)`
-`zoom` | `NSExpression.zoomLevelVariableExpression` | `$zoomLevel`
-`heatmap-density` | `NSExpression.heatmapDensityVariableExpression` | `$heatmapDensity`
-`line-progress` | `NSExpression.lineProgressVariableExpression` | `$lineProgress`
-`format` | `+[NSExpression mgl_expressionForAttributedExpressions:]` or `mgl_attributed:` | `mgl_attributed({x, y, z})`
-
-For operators that have no corresponding `NSExpression` symbol, use the
-`MGL_FUNCTION()` format string syntax.
-
-## Filtering sources
-
-You can filter a shape or vector tile source by setting the
-`MGLVectorStyleLayer.predicate` property to an `NSPredicate` object. Below is a
-table of style JSON operators and the corresponding operators used in the
-predicate format string:
-
-In style JSON | In the format string
---------------------------|---------------------
-`["has", key]` | `key != nil`
-`["!has", key]` | `key == nil`
-`["==", key, value]` | `key == value`
-`["!=", key, value]` | `key != value`
-`[">", key, value]` | `key > value`
-`[">=", key, value]` | `key >= value`
-`["<", key, value]` | `key < value`
-`["<=", key, value]` | `key <= value`
-`["in", key, v0, …, vn]` | `key IN {v0, …, vn}`
-`["!in", key, v0, …, vn]` | `NOT key IN {v0, …, vn}`
-`["all", f0, …, fn]` | `p0 AND … AND pn`
-`["any", f0, …, fn]` | `p0 OR … OR pn`
-`["none", f0, …, fn]` | `NOT (p0 OR … OR pn)`
-
-## Specifying the text format
-
-The following format attributes are defined as `NSString` constans that you
-can use to update the formatting of `MGLSymbolStyleLayer.text` property.
-
-In style JSON | In Objective-C | In Swift
---------------|-----------------------|---------
-`text-font` | `MGLFontNamesAttribute` | `.fontNamesAttribute`
-`font-scale` | `MGLFontScaleAttribute` | `.fontScaleAttribute`
-`text-color` | `MGLFontColorAttribute` | `.fontColorAttribute`
-
-See the “[Predicates and Expressions](predicates-and-expressions.html)” guide for
-a full description of the supported operators and operand types.
diff --git a/platform/macos/docs/guides/Info.plist Keys.md b/platform/macos/docs/guides/Info.plist Keys.md
deleted file mode 100644
index 35ecf67e36..0000000000
--- a/platform/macos/docs/guides/Info.plist Keys.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Info.plist Keys
-
-The Mapbox Maps SDK for macOS supports custom `Info.plist` keys in your application in order to configure various settings.
-
-## MGLMapboxAccessToken
-
-Set the [Mapbox access token](https://www.mapbox.com/help/define-access-token/) to be used by all instances of `MGLMapView` in the current application.
-
-Mapbox-hosted vector tiles and styles require an API access token, which you can obtain from the [Mapbox account page](https://www.mapbox.com/studio/account/tokens/). Access tokens associate requests to Mapbox’s vector tile and style APIs with your Mapbox account. They also deter other developers from using your styles without your permission.
-
-As an alternative, you can use `MGLAccountManager.accessToken` to set a token in code. See [our guide](https://www.mapbox.com/help/ios-private-access-token/) for some tips on keeping access tokens in open source code private.
-
-## MGLMapboxAPIBaseURL
-
-Use this key if you need to customize the API base URL used throughout the SDK. If unset, the default Mapbox API is used.
-
-The default value is `https://api.mapbox.com`.
-
-## MGLIdeographicFontFamilyName
-
-The name of the font family to use for client-side text rendering of CJK ideographs.
-
-Set `MGLIdeographicFontFamilyName` in your containing application's Info.plist to font family name(s) that will be available at run time, such as “PingFang TC” or “Marker Felt”. This plist key accepts:
-
-- A string value of a single font family name.
-
-- An array of font family names. Fonts will be used in the defined order, eventually falling back to default system font if none are available.
-
-- A boolean value `NO` to disable client-side rendering of CJK glyphs — remote fonts specified in your style will be used instead.
-
-## MGLCollisionBehaviorPre4_0
-
-If this key is set to YES (`true`), collision detection is performed only between symbol style layers based on the same source, as in versions 0.1–0.7 of the Mapbox Maps SDK for iOS. In other words, symbols in an `MGLSymbolStyleLayer` based on one source (for example, an `MGLShapeSource`) may overlap with symbols in another layer that is based on a different source (such as the Mapbox Streets source). This is the case regardless of the `MGLSymbolStyleLayer.iconAllowsOverlap`, `MGLSymbolStyleLayer.iconIgnoresPlacement`, `MGLSymbolStyleLayer.textAllowsOverlap`, and `MGLSymbolStyleLayer.textIgnoresPlacement` properties.
-
-Beginning in version 0.7, the SDK also performs collision detection between style layers based on different sources by default. For the default behavior, omit the `MGLCollisionBehaviorPre4_0` key or set it to NO (`false`). This property is so named because version 0.7 of the Mapbox Maps SDK for macOS corresponds to version 4.0 of the Mapbox Maps SDK for iOS.
diff --git a/platform/macos/docs/guides/Migrating to Expressions.md b/platform/macos/docs/guides/Migrating to Expressions.md
deleted file mode 100644
index 44e14a6eec..0000000000
--- a/platform/macos/docs/guides/Migrating to Expressions.md
+++ /dev/null
@@ -1,267 +0,0 @@
-<!--
- This file is generated.
- Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`.
--->
-
-# Migrating from Style Functions to Expressions
-
-[Runtime Styling](https://www.mapbox.com/ios-sdk/maps/overview/runtime-styling/) enables you to modify every aspect of the map’s appearance dynamically as a user interacts with your application. Developers can specify in advance how a layout or paint attribute will vary as the zoom level changes or how the appearance of individual features vary based on metadata provided by a content source.
-
-With Mapbox Maps SDK for macOS v0.7.0, style functions have been replaced with expressions. These provide even more tools for developers who want to style their maps dynamically. This guide outlines some tips for migrating from style functions to expressions, and offers an overview of some things that developers can do with expressions.
-
-An expression is represented at runtime by the `NSExpression` class. Expressions can be used to style paint and layout properties based on zoom level, data attributes, or a combination of the two.
-
-A constant expression can also be assigned to a style property. For example, the opacity of a fill style layer can be set to a constant value between 0 and 1.
-
-The documentation for each individual style layer property notes which non-constant expressions are enabled for that property. Style functions supported four interpolation modes: exponential, interval, categorical, and identity.
-
-This guide uses earthquake data from the [U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php). Under each interpolation mode, the style function implementation will be shown, followed by the current syntax.
-
-For more information about how to work with GeoJSON data in our macOS SDK, please see our [working with GeoJSON data](working-with-geojson-data.html) guide. To learn more about supported expressions, see our ["Predicates and Expressions"](predicates-and-expressions.html) guide. The "Predicates and Expressions" guide also outlines Mapbox custom functions that can be used to dynamically style a map.
-
-## Stops
-Stops are dictionary keys that are associated with layer attribute values. Constant values no longer need to be wrapped as style values when they are values in a stops dictionary.
-
-
-Style function syntax:
-
-```swift
-let stops = [
- 0: MGLStyleValue<UIColor>(rawValue: .yellow),
- 2.5: MGLStyleValue(rawValue: .orange),
- 5: MGLStyleValue(rawValue: .red),
- 7.5: MGLStyleValue(rawValue: .blue),
- 10: MGLStyleValue(rawValue: .white),
-]
-```
-
-Current syntax:
-```swift
-let stops: [NSNumber: NSColor] = [
- 0: .yellow,
- 2.5: .orange,
- 5: .red,
- 7.5: .blue,
- 10: .white,
-]
-```
-
-
-## Interpolation mode
-
-Style functions supported four interpolation modes: exponential/linear, interval, categorical, and identity. For more information about supported custom expressions, please see the "Predicates and Expressions" guide.
-
-### Linear
-
-`+[NSExpression(MGLAdditions) mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` takes the interpolation type as a parameter. If you previously used the default interpolation base, use the curve type `MGLExpressionInterpolationMode.linear`. See the [`mgl_interpolate:withCurveType:parameters:stops:`](predicates-and-expressions.html#code-mgl_interpolate-withcurvetype-parameters-stops-code) documentation for more details.
-
-The stops dictionary below, shows colors that continuously shift from yellow to orange to red to blue to white based on the attribute value.
-
-Style function syntax:
-
-```swift
-let url = URL(string: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson")!
-let symbolSource = MGLSource(identifier: "source")
-let symbolLayer = MGLSymbolStyleLayer(identifier: "place-city-sm", source: symbolSource)
-
-let source = MGLShapeSource(identifier: "earthquakes", url: url, options: nil)
-mapView.style?.addSource(source)
-
-let stops = [
- 0: MGLStyleValue<UIColor>(rawValue: .yellow),
- 2.5: MGLStyleValue(rawValue: .orange),
- 5: MGLStyleValue(rawValue: .red),
- 7.5: MGLStyleValue(rawValue: .blue),
- 10: MGLStyleValue(rawValue: .white),
-]
-
-let layer = MGLCircleStyleLayer(identifier: "circles", source: source)
-layer.circleColor = MGLStyleValue(interpolationMode: .exponential,
- sourceStops: stops,
- attributeName: "mag",
- options: [.defaultValue: MGLStyleValue<UIColor>(rawValue: .green)])
-layer.circleRadius = MGLStyleValue(rawValue: 10)
-mapView.style?.insertLayer(layer, below: symbolLayer)
-```
-
-Current syntax:
-
-```swift
-let url = URL(string: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson")!
-let symbolSource = MGLSource(identifier: "source")
-let symbolLayer = MGLSymbolStyleLayer(identifier: "place-city-sm", source: symbolSource)
-
-let source = MGLShapeSource(identifier: "earthquakes", url: url, options: nil)
-mapView.style?.addSource(source)
-
-let stops: [NSNumber: NSColor] = [
- 0: .yellow,
- 2.5: .orange,
- 5: .red,
- 7.5: .blue,
- 10: .white,
-]
-
-let layer = MGLCircleStyleLayer(identifier: "circles", source: source)
-layer.circleColor = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(mag, 'linear', nil, %@)",
- stops)
-layer.circleRadius = NSExpression(forConstantValue: 10)
-mapView.style?.insertLayer(layer, below: symbolLayer)
-```
-
-### Exponential
-
-If you previously used an interpolation base greater than `0` (other than `1`), you can use `MGLExpressionInterpolationMode.exponential` as the curve type for `+[NSExpression(MGLAdditions) mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` or `'exponential'` as the curve type for [`mgl_interpolate:withCurveType:parameters:stops:`](predicates-and-expressions.html#code-mgl_interpolate-withcurvetype-parameters-stops-code). The `parameters` argument takes that interpolation base. This interpolates between values exponentially, creating an accelerated ramp effect.
-
-Here’s a visualization from Mapbox Studio (see [Mapbox Studio and iOS](https://www.mapbox.com/ios-sdk/maps/overview/mapbox-studio/)) comparing interpolation base values of `1.5` and `0.5` based on zoom. In order to convert camera style functions, use `$zoomLevel` or `MGL_FUNCTION('zoomLevel')` as the attribute key.
-
-<img src="img/data-driven-styling/exponential-function.png" height=344/>
-<img src="img/data-driven-styling/exponential-function-1.png" height=344/>
-
-The example below increases a layer’s `circleRadius` exponentially based on a map’s zoom level. The interpolation base is `1.5`.
-
-Style function syntax:
-
-```swift
-let stops = [
- 12: MGLStyleValue<NSNumber>(rawValue: 0.5),
- 14: MGLStyleValue(rawValue: 2),
- 18: MGLStyleValue(rawValue: 18),
-]
-
-layer.circleRadius = MGLStyleValue(interpolationMode: .exponential,
- cameraStops: stops,
- options: [.interpolationBase: 1.5])
-```
-
-Current syntax:
-
-```swift
-let stops = [
- 12: 0.5,
- 14: 2,
- 18: 18,
-]
-
-layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)",
- stops)
-```
-
-### Interval
-
-Steps, or intervals, create a range using the keys from the stops dictionary. The range is from the given key to just less than the next key. The attribute values that fall into that range are then styled using the layout or paint value assigned to that key. You can use the `+[NSExpression(MGLAdditions) mgl_expressionForSteppingExpression:fromExpression:stops:]` method or the custom function [`mgl_step:from:stops:`](predicates-and-expressions.html#code-mgl_step-from-stops-code) for cases where you previously used interval interpolation mode. The first parameter takes the feature attribute name and the second parameter (`from:`) optionally takes the default or fallback value for that function. The final parameter takes a stops dictionary as an argument.
-
-When we use the stops dictionary given above with an `'mgl_step:from:stops:'`, we create ranges where earthquakes with a magnitude of 0 to just less than 2.5 would be yellow, 2.5 to just less than 5 would be orange, and so on.
-
-Style function syntax:
-
-```swift
-let stops = [
- 0: MGLStyleValue<UIColor>(rawValue: .yellow),
- 2.5: MGLStyleValue(rawValue: .orange),
- 5: MGLStyleValue(rawValue: .red),
- 7.5: MGLStyleValue(rawValue: .blue),
- 10: MGLStyleValue(rawValue: .white),
-]
-
-layer.circleColor = MGLStyleValue(interpolationMode: .interval,
- sourceStops: stops,
- attributeName: "mag",
- options: [.defaultValue: MGLStyleValue<UIColor>(rawValue: .green)])
-````
-
-Current syntax:
-
-```swift
-let stops: [NSNumber: NSColor] = [
- 0: .yellow,
- 2.5: .orange,
- 5: .red,
- 7.5: .blue,
- 10: .white,
-]
-
-layer.circleColor = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)",
- NSColor.green, stops)
-```
-
-### Categorical
-
-Categorical interpolation mode took a stops dictionary. If the value for a specified feature attribute name matched one in that stops dictionary, the style value for that attribute value would be used. Categorical style functions can now be replaced with `MGL_MATCH`.
-
-`MGL_MATCH` takes an initial condition, which in this case is an attribute key. This is followed by possible matches for that key and the value to assign to the layer property if there is a match. The final argument can be a default style value that is to be used if none of the specified values match.
-
-There are three main types of events in the USGS dataset: earthquakes, explosions, and quarry blasts. In this case, the color of the circle layer will be determined by the type of event, with a default value of blue to catch any events that do not fall into any of those categories.
-
-Style function syntax:
-
-```swift
-let categoricalStops = [
- "earthquake": MGLStyleValue<UIColor>(rawValue: .orange),
- "explosion": MGLStyleValue(rawValue: .red),
- "quarry blast": MGLStyleValue(rawValue: .yellow),
-]
-
-layer.circleColor = MGLStyleValue(interpolationMode: .categorical,
- sourceStops: categoricalStops,
- attributeName: "type",
- options: [.defaultValue: MGLStyleValue<UIColor>(rawValue: .blue)])
-```
-
-Current syntax:
-```swift
-let defaultColor = NSColor.blue
-layer.circleColor = NSExpression(
-format: "MGL_MATCH(type, 'earthquake', %@, 'explosion', %@, 'quarry blast', %@, %@)",
- NSColor.orange, NSColor.red, NSColor.yellow, defaultColor)
-```
-
-If your use case does not require a default value, you can either apply a predicate to your layer prior to styling it, or use the format string `"valueForKeyPath:"`.
-
-### Identity
-
-Identity interpolation mode used the attribute’s value as the style layer property value. In this example, you might set the `circleRadius` to the earthquake’s magnitude. In order to use a feature attribute value to style a layer property, set the property value to `[NSExpression expressionForKeyPath:]`, which take the feature attribute name as an argument.
-
-Style function syntax:
-
-```swift
-layer.circleRadius = MGLStyleValue(interpolationMode: .identity,
- sourceStops: nil,
- attributeName: "mag",
- options: [.defaultValue: MGLStyleValue<NSNumber>(rawValue: 0)])
-```
-
-Current syntax:
-```swift
-layer.circleRadius = NSExpression(forKeyPath: "mag")
-```
-
-![identity mode](img/data-driven-styling/identity.png)
-
-Some built-in functions can be applied to attribute values to style layer property values. To set the circle radius to three times the earthquake’s magnitude, create a `multiply:by:` function that takes the attribute value and the multiplier as arguments, or use a format string.
-
-```swift
-layer.circleRadius = NSExpression(forFunction: "multiply:by:", arguments: [NSExpression(forKeyPath: "mag"), 3])
-```
-
-![multiply magnitude](img/data-driven-styling/multiply.png)
-
-You can also cast attribute values in order to use them. One example is to cast an integer as an `NSString` and use it as a text value.
-
-```swift
-let magnitudeLayer = MGLSymbolStyleLayer(identifier: "mag-layer", source: source)
-magnitudeLayer.text = NSExpression(format: "CAST(mag, 'NSString')")
-mapView.style?.addLayer(magnitudeLayer)
-```
-
-![cast a value](img/data-driven-styling/cast.png)
-
-### Constant Values
-
-For constant values that do not necessarily change based on camera or attribute values, use `[NSExpression expressionForConstantValue:]` (previously `[MGLStyleValue valueWithRawValue:]`).
-
-## Resources
-
-* [USGS Earthquake Feed](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php)
-* [For Style Authors](for-style-authors.html)
-* [Predicates and Expressions](predicates-and-expressions.html)
diff --git a/platform/macos/docs/guides/Tile URL Templates.md b/platform/macos/docs/guides/Tile URL Templates.md
deleted file mode 100644
index e71bcab0a4..0000000000
--- a/platform/macos/docs/guides/Tile URL Templates.md
+++ /dev/null
@@ -1,98 +0,0 @@
-<!--
- This file is generated.
- Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`.
--->
-# Tile URL Templates
-
-`MGLTileSource` objects, specifically `MGLRasterTileSource` and
-`MGLVectorTileSource` objects, can be created using an initializer that accepts
-an array of tile URL templates. Tile URL templates are strings that specify the
-URLs of the vector tiles or raster tile images to load. A template resembles an
-absolute URL, but with any number of placeholder strings that the source
-evaluates based on the tile it needs to load. For example:
-
-* `http://www.example.com/tiles/{z}/{x}/{y}.pbf` could be
- evaluated as `http://www.example.com/tiles/14/6/9.pbf`.
-* `http://www.example.com/tiles/{z}/{x}/{y}{ratio}.png` could be
- evaluated as `http://www.example.com/tiles/14/6/9@2x.png`.
-
-Tile URL templates are also used to define tilesets in TileJSON manifests or
-[`raster`](https://www.mapbox.com/mapbox-gl-js/style-spec/#sources-raster-tiles)
-and
-[`vector`](https://www.mapbox.com/mapbox-gl-js/style-spec/#sources-vector-tiles)
-sources in style JSON files. See the
-[TileJSON specification](https://github.com/mapbox/tilejson-spec/tree/master/2.2.0)
-for information about tile URL templates in the context of a TileJSON or style
-JSON file.
-
-Tile sources support the following placeholder strings in tile URL templates,
-all of which are optional:
-
-<table>
-<thead>
-<tr><th>Placeholder string</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr>
- <td><code>{x}</code></td>
- <td>The index of the tile along the map’s x axis according to Spherical
- Mercator projection. If the value is 0, the tile’s left edge corresponds
- to the 180th meridian west. If the value is 2<sup><var>z</var></sup>−1,
- the tile’s right edge corresponds to the 180th meridian east.</td>
-</tr>
-<tr>
- <td><code>{y}</code></td>
- <td>The index of the tile along the map’s y axis according to Spherical
- Mercator projection. If the value is 0, the tile’s tile edge corresponds
- to arctan(sinh(π)), or approximately 85.0511 degrees north. If the value
- is 2<sup><var>z</var></sup>−1, the tile’s bottom edge corresponds to
- −arctan(sinh(π)), or approximately 85.0511 degrees south. The y axis is
- inverted if the <code>options</code> parameter contains
- <code>MGLTileSourceOptionTileCoordinateSystem</code> with a value of
- <code>MGLTileCoordinateSystemTMS</code>.</td>
-</tr>
-<tr>
- <td><code>{z}</code></td>
- <td>The tile’s zoom level. At zoom level 0, each tile covers the entire
- world map; at zoom level 1, it covers ¼ of the world; at zoom level 2,
- <sup>1</sup>⁄<sub>16</sub> of the world, and so on. For tiles loaded by
- a <code>MGLRasterTileSource</code> object, whether the tile zoom level
- matches the map’s current zoom level depends on the value of the
- source’s tile size as specified in the
- <code>MGLTileSourceOptionTileSize</code> key of the <code>options</code>
- parameter.</td>
-</tr>
-<tr>
- <td><code>{bbox-epsg-3857}</code></td>
- <td>The tile’s bounding box, expressed as a comma-separated list of the
- tile’s western, southern, eastern, and northern extents according to
- Spherical Mercator (EPSG:3857) projection. The bounding box is typically
- used with map services conforming to the
- <a href="http://www.opengeospatial.org/standards/wms">Web Map Service</a>
- protocol.</td>
-</tr>
-<tr>
- <td><code>{quadkey}</code></td>
- <td>A quadkey indicating both the tile’s location and its zoom level. The
- quadkey is typically used with
- <a href="https://msdn.microsoft.com/en-us/library/bb259689.aspx">Bing Maps</a>.
- </td>
-</tr>
-<tr>
- <td><code>{ratio}</code></td>
- <td>A suffix indicating the resolution of the tile image. The suffix is the
- empty string for standard resolution displays and <code>@2x</code> for
- Retina displays.
- </td>
-</tr>
-<tr>
- <td><code>{prefix}</code></td>
- <td>Two hexadecimal digits chosen such that each visible tile has a
- different prefix. The prefix is typically used for domain sharding.</td>
-</tr>
-</tbody>
-</table>
-
-For more information about the `{x}`, `{y}`, and `{z}` placeholder strings,
-consult the
-[OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames).
diff --git a/platform/macos/docs/img/screenshot.jpg b/platform/macos/docs/img/screenshot.jpg
deleted file mode 100644
index 4af752b299..0000000000
--- a/platform/macos/docs/img/screenshot.jpg
+++ /dev/null
Binary files differ
diff --git a/platform/macos/docs/pod-README.md b/platform/macos/docs/pod-README.md
deleted file mode 100644
index 6fd0926443..0000000000
--- a/platform/macos/docs/pod-README.md
+++ /dev/null
@@ -1,98 +0,0 @@
-# [Mapbox Maps SDK for macOS](https://github.com/mapbox/mapbox-gl-native/tree/master/platform/macos/)
-
-Put interactive, scalable world maps into your native Cocoa application with the open-source Mapbox Maps SDK for macOS.
-
-* Mapbox-curated [map styles](https://www.mapbox.com/maps/) and [OpenStreetMap-based](https://www.mapbox.com/vector-tiles/mapbox-streets-v7/) [vector tiles](https://www.mapbox.com/vector-tiles/) make it easy to get started.
-* Customize every aspect of the map’s appearance in code or visually using [Mapbox Studio](https://www.mapbox.com/mapbox-studio/).
-* High-performance OpenGL rendering and multitouch gestures keep your users happy.
-* A well-designed, fully documented API helps you stay productive.
-* Develop across [multiple platforms](https://www.mapbox.com/maps/), including [iOS](https://docs.mapbox.com/ios/maps/), using the same styles and similar APIs.
-
-![](https://raw.githubusercontent.com/mapbox/mapbox-gl-native/master/platform/macos/docs/img/screenshot.jpg)
-
-The Mapbox Maps SDK for macOS is compatible with macOS 10.11.0 and above for Cocoa applications developed in Objective-C, Swift, Interface Builder, or AppleScript. For hybrid applications, consider [Mapbox GL JS](https://www.mapbox.com/mapbox-gl-js/).
-
-## Installation
-
-There are three ways to install the Mapbox Maps SDK for macOS:
-
-### Manually
-
-1. Download the [latest Mapbox Maps SDK for macOS release](https://github.com/mapbox/mapbox-gl-native/releases/) from GitHub – look for a release that begins with “macos-”.
-
-1. Open the project editor, select your application target, then go to the General tab. Drag Mapbox.framework into the “Embedded Binaries” section. (Don’t drag it into the “Linked Frameworks and Libraries” section; Xcode will add it there automatically.) In the sheet that appears, make sure “Copy items if needed” is checked, then click Finish.
-
-### Via Carthage
-
-The Mapbox Maps SDK for macOS is a binary-only dependency, so you’ll need Carthage 0.19 or above. In your [Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#binary-only-frameworks), specify this dependency (plus an optional version requirement):
-
-```
-binary "https://mapbox.github.io/mapbox-gl-native/macos/Mapbox-macOS-SDK.json"
-```
-
-After running `carthage update`, you’ll find Mapbox.framework in the Carthage/Build/ folder. Follow [these instructions](https://github.com/Carthage/Carthage#if-youre-building-for-os-x) to integrate it into your project.
-
-### Via CocoaPods
-
-Create a [Podfile](https://guides.cocoapods.org/syntax/podfile.html) with the following specification:
-
-```rb
-platform :osx, '10.11'
-
-target 'TargetNameForYourApp' do
- pod 'Mapbox-macOS-SDK', '~> x.y'
-end
-```
-
-where _x.y_ is the current version. In Terminal, run `pod install`.
-
-## Usage
-
-Mapbox vector tiles require a Mapbox account and API access token. In the project editor, select the application target, then go to the Info tab. Under the “Custom macOS Application Target Properties” section, set `MGLMapboxAccessToken` to your access token. You can obtain an access token from the [Mapbox account page](https://www.mapbox.com/studio/account/tokens/).
-
-Then, in a storyboard or XIB:
-
-1. Add a view to your view controller or window. (Drag Custom View from the Object library to the View Controller scene on the Interface Builder canvas. In a XIB, drag it instead to the window on the canvas.)
-2. In the Identity inspector, set the view’s custom class to `MGLMapView`.
-3. MGLMapView needs to be layer-backed:
- * You can make the window layer-backed by selecting the window and checking Full Size Content View in the Attributes inspector. This allows the map view to underlap the title bar and toolbar.
- * Alternatively, if you don’t want the entire window to be layer-backed, you can make just the map view layer-backed by selecting it and checking its entry under the View Effects inspector’s Core Animation Layer section.
-4. Add a map feedback item to your Help menu. (Drag Menu Item from the Object library into Main Menu ‣ Help ‣ Menu.) Title it “Improve This Map” or similar, and connect it to the `giveFeedback:` action of First Responder.
-
-If you need to manipulate the map view programmatically:
-
-1. Switch to the Assistant Editor.
-1. Import the `Mapbox` module.
-1. Connect the map view to a new outlet in your view controller class. (Control-drag from the map view in Interface Builder to a valid location in your view controller implementation.) The resulting outlet declaration should look something like this:
-
-```objc
-// ViewController.m
-@import Mapbox;
-
-@interface ViewController : NSViewController
-
-@property (strong) IBOutlet MGLMapView *mapView;
-
-@end
-```
-
-```swift
-// ViewController.swift
-import Mapbox
-
-class ViewController: NSViewController {
- @IBOutlet var mapView: MGLMapView!
-}
-```
-
-```applescript
--- AppDelegate.applescript
-script AppDelegate
- property parent : class "NSObject"
- property theMapView : missing value
-end script
-```
-
-Full API documentation is included in this package, within the `documentation` folder, and [online](https://mapbox.github.io/mapbox-gl-native/macos/). The [Mapbox Maps SDK for iOS](https://docs.mapbox.com/ios/maps/) has [API documentation](https://docs.mapbox.com/ios/api/maps/) and [online examples](https://docs.mapbox.com/ios/maps/examples/) that apply to the Mapbox Maps SDK for macOS with few differences, mostly around unimplemented features like user location tracking.
-
-Mapbox does not officially support the macOS SDK to the same extent as the iOS SDK; however, [bug reports and pull requests](https://github.com/mapbox/mapbox-gl-native/issues/) are certainly welcome.
diff --git a/platform/macos/jazzy.yml b/platform/macos/jazzy.yml
deleted file mode 100644
index 381e6f8b33..0000000000
--- a/platform/macos/jazzy.yml
+++ /dev/null
@@ -1,118 +0,0 @@
-module: Mapbox
-author: Mapbox
-author_url: https://www.mapbox.com/
-github_url: https://github.com/mapbox/mapbox-gl-native
-dash_url: https://mapbox.github.io/mapbox-gl-native/macos/docsets/Mapbox.xml
-copyright: '© 2014–2019 [Mapbox](https://www.mapbox.com/). See [license](https://github.com/mapbox/mapbox-gl-native/blob/master/LICENSE.md) for more details.'
-
-head: |
- <link rel='shortcut icon' href='https://www.mapbox.com/img/favicon.ico' type='image/x-icon' />
-
-objc: Yes
-skip_undocumented: Yes
-hide_documentation_coverage: Yes
-umbrella_header: src/Mapbox.h
-framework_root: ../darwin/src
-
-custom_categories:
- - name: Appendices
- children:
- - Working with GeoJSON Data
- - Predicates and Expressions
- - For Style Authors
- - Migrating to Expressions
- - Tile URL Templates
- - Info.plist Keys
- - name: Maps
- children:
- - MGLAccountManager
- - MGLMapCamera
- - MGLMapView
- - MGLMapViewDelegate
- - MGLMapSnapshot
- - MGLMapSnapshotOptions
- - MGLMapSnapshotter
- - name: Shapes and Annotations
- children:
- - MGLAnnotation
- - MGLAnnotationImage
- - MGLOverlay
- - MGLShape
- - MGLMultiPoint
- - MGLPointAnnotation
- - MGLPointCollection
- - MGLPolygon
- - MGLPolyline
- - MGLMultiPolygon
- - MGLMultiPolyline
- - MGLShapeCollection
- - name: Styling the Map
- children:
- - MGLStyle
- - MGLLight
- - name: Content Primitives
- children:
- - MGLFeature
- - MGLPointFeature
- - MGLPolygonFeature
- - MGLPolylineFeature
- - MGLMultiPolygonFeature
- - MGLMultiPolylineFeature
- - MGLPointCollectionFeature
- - MGLShapeCollectionFeature
- - name: Content Sources
- children:
- - MGLSource
- - MGLShapeSource
- - MGLComputedShapeSource
- - MGLTileSource
- - MGLRasterTileSource
- - MGLRasterDEMSource
- - MGLVectorTileSource
- - MGLImageSource
- - name: Style Layers
- children:
- - MGLStyleLayer
- - MGLForegroundStyleLayer
- - MGLBackgroundStyleLayer
- - MGLRasterStyleLayer
- - MGLVectorStyleLayer
- - MGLCircleStyleLayer
- - MGLFillStyleLayer
- - MGLFillExtrusionStyleLayer
- - MGLHeatmapStyleLayer
- - MGLHillshadeStyleLayer
- - MGLLineStyleLayer
- - MGLSymbolStyleLayer
- - name: Offline Maps
- children:
- - MGLOfflineRegion
- - MGLOfflineStorage
- - MGLOfflinePack
- - MGLOfflinePackProgress
- - MGLOfflinePackState
- - MGLTilePyramidOfflineRegion
- - MGLShapeOfflineRegion
- - name: Geometry
- children:
- - MGLCoordinateBounds
- - MGLCoordinateBoundsEqualToCoordinateBounds
- - MGLCoordinateBoundsGetCoordinateSpan
- - MGLCoordinateBoundsIntersectsCoordinateBounds
- - MGLCoordinateBoundsIsEmpty
- - MGLCoordinateBoundsMake
- - MGLCoordinateBoundsOffset
- - MGLCoordinateInCoordinateBounds
- - MGLCoordinateSpan
- - MGLCoordinateSpanEqualToCoordinateSpan
- - MGLCoordinateSpanMake
- - MGLCoordinateSpanZero
- - MGLDegreesFromRadians
- - MGLRadiansFromDegrees
- - MGLStringFromCoordinateBounds
- - name: Formatters
- children:
- - MGLClockDirectionFormatter
- - MGLCompassDirectionFormatter
- - MGLCoordinateFormatter
- - MGLDistanceFormatter
diff --git a/platform/macos/macos.cmake b/platform/macos/macos.cmake
index 61b6a33be9..3e23b8d5be 100644
--- a/platform/macos/macos.cmake
+++ b/platform/macos/macos.cmake
@@ -35,7 +35,6 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m
${PROJECT_SOURCE_DIR}/platform/darwin/src/nsthread.mm
${PROJECT_SOURCE_DIR}/platform/darwin/src/number_format.mm
- ${PROJECT_SOURCE_DIR}/platform/darwin/src/reachability.m
${PROJECT_SOURCE_DIR}/platform/darwin/src/run_loop.cpp
${PROJECT_SOURCE_DIR}/platform/darwin/src/string_nsstring.mm
${PROJECT_SOURCE_DIR}/platform/darwin/src/timer.cpp
diff --git a/platform/macos/macos.xcodeproj/project.pbxproj b/platform/macos/macos.xcodeproj/project.pbxproj
deleted file mode 100644
index 7dcd72b47d..0000000000
--- a/platform/macos/macos.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,2332 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- 0721493F1EE200E900085505 /* MGLImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A019EB1ED662D800ACD43E /* MGLImageSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 076171C5213A0DC200668A35 /* MGLMapViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 076171C4213A0DC200668A35 /* MGLMapViewTests.m */; };
- 07A019EF1ED665CD00ACD43E /* MGLImageSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07A019EC1ED662D800ACD43E /* MGLImageSource.mm */; };
- 07A240941F675674002C8210 /* MGLComputedShapeSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A240921F67566F002C8210 /* MGLComputedShapeSourceTests.m */; };
- 07BA4CAC1EE21887004528F5 /* MGLImageSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BA4CAB1EE21887004528F5 /* MGLImageSourceTests.m */; };
- 07D9474D1F67441B00E37934 /* MGLComputedShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D947471F6741F500E37934 /* MGLComputedShapeSource_Private.h */; };
- 07F8E2F71F674C8800F794BB /* MGLComputedShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 07F8E2F41F674C8000F794BB /* MGLComputedShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 07F8E2F81F674C9000F794BB /* MGLComputedShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07F8E2F51F674C8000F794BB /* MGLComputedShapeSource.mm */; };
- 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 */; };
- 1F7454AB1ED1DDBD00021D39 /* MGLLightTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F7454AA1ED1DDBD00021D39 /* MGLLightTest.mm */; };
- 1F8A59FA21653483004DFE75 /* sideload_sat.db in Resources */ = {isa = PBXBuildFile; fileRef = 1F8A59F921653483004DFE75 /* sideload_sat.db */; };
- 1F8A5A04216D4696004DFE75 /* MGLLoggingConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F8A5A01216D4695004DFE75 /* MGLLoggingConfiguration_Private.h */; };
- 1F8A5A06216D4696004DFE75 /* MGLLoggingConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F8A5A03216D4696004DFE75 /* MGLLoggingConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 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, ); }; };
- 3508EC651D749D39009B0EE4 /* NSExpression+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3508EC631D749D39009B0EE4 /* NSExpression+MGLAdditions.mm */; };
- 3526EABD1DF9B19800006B43 /* MGLCodingTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3526EABC1DF9B19800006B43 /* MGLCodingTests.mm */; };
- 352742781D4C220900A1ECE6 /* MGLStyleValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 352742771D4C220900A1ECE6 /* MGLStyleValue.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 352742811D4C243B00A1ECE6 /* MGLSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3527427F1D4C243B00A1ECE6 /* MGLSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 352742821D4C243B00A1ECE6 /* MGLSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 352742801D4C243B00A1ECE6 /* MGLSource.mm */; };
- 352742851D4C244700A1ECE6 /* MGLRasterTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 352742831D4C244700A1ECE6 /* MGLRasterTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 352742861D4C244700A1ECE6 /* MGLRasterTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 352742841D4C244700A1ECE6 /* MGLRasterTileSource.mm */; };
- 352742891D4C245800A1ECE6 /* MGLShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 352742871D4C245800A1ECE6 /* MGLShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 3527428A1D4C245800A1ECE6 /* MGLShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 352742881D4C245800A1ECE6 /* MGLShapeSource.mm */; };
- 3527428D1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3527428B1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 3527428E1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3527428C1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.mm */; };
- 352742A11D4C25BD00A1ECE6 /* MGLStyleValue.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3527429E1D4C25BD00A1ECE6 /* MGLStyleValue.mm */; };
- 3529039B1D6C63B80002C7DF /* NSPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 352903991D6C63B80002C7DF /* NSPredicate+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 3529039C1D6C63B80002C7DF /* NSPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3529039A1D6C63B80002C7DF /* NSPredicate+MGLAdditions.mm */; };
- 3537CA741D3F93A600380318 /* MGLStyle_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3537CA731D3F93A600380318 /* MGLStyle_Private.h */; };
- 3538AA231D542685008EC33D /* MGLStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3538AA211D542685008EC33D /* MGLStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 3538AA241D542685008EC33D /* MGLStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3538AA221D542685008EC33D /* MGLStyleLayer.mm */; };
- 353BAEF81D6463B8009A8DA9 /* amsterdam.geojson in Resources */ = {isa = PBXBuildFile; fileRef = 358EB3AE1D61F0DB00E46D9C /* amsterdam.geojson */; };
- 355BA4ED1D41633E00CCC6D5 /* NSColor+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 355BA4EB1D41633E00CCC6D5 /* NSColor+MGLAdditions.h */; };
- 355BA4EE1D41633E00CCC6D5 /* NSColor+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 355BA4EC1D41633E00CCC6D5 /* NSColor+MGLAdditions.mm */; };
- 35602BFA1D3EA99F0050646F /* MGLFillStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 35602BF81D3EA99F0050646F /* MGLFillStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 35602BFB1D3EA99F0050646F /* MGLFillStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35602BF91D3EA99F0050646F /* MGLFillStyleLayer.mm */; };
- 35602BFF1D3EA9B40050646F /* MGLStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 35602BFC1D3EA9B40050646F /* MGLStyleLayer_Private.h */; };
- 35602C001D3EA9B40050646F /* MGLForegroundStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 35602BFD1D3EA9B40050646F /* MGLForegroundStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 35602C011D3EA9B40050646F /* MGLForegroundStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35602BFE1D3EA9B40050646F /* MGLForegroundStyleLayer.mm */; };
- 35724FC41D630502002A4AB4 /* amsterdam.geojson in Resources */ = {isa = PBXBuildFile; fileRef = 358EB3AE1D61F0DB00E46D9C /* amsterdam.geojson */; };
- 359819591E02F611008FC139 /* NSCoder+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 359819571E02F611008FC139 /* NSCoder+MGLAdditions.h */; };
- 3598195A1E02F611008FC139 /* NSCoder+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 359819581E02F611008FC139 /* NSCoder+MGLAdditions.mm */; };
- 35C5D8471D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C5D8431D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.h */; };
- 35C5D8481D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35C5D8441D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.mm */; };
- 35C5D8491D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C5D8451D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.h */; };
- 35C5D84A1D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35C5D8461D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.mm */; };
- 35C6DF841E214C0400ACA483 /* MGLDistanceFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C6DF821E214C0400ACA483 /* MGLDistanceFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 35C6DF851E214C0400ACA483 /* MGLDistanceFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 35C6DF831E214C0400ACA483 /* MGLDistanceFormatter.m */; };
- 35C6DF871E214C1800ACA483 /* MGLDistanceFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 35C6DF861E214C1800ACA483 /* MGLDistanceFormatterTests.m */; };
- 35D65C5A1D65AD5500722C23 /* NSDate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35D65C581D65AD5500722C23 /* NSDate+MGLAdditions.h */; };
- 35D65C5B1D65AD5500722C23 /* NSDate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35D65C591D65AD5500722C23 /* NSDate+MGLAdditions.mm */; };
- 3E6465D9206576A900685536 /* LimeGreenStyleLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E6465D7206576A800685536 /* LimeGreenStyleLayer.m */; };
- 3EA9317388DC9A0BF46B7674 /* MGLRendererConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EA9369A4C46957566058822 /* MGLRendererConfiguration.h */; };
- 3EA93BA38DBB4B814B6C1FCC /* MGLRendererConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3EA93B1B0864609938506E12 /* MGLRendererConfiguration.mm */; };
- 4031ACFC1E9EB3C100A3EA26 /* MGLMapViewDelegateIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4031ACFB1E9EB3C100A3EA26 /* MGLMapViewDelegateIntegrationTests.swift */; };
- 4031AD031E9FD6AA00A3EA26 /* MGLSDKTestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4031AD011E9FD6A300A3EA26 /* MGLSDKTestHelpers.swift */; };
- 4049C2A51DB6CE7F00B3F799 /* MGLPointCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 4049C2A11DB6CE7800B3F799 /* MGLPointCollection.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 4049C2AD1DB8020600B3F799 /* MGLPointCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4049C2A71DB6D09B00B3F799 /* MGLPointCollection.mm */; };
- 408AA85B1DAEECFE00022900 /* MGLShape_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 408AA85A1DAEECF100022900 /* MGLShape_Private.h */; };
- 408AA8671DAEEE3900022900 /* NSDictionary+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 408AA85F1DAEED3300022900 /* NSDictionary+MGLAdditions.h */; };
- 408AA86A1DAEEE5D00022900 /* NSDictionary+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 408AA85E1DAEED3300022900 /* NSDictionary+MGLAdditions.mm */; };
- 40ABDB561DB0022100372083 /* NSImage+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 405C03971DB0004E001AC280 /* NSImage+MGLAdditions.mm */; };
- 40B77E451DB11BC9003DA2FE /* NSArray+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 40B77E431DB11BB0003DA2FE /* NSArray+MGLAdditions.h */; };
- 40B77E461DB11BCD003DA2FE /* NSArray+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 40B77E421DB11BB0003DA2FE /* NSArray+MGLAdditions.mm */; };
- 40E1601D1DF217D6005EA6D9 /* MGLStyleLayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40E1601B1DF216E6005EA6D9 /* MGLStyleLayerTests.m */; };
- 52B5D17F1E5E26DF00BBCB48 /* libmbgl-loop-darwin.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5548BE7B1D0ACBBD005DDE81 /* libmbgl-loop-darwin.a */; };
- 52B5D1801E5E26DF00BBCB48 /* libmbgl-loop-darwin.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5548BE7B1D0ACBBD005DDE81 /* libmbgl-loop-darwin.a */; };
- 55335DF9212EC542000CE5F8 /* NSImage+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 405C03961DB0004E001AC280 /* NSImage+MGLAdditions.h */; };
- 5548BE781D09E718005DDE81 /* libmbgl-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE6C3451CC31D1200DB3429 /* libmbgl-core.a */; };
- 556660C61E1BEA0100E2C41B /* MGLFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 556660C51E1BEA0100E2C41B /* MGLFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 556660D61E1D07E400E2C41B /* MGLVersionNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 556660D51E1D07E400E2C41B /* MGLVersionNumber.m */; };
- 558DE7A61E56161C00C7916D /* MGLFoundation_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 558DE7A41E56161C00C7916D /* MGLFoundation_Private.h */; };
- 558DE7A71E56161C00C7916D /* MGLFoundation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 558DE7A51E56161C00C7916D /* MGLFoundation.mm */; };
- 5591AC6A2298361600FF9ADF /* MGLMapView+Impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5591AC682298361600FF9ADF /* MGLMapView+Impl.h */; };
- 5591AC6B2298361600FF9ADF /* MGLMapView+Impl.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5591AC692298361600FF9ADF /* MGLMapView+Impl.mm */; };
- 55CAF6322294407F00F17770 /* MGLMapView+OpenGL.h in Headers */ = {isa = PBXBuildFile; fileRef = 55CAF6312294407F00F17770 /* MGLMapView+OpenGL.h */; };
- 55CAF6342294409B00F17770 /* MGLMapView+OpenGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55CAF6332294409B00F17770 /* MGLMapView+OpenGL.mm */; };
- 55CF7533213EDADF00ED86C4 /* libmbgl-vendor-icu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */; };
- 55D120A31F7906E6004B6D81 /* libmbgl-filesource.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55D120A41F7906E6004B6D81 /* libmbgl-filesource.a */; };
- 55D120A51F790A0C004B6D81 /* libmbgl-filesource.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55D120A41F7906E6004B6D81 /* libmbgl-filesource.a */; };
- 55E2AD111E5B0A6900E8C587 /* MGLOfflineStorageTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */; };
- 747ABE59219B2BDB00523B67 /* MGLFillExtrusionStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE54219B2BDA00523B67 /* MGLFillExtrusionStyleLayer_Private.h */; };
- 747ABE5A219B2BDB00523B67 /* MGLCircleStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE55219B2BDA00523B67 /* MGLCircleStyleLayer_Private.h */; };
- 747ABE5B219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE56219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h */; };
- 747ABE5C219B2BDB00523B67 /* MGLFillStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE57219B2BDB00523B67 /* MGLFillStyleLayer_Private.h */; };
- 747ABE5D219B2BDB00523B67 /* MGLHeatmapStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE58219B2BDB00523B67 /* MGLHeatmapStyleLayer_Private.h */; };
- 747ABE5F219B2BED00523B67 /* MGLHillshadeStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE5E219B2BED00523B67 /* MGLHillshadeStyleLayer_Private.h */; };
- 747ABE61219B2C0000523B67 /* MGLLineStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE60219B2C0000523B67 /* MGLLineStyleLayer_Private.h */; };
- 747ABE64219B2C1800523B67 /* MGLOpenGLStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE62219B2C1700523B67 /* MGLOpenGLStyleLayer_Private.h */; };
- 747ABE65219B2C1800523B67 /* MGLRasterStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE63219B2C1700523B67 /* MGLRasterStyleLayer_Private.h */; };
- 747ABE67219B2C3200523B67 /* MGLSymbolStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE66219B2C3200523B67 /* MGLSymbolStyleLayer_Private.h */; };
- 749EC8912199CCB9005608D7 /* MGLStyleLayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 749EC88F2199CCB8005608D7 /* MGLStyleLayerManager.h */; };
- 749EC8932199CCB9005608D7 /* MGLStyleLayerManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 749EC8902199CCB9005608D7 /* MGLStyleLayerManager.mm */; };
- 89462399200D199100DA8EF2 /* heatmap.json in Resources */ = {isa = PBXBuildFile; fileRef = 89462398200D199100DA8EF2 /* heatmap.json */; };
- 8946239D200E744800DA8EF2 /* MGLHeatmapStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8946239A200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 894623A0200E748000DA8EF2 /* MGLHeatmapStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8946239B200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.mm */; };
- 92092EF01F5EB10E00AF5130 /* MGLMapSnapshotter.h in Headers */ = {isa = PBXBuildFile; fileRef = 92092EEE1F5EB10E00AF5130 /* MGLMapSnapshotter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 92092EF11F5EB10E00AF5130 /* MGLMapSnapshotter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 92092EEF1F5EB10E00AF5130 /* MGLMapSnapshotter.mm */; };
- 920A3E591E6F859D00C16EFC /* MGLSourceQueryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 920A3E581E6F859D00C16EFC /* MGLSourceQueryTests.m */; };
- 9221BAAF20699CBB0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9221BAAE20699CBA0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h */; };
- 9250B8C32073C69100EF338C /* MGLShapeOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = 9250B8C22073C69000EF338C /* MGLShapeOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 92F2C3EB1F0E3A1900268EC0 /* MGLRendererFrontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F2C3EA1F0E3A1900268EC0 /* MGLRendererFrontend.h */; };
- 92FC0AE4207CC8DA007B6B54 /* MGLShapeOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 92FC0AE3207CC8DA007B6B54 /* MGLShapeOfflineRegion_Private.h */; };
- 92FC0AE6207CDD8D007B6B54 /* MGLShapeOfflineRegion.mm in Sources */ = {isa = PBXBuildFile; fileRef = 92FC0AE5207CDD8D007B6B54 /* MGLShapeOfflineRegion.mm */; };
- 9654C12B1FFC38E000DB6A19 /* MGLPolyline_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9654C12A1FFC38E000DB6A19 /* MGLPolyline_Private.h */; };
- 9654C12D1FFC394700DB6A19 /* MGLPolygon_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9654C12C1FFC394700DB6A19 /* MGLPolygon_Private.h */; };
- 96E027311E57C9A7004B8E66 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 96E027331E57C9A7004B8E66 /* Localizable.strings */; };
- CA0B3C072329F7E700E4B493 /* MGLTestAssertionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = CA0B3C052329F7E600E4B493 /* MGLTestAssertionHandler.m */; };
- CA0B3C092329FB4800E4B493 /* MGLOfflinePackTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA0B3C082329FB4800E4B493 /* MGLOfflinePackTests.mm */; };
- CA4045C7216720D700B356E1 /* MGLCluster.h in Headers */ = {isa = PBXBuildFile; fileRef = CA4045C4216720D700B356E1 /* MGLCluster.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CA8FBC0D21A4A74300D1203C /* MGLRendererConfigurationTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA8FBC0C21A4A74300D1203C /* MGLRendererConfigurationTests.mm */; };
- CA9461A620884CCB0015EB12 /* MGLAnnotationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA9461A520884CCB0015EB12 /* MGLAnnotationTests.m */; };
- CAD9D0AC22A88A32001B25EE /* MGLResourceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CAD9D0AB22A88A32001B25EE /* MGLResourceTests.mm */; };
- CF762DEF22DC7EFF00338472 /* MGLLoggingConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = CF762DEE22DC7EFF00338472 /* MGLLoggingConfiguration.mm */; };
- CFF9F98D23A2505700B0DE92 /* MGLNetworkIntegrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CFF9F98B23A2505700B0DE92 /* MGLNetworkIntegrationManager.m */; };
- CFF9F98E23A2505700B0DE92 /* MGLNetworkIntegrationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF9F98C23A2505700B0DE92 /* MGLNetworkIntegrationManager.h */; };
- DA00FC8A1D5EEAC3009AABC8 /* MGLAttributionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA00FC881D5EEAC3009AABC8 /* MGLAttributionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA00FC8B1D5EEAC3009AABC8 /* MGLAttributionInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA00FC891D5EEAC3009AABC8 /* MGLAttributionInfo.mm */; };
- DA0CD58E1CF56F5800A5F5A5 /* MGLFeatureTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA0CD58D1CF56F5800A5F5A5 /* MGLFeatureTests.mm */; };
- DA2784FE1DF03060001D5B8D /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA2784FD1DF03060001D5B8D /* Media.xcassets */; };
- DA29875A1E1A4290002299F5 /* MGLDocumentationExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA2987591E1A4290002299F5 /* MGLDocumentationExampleTests.swift */; };
- DA35A2A41CC9EB1A00E826B2 /* MGLCoordinateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2A31CC9EB1A00E826B2 /* MGLCoordinateFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA35A2A61CC9EB2700E826B2 /* MGLCoordinateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2A51CC9EB2700E826B2 /* MGLCoordinateFormatter.m */; };
- DA35A2A81CC9F41600E826B2 /* MGLCoordinateFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2A71CC9F41600E826B2 /* MGLCoordinateFormatterTests.m */; };
- DA35A2AD1CCA091800E826B2 /* MGLCompassDirectionFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2AB1CCA091800E826B2 /* MGLCompassDirectionFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA35A2AE1CCA091800E826B2 /* MGLCompassDirectionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2AC1CCA091800E826B2 /* MGLCompassDirectionFormatter.m */; };
- DA35A2B61CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2B51CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m */; };
- DA35A2BF1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2BD1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA35A2C01CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2BE1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m */; };
- DA35A2C21CCA9F4A00E826B2 /* MGLClockDirectionFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2C11CCA9F4A00E826B2 /* MGLClockDirectionFormatterTests.m */; };
- DA35A2CF1CCAAED300E826B2 /* NSValue+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2CD1CCAAED300E826B2 /* NSValue+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA35A2D01CCAAED300E826B2 /* NSValue+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2CE1CCAAED300E826B2 /* NSValue+MGLAdditions.m */; };
- DA35D08A1E1A631B007DED41 /* one-liner.json in Resources */ = {isa = PBXBuildFile; fileRef = DA35D0891E1A631B007DED41 /* one-liner.json */; };
- DA551B821DB496AC0009AFAF /* MGLTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DA551B7F1DB496AC0009AFAF /* MGLTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA551B831DB496AC0009AFAF /* MGLTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA551B801DB496AC0009AFAF /* MGLTileSource_Private.h */; };
- DA551B841DB496AC0009AFAF /* MGLTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA551B811DB496AC0009AFAF /* MGLTileSource.mm */; };
- DA5589771D320C41006B7F64 /* wms.json in Resources */ = {isa = PBXBuildFile; fileRef = DA5589761D320C41006B7F64 /* wms.json */; };
- DA57D4B11EBC699800793288 /* MGLDocumentationGuideTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA57D4B01EBC699800793288 /* MGLDocumentationGuideTests.swift */; };
- DA6408D71DA4E5DA00908C90 /* MGLVectorStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA6408D51DA4E5DA00908C90 /* MGLVectorStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA6408D81DA4E5DA00908C90 /* MGLVectorStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA6408D61DA4E5DA00908C90 /* MGLVectorStyleLayer.mm */; };
- DA695424215B1E6C002041A4 /* MGLMapCameraTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA695423215B1E6C002041A4 /* MGLMapCameraTests.m */; };
- DA7262071DEEDD460043BB89 /* MGLOpenGLStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7262051DEEDD460043BB89 /* MGLOpenGLStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA7262081DEEDD460043BB89 /* MGLOpenGLStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA7262061DEEDD460043BB89 /* MGLOpenGLStyleLayer.mm */; };
- DA7DC9811DED5F5C0027472F /* MGLVectorTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7DC9801DED5F5C0027472F /* MGLVectorTileSource_Private.h */; };
- DA7DC9831DED647F0027472F /* MGLRasterTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7DC9821DED647F0027472F /* MGLRasterTileSource_Private.h */; };
- DA839E971CC2E3400062CAFB /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA839E961CC2E3400062CAFB /* AppDelegate.m */; };
- DA839E9A1CC2E3400062CAFB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DA839E991CC2E3400062CAFB /* main.m */; };
- DA839E9D1CC2E3400062CAFB /* MapDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = DA839E9C1CC2E3400062CAFB /* MapDocument.m */; };
- DA839EA01CC2E3400062CAFB /* MapDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA839E9E1CC2E3400062CAFB /* MapDocument.xib */; };
- DA839EA21CC2E3400062CAFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA839EA11CC2E3400062CAFB /* Assets.xcassets */; };
- DA839EA51CC2E3400062CAFB /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA839EA31CC2E3400062CAFB /* MainMenu.xib */; };
- DA87A9981DC9D88400810D09 /* MGLShapeSourceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA87A9961DC9D88400810D09 /* MGLShapeSourceTests.mm */; };
- DA87A9991DC9D88400810D09 /* MGLTileSetTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA87A9971DC9D88400810D09 /* MGLTileSetTests.mm */; };
- DA87A99C1DC9D8DD00810D09 /* MGLShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA87A99B1DC9D8DD00810D09 /* MGLShapeSource_Private.h */; };
- DA87A99E1DC9DC2100810D09 /* MGLPredicateTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35C5D84B1D6DD75B00E95907 /* MGLPredicateTests.mm */; };
- DA87A9A01DC9DC6200810D09 /* MGLValueEvaluator.h in Headers */ = {isa = PBXBuildFile; fileRef = DA87A99F1DC9DC6200810D09 /* MGLValueEvaluator.h */; };
- DA87A9A21DC9DCF100810D09 /* MGLFillStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25741D51C5F40010E6B5 /* MGLFillStyleLayerTests.mm */; };
- DA87A9A31DCACC5000810D09 /* MGLRasterStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25751D51C5F40010E6B5 /* MGLRasterStyleLayerTests.mm */; };
- DA87A9A41DCACC5000810D09 /* MGLSymbolStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25761D51C5F40010E6B5 /* MGLSymbolStyleLayerTests.mm */; };
- DA87A9A51DCACC5000810D09 /* MGLLineStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25771D51C5F40010E6B5 /* MGLLineStyleLayerTests.mm */; };
- DA87A9A61DCACC5000810D09 /* MGLCircleStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25781D51C5F40010E6B5 /* MGLCircleStyleLayerTests.mm */; };
- DA87A9A71DCACC5000810D09 /* MGLBackgroundStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25791D51C5F40010E6B5 /* MGLBackgroundStyleLayerTests.mm */; };
- DA8933A51CCD287300E68420 /* MGLAnnotationCallout.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA8933A71CCD287300E68420 /* MGLAnnotationCallout.xib */; };
- DA8933AE1CCD290700E68420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA8933AB1CCD290700E68420 /* Localizable.strings */; };
- DA8933B51CCD2C2500E68420 /* Foundation.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA8933B31CCD2C2500E68420 /* Foundation.strings */; };
- DA8933B81CCD2C2D00E68420 /* Foundation.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = DA8933B61CCD2C2D00E68420 /* Foundation.stringsdict */; };
- DA8F25871D51C9E10010E6B5 /* MGLBackgroundStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25851D51C9E10010E6B5 /* MGLBackgroundStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA8F25881D51C9E10010E6B5 /* MGLBackgroundStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25861D51C9E10010E6B5 /* MGLBackgroundStyleLayer.mm */; };
- DA8F258B1D51CA540010E6B5 /* MGLLineStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25891D51CA540010E6B5 /* MGLLineStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA8F258C1D51CA540010E6B5 /* MGLLineStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F258A1D51CA540010E6B5 /* MGLLineStyleLayer.mm */; };
- DA8F258F1D51CA600010E6B5 /* MGLRasterStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F258D1D51CA600010E6B5 /* MGLRasterStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA8F25901D51CA600010E6B5 /* MGLRasterStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F258E1D51CA600010E6B5 /* MGLRasterStyleLayer.mm */; };
- DA8F25931D51CA750010E6B5 /* MGLSymbolStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25911D51CA750010E6B5 /* MGLSymbolStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA8F25941D51CA750010E6B5 /* MGLSymbolStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25921D51CA750010E6B5 /* MGLSymbolStyleLayer.mm */; };
- DA8F25971D51CAC70010E6B5 /* MGLVectorTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25951D51CAC70010E6B5 /* MGLVectorTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DA8F25981D51CAC70010E6B5 /* MGLVectorTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25961D51CAC70010E6B5 /* MGLVectorTileSource.mm */; };
- DA8F259A1D51CAD00010E6B5 /* MGLSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25991D51CAD00010E6B5 /* MGLSource_Private.h */; };
- DA8F259C1D51CB000010E6B5 /* MGLStyleValue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F259B1D51CB000010E6B5 /* MGLStyleValue_Private.h */; };
- DA8F25B21D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25A61D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h */; };
- DA8F25B31D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25A71D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm */; };
- DAA48EFD1D6A4731006A7E36 /* StyleLayerIconTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA48EFC1D6A4731006A7E36 /* StyleLayerIconTransformer.m */; };
- DAA998FB1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA998F91E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAA998FC1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAA998FA1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.mm */; };
- DAA999011E9F5EC5002E6EA6 /* MGLFillExtrusionStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAA999001E9F5EC5002E6EA6 /* MGLFillExtrusionStyleLayerTests.mm */; };
- DAC25FCA200FD5E2009BE98E /* NSExpression+MGLPrivateAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC25FC9200FD5E2009BE98E /* NSExpression+MGLPrivateAdditions.h */; };
- DAC2ABC51CC6D343006D18C4 /* MGLAnnotationImage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC2ABC41CC6D343006D18C4 /* MGLAnnotationImage_Private.h */; };
- DACA8622201920BE00E9693A /* MGLRasterDEMSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DACA8620201920BE00E9693A /* MGLRasterDEMSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DACA8623201920BE00E9693A /* MGLRasterDEMSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = DACA8621201920BE00E9693A /* MGLRasterDEMSource.mm */; };
- DACB0C391E18DFFD005DDBEA /* MGLStyle+MBXAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DACB0C381E18DFFD005DDBEA /* MGLStyle+MBXAdditions.m */; };
- DACC22141CF3D3E200D220D9 /* MGLFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = DACC22121CF3D3E200D220D9 /* MGLFeature.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DACC22151CF3D3E200D220D9 /* MGLFeature.mm in Sources */ = {isa = PBXBuildFile; fileRef = DACC22131CF3D3E200D220D9 /* MGLFeature.mm */; };
- DACC22181CF3D4F700D220D9 /* MGLFeature_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DACC22171CF3D4F700D220D9 /* MGLFeature_Private.h */; };
- DAD165741CF4CD7A001FF4B9 /* MGLShapeCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD165721CF4CD7A001FF4B9 /* MGLShapeCollection.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAD165751CF4CD7A001FF4B9 /* MGLShapeCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAD165731CF4CD7A001FF4B9 /* MGLShapeCollection.mm */; };
- DAE0DD7A1D5F015A005A6BB1 /* libmbgl-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE6C3451CC31D1200DB3429 /* libmbgl-core.a */; };
- DAE6C2E21CC304F900DB3429 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = DAE6C2E11CC304F900DB3429 /* Credits.rtf */; };
- DAE6C2ED1CC3050F00DB3429 /* DroppedPinAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C2E41CC3050F00DB3429 /* DroppedPinAnnotation.m */; };
- DAE6C2EE1CC3050F00DB3429 /* LocationCoordinate2DTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C2E61CC3050F00DB3429 /* LocationCoordinate2DTransformer.m */; };
- DAE6C2F01CC3050F00DB3429 /* OfflinePackNameValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C2EA1CC3050F00DB3429 /* OfflinePackNameValueTransformer.m */; };
- DAE6C2F11CC3050F00DB3429 /* TimeIntervalTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C2EC1CC3050F00DB3429 /* TimeIntervalTransformer.m */; };
- DAE6C3321CC30DB200DB3429 /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE6C3281CC30DB200DB3429 /* Mapbox.framework */; };
- DAE6C33D1CC30DB200DB3429 /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE6C3281CC30DB200DB3429 /* Mapbox.framework */; };
- DAE6C33E1CC30DB200DB3429 /* Mapbox.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DAE6C3281CC30DB200DB3429 /* Mapbox.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- DAE6C35A1CC31E0400DB3429 /* MGLAccountManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34A1CC31E0400DB3429 /* MGLAccountManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C35B1CC31E0400DB3429 /* MGLAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34B1CC31E0400DB3429 /* MGLAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C35C1CC31E0400DB3429 /* MGLGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34C1CC31E0400DB3429 /* MGLGeometry.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C35D1CC31E0400DB3429 /* MGLMapCamera.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34D1CC31E0400DB3429 /* MGLMapCamera.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C35E1CC31E0400DB3429 /* MGLMultiPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34E1CC31E0400DB3429 /* MGLMultiPoint.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C35F1CC31E0400DB3429 /* MGLOfflinePack.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34F1CC31E0400DB3429 /* MGLOfflinePack.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3601CC31E0400DB3429 /* MGLOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3501CC31E0400DB3429 /* MGLOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3611CC31E0400DB3429 /* MGLOfflineStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3511CC31E0400DB3429 /* MGLOfflineStorage.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3621CC31E0400DB3429 /* MGLOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3521CC31E0400DB3429 /* MGLOverlay.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3631CC31E0400DB3429 /* MGLPointAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3531CC31E0400DB3429 /* MGLPointAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3641CC31E0400DB3429 /* MGLPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3541CC31E0400DB3429 /* MGLPolygon.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3651CC31E0400DB3429 /* MGLPolyline.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3551CC31E0400DB3429 /* MGLPolyline.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3661CC31E0400DB3429 /* MGLShape.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3561CC31E0400DB3429 /* MGLShape.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3671CC31E0400DB3429 /* MGLStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3571CC31E0400DB3429 /* MGLStyle.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3681CC31E0400DB3429 /* MGLTilePyramidOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3581CC31E0400DB3429 /* MGLTilePyramidOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3691CC31E0400DB3429 /* MGLTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3591CC31E0400DB3429 /* MGLTypes.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3841CC31E2A00DB3429 /* MGLAccountManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C36A1CC31E2A00DB3429 /* MGLAccountManager_Private.h */; };
- DAE6C3851CC31E2A00DB3429 /* MGLAccountManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C36B1CC31E2A00DB3429 /* MGLAccountManager.m */; };
- DAE6C3861CC31E2A00DB3429 /* MGLGeometry_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C36C1CC31E2A00DB3429 /* MGLGeometry_Private.h */; };
- DAE6C3871CC31E2A00DB3429 /* MGLGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C36D1CC31E2A00DB3429 /* MGLGeometry.mm */; };
- DAE6C3881CC31E2A00DB3429 /* MGLMapCamera.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C36E1CC31E2A00DB3429 /* MGLMapCamera.mm */; };
- DAE6C3891CC31E2A00DB3429 /* MGLMultiPoint_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C36F1CC31E2A00DB3429 /* MGLMultiPoint_Private.h */; };
- DAE6C38A1CC31E2A00DB3429 /* MGLMultiPoint.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3701CC31E2A00DB3429 /* MGLMultiPoint.mm */; };
- DAE6C38B1CC31E2A00DB3429 /* MGLOfflinePack_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3711CC31E2A00DB3429 /* MGLOfflinePack_Private.h */; };
- DAE6C38C1CC31E2A00DB3429 /* MGLOfflinePack.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3721CC31E2A00DB3429 /* MGLOfflinePack.mm */; };
- DAE6C38D1CC31E2A00DB3429 /* MGLOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3731CC31E2A00DB3429 /* MGLOfflineRegion_Private.h */; };
- DAE6C38E1CC31E2A00DB3429 /* MGLOfflineStorage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3741CC31E2A00DB3429 /* MGLOfflineStorage_Private.h */; };
- DAE6C38F1CC31E2A00DB3429 /* MGLOfflineStorage.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3751CC31E2A00DB3429 /* MGLOfflineStorage.mm */; };
- DAE6C3901CC31E2A00DB3429 /* MGLPointAnnotation.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3761CC31E2A00DB3429 /* MGLPointAnnotation.mm */; };
- DAE6C3911CC31E2A00DB3429 /* MGLPolygon.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3771CC31E2A00DB3429 /* MGLPolygon.mm */; };
- DAE6C3921CC31E2A00DB3429 /* MGLPolyline.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3781CC31E2A00DB3429 /* MGLPolyline.mm */; };
- DAE6C3931CC31E2A00DB3429 /* MGLShape.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3791CC31E2A00DB3429 /* MGLShape.mm */; };
- DAE6C3941CC31E2A00DB3429 /* MGLStyle.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C37A1CC31E2A00DB3429 /* MGLStyle.mm */; };
- DAE6C3951CC31E2A00DB3429 /* MGLTilePyramidOfflineRegion.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C37B1CC31E2A00DB3429 /* MGLTilePyramidOfflineRegion.mm */; };
- DAE6C3961CC31E2A00DB3429 /* MGLTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C37C1CC31E2A00DB3429 /* MGLTypes.m */; };
- DAE6C3971CC31E2A00DB3429 /* NSBundle+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C37D1CC31E2A00DB3429 /* NSBundle+MGLAdditions.h */; };
- DAE6C3981CC31E2A00DB3429 /* NSBundle+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C37E1CC31E2A00DB3429 /* NSBundle+MGLAdditions.m */; };
- DAE6C3991CC31E2A00DB3429 /* NSException+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C37F1CC31E2A00DB3429 /* NSException+MGLAdditions.h */; };
- DAE6C39A1CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3801CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h */; };
- DAE6C39B1CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3811CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.m */; };
- DAE6C39C1CC31E2A00DB3429 /* NSString+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3821CC31E2A00DB3429 /* NSString+MGLAdditions.h */; };
- DAE6C39D1CC31E2A00DB3429 /* NSString+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3831CC31E2A00DB3429 /* NSString+MGLAdditions.m */; };
- DAE6C3A31CC31E9400DB3429 /* MGLAnnotationImage.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C39F1CC31E9400DB3429 /* MGLAnnotationImage.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3A41CC31E9400DB3429 /* MGLMapView.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3A01CC31E9400DB3429 /* MGLMapView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3A51CC31E9400DB3429 /* MGLMapView+IBAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3A11CC31E9400DB3429 /* MGLMapView+IBAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3A61CC31E9400DB3429 /* MGLMapViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3A21CC31E9400DB3429 /* MGLMapViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3B11CC31EF300DB3429 /* MGLAnnotationImage.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3A71CC31EF300DB3429 /* MGLAnnotationImage.m */; };
- DAE6C3B21CC31EF300DB3429 /* MGLAttributionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3A81CC31EF300DB3429 /* MGLAttributionButton.h */; };
- DAE6C3B31CC31EF300DB3429 /* MGLAttributionButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3A91CC31EF300DB3429 /* MGLAttributionButton.mm */; };
- DAE6C3B41CC31EF300DB3429 /* MGLCompassCell.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3AA1CC31EF300DB3429 /* MGLCompassCell.h */; };
- DAE6C3B51CC31EF300DB3429 /* MGLCompassCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3AB1CC31EF300DB3429 /* MGLCompassCell.m */; };
- DAE6C3B61CC31EF300DB3429 /* MGLMapView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3AC1CC31EF300DB3429 /* MGLMapView_Private.h */; };
- DAE6C3B71CC31EF300DB3429 /* MGLMapView.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3AD1CC31EF300DB3429 /* MGLMapView.mm */; };
- DAE6C3B81CC31EF300DB3429 /* MGLMapView+IBAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3AE1CC31EF300DB3429 /* MGLMapView+IBAdditions.mm */; };
- DAE6C3B91CC31EF300DB3429 /* MGLOpenGLLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3AF1CC31EF300DB3429 /* MGLOpenGLLayer.h */; };
- DAE6C3BA1CC31EF300DB3429 /* MGLOpenGLLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3B01CC31EF300DB3429 /* MGLOpenGLLayer.mm */; };
- DAE6C3BE1CC31F2E00DB3429 /* default_marker.pdf in Resources */ = {isa = PBXBuildFile; fileRef = DAE6C3BB1CC31F2E00DB3429 /* default_marker.pdf */; };
- DAE6C3BF1CC31F2E00DB3429 /* mapbox.pdf in Resources */ = {isa = PBXBuildFile; fileRef = DAE6C3BC1CC31F2E00DB3429 /* mapbox.pdf */; };
- DAE6C3C21CC31F4500DB3429 /* Mapbox.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3C11CC31F4500DB3429 /* Mapbox.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAE6C3D21CC34C9900DB3429 /* MGLGeometryTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3C81CC34BD800DB3429 /* MGLGeometryTests.mm */; };
- DAE6C3D41CC34C9900DB3429 /* MGLOfflineRegionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3CA1CC34BD800DB3429 /* MGLOfflineRegionTests.m */; };
- DAE6C3D61CC34C9900DB3429 /* MGLStyleTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3CC1CC34BD800DB3429 /* MGLStyleTests.mm */; };
- DAE7DEC41E24549F007505A6 /* MGLNSStringAdditionsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE7DEC31E24549F007505A6 /* MGLNSStringAdditionsTests.m */; };
- DAED385F1D62CED700D7640F /* NSURL+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED385D1D62CED700D7640F /* NSURL+MGLAdditions.h */; };
- DAED38601D62CED700D7640F /* NSURL+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAED385E1D62CED700D7640F /* NSURL+MGLAdditions.m */; };
- DAEDC4321D6033F1000224FF /* MGLAttributionInfoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEDC4311D6033F1000224FF /* MGLAttributionInfoTests.m */; };
- DAEDC4371D606291000224FF /* MGLAttributionButtonTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEDC4361D606291000224FF /* MGLAttributionButtonTests.m */; };
- DAF0D80E1DFE0E5D00B28378 /* MGLPointCollection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF0D80D1DFE0E5D00B28378 /* MGLPointCollection_Private.h */; };
- DAF0D8161DFE6B1800B28378 /* MGLAttributionInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF0D8151DFE6B1800B28378 /* MGLAttributionInfo_Private.h */; };
- DAF25715201901C200367EF5 /* MGLHillshadeStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAF25713201901C100367EF5 /* MGLHillshadeStyleLayer.mm */; };
- DAF25716201901C200367EF5 /* MGLHillshadeStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF25714201901C200367EF5 /* MGLHillshadeStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DAF25721201902C100367EF5 /* MGLHillshadeStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAF2571D201902A500367EF5 /* MGLHillshadeStyleLayerTests.mm */; };
- DD0902B21DB1AC6400C5BDCE /* MGLNetworkConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DD0902AF1DB1AC6400C5BDCE /* MGLNetworkConfiguration.m */; };
- DD0902B31DB1AC6400C5BDCE /* MGLNetworkConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DD0902B01DB1AC6400C5BDCE /* MGLNetworkConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DD58A4C91D822C6700E1F038 /* MGLExpressionTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD58A4C71D822C6200E1F038 /* MGLExpressionTests.mm */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- DAE6C3331CC30DB200DB3429 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = DA839E8A1CC2E3400062CAFB /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = DAE6C3271CC30DB200DB3429;
- remoteInfo = dynamic;
- };
- DAE6C33B1CC30DB200DB3429 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = DA839E8A1CC2E3400062CAFB /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = DAE6C3271CC30DB200DB3429;
- remoteInfo = dynamic;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
- DAE6C3221CC30B3C00DB3429 /* Embed Frameworks */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 10;
- files = (
- DAE6C33E1CC30DB200DB3429 /* Mapbox.framework in Embed Frameworks */,
- );
- name = "Embed Frameworks";
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
- 076171C4213A0DC200668A35 /* MGLMapViewTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MGLMapViewTests.m; path = ../../darwin/test/MGLMapViewTests.m; sourceTree = "<group>"; };
- 07A019EB1ED662D800ACD43E /* MGLImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLImageSource.h; sourceTree = "<group>"; };
- 07A019EC1ED662D800ACD43E /* MGLImageSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLImageSource.mm; sourceTree = "<group>"; };
- 07A240921F67566F002C8210 /* MGLComputedShapeSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLComputedShapeSourceTests.m; sourceTree = "<group>"; };
- 07BA4CAB1EE21887004528F5 /* MGLImageSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLImageSourceTests.m; sourceTree = "<group>"; };
- 07D947471F6741F500E37934 /* MGLComputedShapeSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLComputedShapeSource_Private.h; sourceTree = "<group>"; };
- 07F8E2F41F674C8000F794BB /* MGLComputedShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLComputedShapeSource.h; sourceTree = "<group>"; };
- 07F8E2F51F674C8000F794BB /* MGLComputedShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLComputedShapeSource.mm; sourceTree = "<group>"; };
- 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>"; };
- 1F7454AA1ED1DDBD00021D39 /* MGLLightTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLightTest.mm; sourceTree = "<group>"; };
- 1F8A59F921653483004DFE75 /* sideload_sat.db */ = {isa = PBXFileReference; lastKnownFileType = file; name = sideload_sat.db; path = ../../../test/fixtures/offline_database/sideload_sat.db; sourceTree = "<group>"; };
- 1F8A5A01216D4695004DFE75 /* MGLLoggingConfiguration_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLoggingConfiguration_Private.h; sourceTree = "<group>"; };
- 1F8A5A03216D4696004DFE75 /* MGLLoggingConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLoggingConfiguration.h; sourceTree = "<group>"; };
- 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>"; };
- 1FF4858C2237235200F19727 /* MGLAttributedExpression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAttributedExpression.h; sourceTree = "<group>"; };
- 3508EC621D749D39009B0EE4 /* NSExpression+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSExpression+MGLAdditions.h"; sourceTree = "<group>"; };
- 3508EC631D749D39009B0EE4 /* NSExpression+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSExpression+MGLAdditions.mm"; sourceTree = "<group>"; };
- 3526EABC1DF9B19800006B43 /* MGLCodingTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLCodingTests.mm; path = ../../darwin/test/MGLCodingTests.mm; sourceTree = "<group>"; };
- 352742771D4C220900A1ECE6 /* MGLStyleValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleValue.h; sourceTree = "<group>"; };
- 3527427F1D4C243B00A1ECE6 /* MGLSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSource.h; sourceTree = "<group>"; };
- 352742801D4C243B00A1ECE6 /* MGLSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLSource.mm; sourceTree = "<group>"; };
- 352742831D4C244700A1ECE6 /* MGLRasterTileSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterTileSource.h; sourceTree = "<group>"; };
- 352742841D4C244700A1ECE6 /* MGLRasterTileSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterTileSource.mm; sourceTree = "<group>"; };
- 352742871D4C245800A1ECE6 /* MGLShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeSource.h; sourceTree = "<group>"; };
- 352742881D4C245800A1ECE6 /* MGLShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeSource.mm; sourceTree = "<group>"; };
- 3527428B1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCircleStyleLayer.h; sourceTree = "<group>"; };
- 3527428C1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLCircleStyleLayer.mm; sourceTree = "<group>"; };
- 3527429E1D4C25BD00A1ECE6 /* MGLStyleValue.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyleValue.mm; sourceTree = "<group>"; };
- 352903991D6C63B80002C7DF /* NSPredicate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPredicate+MGLAdditions.h"; sourceTree = "<group>"; };
- 3529039A1D6C63B80002C7DF /* NSPredicate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSPredicate+MGLAdditions.mm"; sourceTree = "<group>"; };
- 3537CA731D3F93A600380318 /* MGLStyle_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyle_Private.h; sourceTree = "<group>"; };
- 3538AA211D542685008EC33D /* MGLStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayer.h; sourceTree = "<group>"; };
- 3538AA221D542685008EC33D /* MGLStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyleLayer.mm; sourceTree = "<group>"; };
- 355BA4EB1D41633E00CCC6D5 /* NSColor+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSColor+MGLAdditions.h"; sourceTree = "<group>"; };
- 355BA4EC1D41633E00CCC6D5 /* NSColor+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSColor+MGLAdditions.mm"; sourceTree = "<group>"; };
- 35602BF81D3EA99F0050646F /* MGLFillStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillStyleLayer.h; sourceTree = "<group>"; };
- 35602BF91D3EA99F0050646F /* MGLFillStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFillStyleLayer.mm; sourceTree = "<group>"; };
- 35602BFC1D3EA9B40050646F /* MGLStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayer_Private.h; sourceTree = "<group>"; };
- 35602BFD1D3EA9B40050646F /* MGLForegroundStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLForegroundStyleLayer.h; sourceTree = "<group>"; };
- 35602BFE1D3EA9B40050646F /* MGLForegroundStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLForegroundStyleLayer.mm; sourceTree = "<group>"; };
- 358EB3AE1D61F0DB00E46D9C /* amsterdam.geojson */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = amsterdam.geojson; path = ../../darwin/test/amsterdam.geojson; sourceTree = "<group>"; };
- 359819571E02F611008FC139 /* NSCoder+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCoder+MGLAdditions.h"; sourceTree = "<group>"; };
- 359819581E02F611008FC139 /* NSCoder+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSCoder+MGLAdditions.mm"; sourceTree = "<group>"; };
- 35C5D8431D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSComparisonPredicate+MGLAdditions.h"; sourceTree = "<group>"; };
- 35C5D8441D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSComparisonPredicate+MGLAdditions.mm"; sourceTree = "<group>"; };
- 35C5D8451D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCompoundPredicate+MGLAdditions.h"; sourceTree = "<group>"; };
- 35C5D8461D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSCompoundPredicate+MGLAdditions.mm"; sourceTree = "<group>"; };
- 35C5D84B1D6DD75B00E95907 /* MGLPredicateTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLPredicateTests.mm; path = ../../darwin/test/MGLPredicateTests.mm; sourceTree = "<group>"; };
- 35C6DF821E214C0400ACA483 /* MGLDistanceFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLDistanceFormatter.h; sourceTree = "<group>"; };
- 35C6DF831E214C0400ACA483 /* MGLDistanceFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLDistanceFormatter.m; sourceTree = "<group>"; };
- 35C6DF861E214C1800ACA483 /* MGLDistanceFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLDistanceFormatterTests.m; path = ../../darwin/test/MGLDistanceFormatterTests.m; sourceTree = "<group>"; };
- 35D65C581D65AD5500722C23 /* NSDate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+MGLAdditions.h"; sourceTree = "<group>"; };
- 35D65C591D65AD5500722C23 /* NSDate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSDate+MGLAdditions.mm"; sourceTree = "<group>"; };
- 3E6465D7206576A800685536 /* LimeGreenStyleLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LimeGreenStyleLayer.m; path = ../../darwin/app/LimeGreenStyleLayer.m; sourceTree = "<group>"; };
- 3E6465D8206576A900685536 /* LimeGreenStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LimeGreenStyleLayer.h; path = ../../darwin/app/LimeGreenStyleLayer.h; sourceTree = "<group>"; };
- 3EA9369A4C46957566058822 /* MGLRendererConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRendererConfiguration.h; sourceTree = "<group>"; };
- 3EA93B1B0864609938506E12 /* MGLRendererConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRendererConfiguration.mm; sourceTree = "<group>"; };
- 4031ACFB1E9EB3C100A3EA26 /* MGLMapViewDelegateIntegrationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MGLMapViewDelegateIntegrationTests.swift; sourceTree = "<group>"; };
- 4031AD011E9FD6A300A3EA26 /* MGLSDKTestHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MGLSDKTestHelpers.swift; path = ../../darwin/test/MGLSDKTestHelpers.swift; sourceTree = "<group>"; };
- 4049C2A11DB6CE7800B3F799 /* MGLPointCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPointCollection.h; sourceTree = "<group>"; };
- 4049C2A71DB6D09B00B3F799 /* MGLPointCollection.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPointCollection.mm; sourceTree = "<group>"; };
- 405C03961DB0004E001AC280 /* NSImage+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSImage+MGLAdditions.h"; sourceTree = "<group>"; };
- 405C03971DB0004E001AC280 /* NSImage+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSImage+MGLAdditions.mm"; sourceTree = "<group>"; };
- 408AA85A1DAEECF100022900 /* MGLShape_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShape_Private.h; sourceTree = "<group>"; };
- 408AA85E1DAEED3300022900 /* NSDictionary+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSDictionary+MGLAdditions.mm"; sourceTree = "<group>"; };
- 408AA85F1DAEED3300022900 /* NSDictionary+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+MGLAdditions.h"; sourceTree = "<group>"; };
- 40B77E421DB11BB0003DA2FE /* NSArray+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSArray+MGLAdditions.mm"; sourceTree = "<group>"; };
- 40B77E431DB11BB0003DA2FE /* NSArray+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MGLAdditions.h"; sourceTree = "<group>"; };
- 40E1601A1DF216E6005EA6D9 /* MGLStyleLayerTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayerTests.h; sourceTree = "<group>"; };
- 40E1601B1DF216E6005EA6D9 /* MGLStyleLayerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLStyleLayerTests.m; sourceTree = "<group>"; };
- 52BECB091CC5A26F009CD791 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
- 5548BE7B1D0ACBBD005DDE81 /* libmbgl-loop-darwin.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libmbgl-loop-darwin.a"; path = "cmake/Debug/libmbgl-loop-darwin.a"; sourceTree = "<group>"; };
- 556660C51E1BEA0100E2C41B /* MGLFoundation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLFoundation.h; sourceTree = "<group>"; };
- 556660D51E1D07E400E2C41B /* MGLVersionNumber.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MGLVersionNumber.m; path = ../../darwin/test/MGLVersionNumber.m; sourceTree = "<group>"; };
- 558DE7A41E56161C00C7916D /* MGLFoundation_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFoundation_Private.h; sourceTree = "<group>"; };
- 558DE7A51E56161C00C7916D /* MGLFoundation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFoundation.mm; sourceTree = "<group>"; };
- 5591AC682298361600FF9ADF /* MGLMapView+Impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLMapView+Impl.h"; sourceTree = "<group>"; };
- 5591AC692298361600FF9ADF /* MGLMapView+Impl.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "MGLMapView+Impl.mm"; sourceTree = "<group>"; };
- 55CAF6312294407F00F17770 /* MGLMapView+OpenGL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MGLMapView+OpenGL.h"; sourceTree = "<group>"; };
- 55CAF6332294409B00F17770 /* MGLMapView+OpenGL.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "MGLMapView+OpenGL.mm"; sourceTree = "<group>"; };
- 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-vendor-icu.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 55D120A41F7906E6004B6D81 /* libmbgl-filesource.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-filesource.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 55D9B4B01D005D3900C1CCE2 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
- 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLOfflineStorageTests.mm; path = ../../darwin/test/MGLOfflineStorageTests.mm; sourceTree = "<group>"; };
- 55FE0E8D1D100A0900FD240B /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = config.xcconfig; path = ../../build/macos/config.xcconfig; sourceTree = "<group>"; };
- 747ABE54219B2BDA00523B67 /* MGLFillExtrusionStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillExtrusionStyleLayer_Private.h; sourceTree = "<group>"; };
- 747ABE55219B2BDA00523B67 /* MGLCircleStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCircleStyleLayer_Private.h; sourceTree = "<group>"; };
- 747ABE56219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLBackgroundStyleLayer_Private.h; sourceTree = "<group>"; };
- 747ABE57219B2BDB00523B67 /* MGLFillStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillStyleLayer_Private.h; sourceTree = "<group>"; };
- 747ABE58219B2BDB00523B67 /* MGLHeatmapStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHeatmapStyleLayer_Private.h; sourceTree = "<group>"; };
- 747ABE5E219B2BED00523B67 /* MGLHillshadeStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHillshadeStyleLayer_Private.h; sourceTree = "<group>"; };
- 747ABE60219B2C0000523B67 /* MGLLineStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLineStyleLayer_Private.h; sourceTree = "<group>"; };
- 747ABE62219B2C1700523B67 /* MGLOpenGLStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOpenGLStyleLayer_Private.h; sourceTree = "<group>"; };
- 747ABE63219B2C1700523B67 /* MGLRasterStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterStyleLayer_Private.h; sourceTree = "<group>"; };
- 747ABE66219B2C3200523B67 /* MGLSymbolStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSymbolStyleLayer_Private.h; sourceTree = "<group>"; };
- 749EC88F2199CCB8005608D7 /* MGLStyleLayerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayerManager.h; sourceTree = "<group>"; };
- 749EC8902199CCB9005608D7 /* MGLStyleLayerManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyleLayerManager.mm; sourceTree = "<group>"; };
- 89462398200D199100DA8EF2 /* heatmap.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = heatmap.json; sourceTree = "<group>"; };
- 8946239A200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHeatmapStyleLayer.h; sourceTree = "<group>"; };
- 8946239B200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHeatmapStyleLayer.mm; sourceTree = "<group>"; };
- 92092EEE1F5EB10E00AF5130 /* MGLMapSnapshotter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapSnapshotter.h; sourceTree = "<group>"; };
- 92092EEF1F5EB10E00AF5130 /* MGLMapSnapshotter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapSnapshotter.mm; sourceTree = "<group>"; };
- 920A3E581E6F859D00C16EFC /* MGLSourceQueryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLSourceQueryTests.m; sourceTree = "<group>"; };
- 9221BAAE20699CBA0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTilePyramidOfflineRegion_Private.h; sourceTree = "<group>"; };
- 9250B8C22073C69000EF338C /* MGLShapeOfflineRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeOfflineRegion.h; sourceTree = "<group>"; };
- 92F2C3EA1F0E3A1900268EC0 /* MGLRendererFrontend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRendererFrontend.h; sourceTree = "<group>"; };
- 92FC0AE3207CC8DA007B6B54 /* MGLShapeOfflineRegion_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeOfflineRegion_Private.h; sourceTree = "<group>"; };
- 92FC0AE5207CDD8D007B6B54 /* MGLShapeOfflineRegion.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeOfflineRegion.mm; sourceTree = "<group>"; };
- 9654C12A1FFC38E000DB6A19 /* MGLPolyline_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolyline_Private.h; sourceTree = "<group>"; };
- 9654C12C1FFC394700DB6A19 /* MGLPolygon_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolygon_Private.h; sourceTree = "<group>"; };
- 966091701E5BBFF700A9A03B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
- 966091711E5BBFF900A9A03B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
- 966091721E5BBFFA00A9A03B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = "<group>"; };
- 966091731E5BBFFA00A9A03B /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Localizable.strings; sourceTree = "<group>"; };
- 96E027321E57C9A7004B8E66 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = "<group>"; };
- 96E027341E57C9A9004B8E66 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
- 96E027351E57C9AB004B8E66 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = "<group>"; };
- 96E027361E57C9AC004B8E66 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
- 96E027371E57C9B5004B8E66 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
- 96E027381E57C9B7004B8E66 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
- 96E027391E57C9B9004B8E66 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = "<group>"; };
- 96E0273A1E57C9BB004B8E66 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = "<group>"; };
- 96E0273B1E57C9BC004B8E66 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = "<group>"; };
- CA0B3C042329F7E600E4B493 /* MGLTestAssertionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MGLTestAssertionHandler.h; path = ../../darwin/test/MGLTestAssertionHandler.h; sourceTree = "<group>"; };
- CA0B3C052329F7E600E4B493 /* MGLTestAssertionHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLTestAssertionHandler.m; path = ../../darwin/test/MGLTestAssertionHandler.m; sourceTree = "<group>"; };
- CA0B3C082329FB4800E4B493 /* MGLOfflinePackTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLOfflinePackTests.mm; path = ../../darwin/test/MGLOfflinePackTests.mm; sourceTree = "<group>"; };
- CA4045C4216720D700B356E1 /* MGLCluster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCluster.h; sourceTree = "<group>"; };
- CA8FBC0C21A4A74300D1203C /* MGLRendererConfigurationTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLRendererConfigurationTests.mm; path = ../../darwin/test/MGLRendererConfigurationTests.mm; sourceTree = "<group>"; };
- CA9461A520884CCB0015EB12 /* MGLAnnotationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLAnnotationTests.m; path = test/MGLAnnotationTests.m; sourceTree = SOURCE_ROOT; };
- CAD9D0AB22A88A32001B25EE /* MGLResourceTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLResourceTests.mm; path = ../../darwin/test/MGLResourceTests.mm; sourceTree = "<group>"; };
- CF762DEE22DC7EFF00338472 /* MGLLoggingConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLoggingConfiguration.mm; sourceTree = "<group>"; };
- CFF9F98B23A2505700B0DE92 /* MGLNetworkIntegrationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLNetworkIntegrationManager.m; path = ../../darwin/src/MGLNetworkIntegrationManager.m; sourceTree = "<group>"; };
- CFF9F98C23A2505700B0DE92 /* MGLNetworkIntegrationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MGLNetworkIntegrationManager.h; path = ../../darwin/src/MGLNetworkIntegrationManager.h; sourceTree = "<group>"; };
- DA00FC881D5EEAC3009AABC8 /* MGLAttributionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAttributionInfo.h; sourceTree = "<group>"; };
- DA00FC891D5EEAC3009AABC8 /* MGLAttributionInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLAttributionInfo.mm; sourceTree = "<group>"; };
- DA0CD58D1CF56F5800A5F5A5 /* MGLFeatureTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLFeatureTests.mm; path = ../../darwin/test/MGLFeatureTests.mm; sourceTree = "<group>"; };
- DA1AC01E1E5B8826006DF1D6 /* lt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA1AC01F1E5B8904006DF1D6 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = uk; path = uk.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DA2207BA1DC076930002F84D /* test-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "test-Bridging-Header.h"; sourceTree = "<group>"; };
- DA2784FD1DF03060001D5B8D /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = ../../darwin/test/Media.xcassets; sourceTree = "<group>"; };
- DA2987591E1A4290002299F5 /* MGLDocumentationExampleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MGLDocumentationExampleTests.swift; path = ../../darwin/test/MGLDocumentationExampleTests.swift; sourceTree = "<group>"; };
- DA3389601FA3EAC4001EA329 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Foundation.strings"; sourceTree = "<group>"; };
- DA3389611FA3EDCE001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA3389621FA3EDEF001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Foundation.strings; sourceTree = "<group>"; };
- DA3389631FA3EDF5001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = bg; path = bg.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DA3389641FA3EE00001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA33896C1FA3EF51001EA329 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = hu; path = hu.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DA35A2A31CC9EB1A00E826B2 /* MGLCoordinateFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCoordinateFormatter.h; sourceTree = "<group>"; };
- DA35A2A51CC9EB2700E826B2 /* MGLCoordinateFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLCoordinateFormatter.m; sourceTree = "<group>"; };
- DA35A2A71CC9F41600E826B2 /* MGLCoordinateFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLCoordinateFormatterTests.m; path = ../../darwin/test/MGLCoordinateFormatterTests.m; sourceTree = "<group>"; };
- DA35A2AB1CCA091800E826B2 /* MGLCompassDirectionFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCompassDirectionFormatter.h; sourceTree = "<group>"; };
- DA35A2AC1CCA091800E826B2 /* MGLCompassDirectionFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLCompassDirectionFormatter.m; sourceTree = "<group>"; };
- DA35A2B51CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLCompassDirectionFormatterTests.m; path = ../../darwin/test/MGLCompassDirectionFormatterTests.m; sourceTree = "<group>"; };
- DA35A2BD1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLClockDirectionFormatter.h; sourceTree = "<group>"; };
- DA35A2BE1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLClockDirectionFormatter.m; sourceTree = "<group>"; };
- DA35A2C11CCA9F4A00E826B2 /* MGLClockDirectionFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLClockDirectionFormatterTests.m; path = ../../darwin/test/MGLClockDirectionFormatterTests.m; sourceTree = "<group>"; };
- DA35A2CD1CCAAED300E826B2 /* NSValue+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSValue+MGLAdditions.h"; sourceTree = "<group>"; };
- DA35A2CE1CCAAED300E826B2 /* NSValue+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSValue+MGLAdditions.m"; sourceTree = "<group>"; };
- DA35D0891E1A631B007DED41 /* one-liner.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "one-liner.json"; path = "../../darwin/test/one-liner.json"; sourceTree = "<group>"; };
- DA551B7F1DB496AC0009AFAF /* MGLTileSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTileSource.h; sourceTree = "<group>"; };
- DA551B801DB496AC0009AFAF /* MGLTileSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTileSource_Private.h; sourceTree = "<group>"; };
- DA551B811DB496AC0009AFAF /* MGLTileSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLTileSource.mm; sourceTree = "<group>"; };
- DA5589761D320C41006B7F64 /* wms.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = wms.json; sourceTree = "<group>"; };
- DA57D4B01EBC699800793288 /* MGLDocumentationGuideTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MGLDocumentationGuideTests.swift; path = ../../darwin/test/MGLDocumentationGuideTests.swift; sourceTree = "<group>"; };
- DA6023EF1E4CE8E500DBFF23 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Foundation.strings; sourceTree = "<group>"; };
- DA6023F01E4CE8FF00DBFF23 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sv; path = sv.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DA618B131E68850300CB7F44 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA618B141E68852C00CB7F44 /* ru */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA618B151E6886DF00CB7F44 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ca; path = ca.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DA618B161E6886E000CB7F44 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA618B171E68876C00CB7F44 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Foundation.strings; sourceTree = "<group>"; };
- DA618B181E6887C600CB7F44 /* ca */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA618B231E6891ED00CB7F44 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Foundation.strings; sourceTree = "<group>"; };
- DA618B241E6891F300CB7F44 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = lt; path = lt.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DA618B271E68926E00CB7F44 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA618B2A1E6892B500CB7F44 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA6408D51DA4E5DA00908C90 /* MGLVectorStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLVectorStyleLayer.h; sourceTree = "<group>"; };
- DA6408D61DA4E5DA00908C90 /* MGLVectorStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLVectorStyleLayer.mm; sourceTree = "<group>"; };
- DA695423215B1E6C002041A4 /* MGLMapCameraTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MGLMapCameraTests.m; path = ../../darwin/test/MGLMapCameraTests.m; sourceTree = "<group>"; };
- DA704CBA1F6372E8004B3F28 /* ru */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Foundation.strings; sourceTree = "<group>"; };
- DA704CBE1F637531004B3F28 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA704CBF1F637548004B3F28 /* hu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA704CC61F666385004B3F28 /* uk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Foundation.strings; sourceTree = "<group>"; };
- DA7262051DEEDD460043BB89 /* MGLOpenGLStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOpenGLStyleLayer.h; sourceTree = "<group>"; };
- DA7262061DEEDD460043BB89 /* MGLOpenGLStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOpenGLStyleLayer.mm; sourceTree = "<group>"; };
- DA737ADE1E5914AD00AD2CDE /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = es; path = es.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DA737ADF1E5914D300AD2CDE /* es */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA737AE31E5915A500AD2CDE /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = pl; path = pl.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DA737AE41E5915B000AD2CDE /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA737AEC1E59180E00AD2CDE /* uk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA7DC9801DED5F5C0027472F /* MGLVectorTileSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLVectorTileSource_Private.h; sourceTree = "<group>"; };
- DA7DC9821DED647F0027472F /* MGLRasterTileSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterTileSource_Private.h; sourceTree = "<group>"; };
- DA80E95D1FE84A300065FC9B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA80E95F1FE84A540065FC9B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ar; path = ar.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DA839E921CC2E3400062CAFB /* Mapbox GL.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Mapbox GL.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- DA839E951CC2E3400062CAFB /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
- DA839E961CC2E3400062CAFB /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
- DA839E991CC2E3400062CAFB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
- DA839E9B1CC2E3400062CAFB /* MapDocument.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MapDocument.h; sourceTree = "<group>"; };
- DA839E9C1CC2E3400062CAFB /* MapDocument.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MapDocument.m; sourceTree = "<group>"; };
- DA839E9F1CC2E3400062CAFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MapDocument.xib; sourceTree = "<group>"; };
- DA839EA11CC2E3400062CAFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
- DA839EA41CC2E3400062CAFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
- DA839EA61CC2E3400062CAFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
- DA87A9961DC9D88400810D09 /* MGLShapeSourceTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeSourceTests.mm; sourceTree = "<group>"; };
- DA87A9971DC9D88400810D09 /* MGLTileSetTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLTileSetTests.mm; sourceTree = "<group>"; };
- DA87A99B1DC9D8DD00810D09 /* MGLShapeSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeSource_Private.h; sourceTree = "<group>"; };
- DA87A99F1DC9DC6200810D09 /* MGLValueEvaluator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLValueEvaluator.h; sourceTree = "<group>"; };
- DA88520F1E0A4D0D009D7AD6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
- DA8852101E0A4D3A009D7AD6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Foundation.strings"; sourceTree = "<group>"; };
- DA8933A61CCD287300E68420 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MGLAnnotationCallout.xib; sourceTree = "<group>"; };
- DA8933AC1CCD290700E68420 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA8933B41CCD2C2500E68420 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Foundation.strings; sourceTree = "<group>"; };
- DA8933B71CCD2C2D00E68420 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DA8F25741D51C5F40010E6B5 /* MGLFillStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFillStyleLayerTests.mm; sourceTree = "<group>"; };
- DA8F25751D51C5F40010E6B5 /* MGLRasterStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterStyleLayerTests.mm; sourceTree = "<group>"; };
- DA8F25761D51C5F40010E6B5 /* MGLSymbolStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLSymbolStyleLayerTests.mm; sourceTree = "<group>"; };
- DA8F25771D51C5F40010E6B5 /* MGLLineStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLineStyleLayerTests.mm; sourceTree = "<group>"; };
- DA8F25781D51C5F40010E6B5 /* MGLCircleStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLCircleStyleLayerTests.mm; sourceTree = "<group>"; };
- DA8F25791D51C5F40010E6B5 /* MGLBackgroundStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLBackgroundStyleLayerTests.mm; sourceTree = "<group>"; };
- DA8F25851D51C9E10010E6B5 /* MGLBackgroundStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLBackgroundStyleLayer.h; sourceTree = "<group>"; };
- DA8F25861D51C9E10010E6B5 /* MGLBackgroundStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLBackgroundStyleLayer.mm; sourceTree = "<group>"; };
- DA8F25891D51CA540010E6B5 /* MGLLineStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLineStyleLayer.h; sourceTree = "<group>"; };
- DA8F258A1D51CA540010E6B5 /* MGLLineStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLineStyleLayer.mm; sourceTree = "<group>"; };
- DA8F258D1D51CA600010E6B5 /* MGLRasterStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterStyleLayer.h; sourceTree = "<group>"; };
- DA8F258E1D51CA600010E6B5 /* MGLRasterStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterStyleLayer.mm; sourceTree = "<group>"; };
- DA8F25911D51CA750010E6B5 /* MGLSymbolStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSymbolStyleLayer.h; sourceTree = "<group>"; };
- DA8F25921D51CA750010E6B5 /* MGLSymbolStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLSymbolStyleLayer.mm; sourceTree = "<group>"; };
- DA8F25951D51CAC70010E6B5 /* MGLVectorTileSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLVectorTileSource.h; sourceTree = "<group>"; };
- DA8F25961D51CAC70010E6B5 /* MGLVectorTileSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLVectorTileSource.mm; sourceTree = "<group>"; };
- DA8F25991D51CAD00010E6B5 /* MGLSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSource_Private.h; sourceTree = "<group>"; };
- DA8F259B1D51CB000010E6B5 /* MGLStyleValue_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleValue_Private.h; sourceTree = "<group>"; };
- DA8F25A61D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSValue+MGLStyleAttributeAdditions.h"; sourceTree = "<group>"; };
- DA8F25A71D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSValue+MGLStyleAttributeAdditions.mm"; sourceTree = "<group>"; };
- DA8F25B51D51D2240010E6B5 /* MGLStyleLayerTests.mm.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; name = MGLStyleLayerTests.mm.ejs; path = ../test/MGLStyleLayerTests.mm.ejs; sourceTree = "<group>"; };
- DA8F25B61D51D2240010E6B5 /* MGLStyleLayer.h.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = MGLStyleLayer.h.ejs; sourceTree = "<group>"; };
- DA8F25B71D51D2240010E6B5 /* MGLStyleLayer.mm.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = MGLStyleLayer.mm.ejs; sourceTree = "<group>"; };
- DA934097208562590059919A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = "<group>"; };
- DA934098208562870059919A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-PT"; path = "pt-PT.lproj/Foundation.stringsdict"; sourceTree = "<group>"; };
- DA9340992085629E0059919A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = "<group>"; };
- DA9340A0208565870059919A /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = "<group>"; };
- DA9C01301E4C7B9300C4742A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-BR"; path = "pt-BR.lproj/Foundation.stringsdict"; sourceTree = "<group>"; };
- DA9C01311E4C7B9F00C4742A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = "<group>"; };
- DAA32CA61E4C4849006F8D24 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAA32CA71E4C486D006F8D24 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Foundation.strings; sourceTree = "<group>"; };
- DAA32CA81E4C48B9006F8D24 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = de; path = de.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DAA32CAE1E4C4B03006F8D24 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = fr; path = fr.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DAA32CAF1E4C4B0D006F8D24 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAA32CB21E4C4CB7006F8D24 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Foundation.strings; sourceTree = "<group>"; };
- DAA32CB31E4C4CC3006F8D24 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAA32CBA1E4C4F10006F8D24 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAA32CC01E4C4F89006F8D24 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Foundation.strings; sourceTree = "<group>"; };
- DAA32CC11E4C4F93006F8D24 /* vi */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAA48EFB1D6A4731006A7E36 /* StyleLayerIconTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleLayerIconTransformer.h; sourceTree = "<group>"; };
- DAA48EFC1D6A4731006A7E36 /* StyleLayerIconTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StyleLayerIconTransformer.m; sourceTree = "<group>"; };
- DAA998F91E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillExtrusionStyleLayer.h; sourceTree = "<group>"; };
- DAA998FA1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFillExtrusionStyleLayer.mm; sourceTree = "<group>"; };
- DAA999001E9F5EC5002E6EA6 /* MGLFillExtrusionStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFillExtrusionStyleLayerTests.mm; sourceTree = "<group>"; };
- DAC25FC9200FD5E2009BE98E /* NSExpression+MGLPrivateAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSExpression+MGLPrivateAdditions.h"; sourceTree = "<group>"; };
- DAC2ABC41CC6D343006D18C4 /* MGLAnnotationImage_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationImage_Private.h; sourceTree = "<group>"; };
- DACA8620201920BE00E9693A /* MGLRasterDEMSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLRasterDEMSource.h; sourceTree = "<group>"; };
- DACA8621201920BE00E9693A /* MGLRasterDEMSource.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterDEMSource.mm; sourceTree = "<group>"; };
- DACB0C371E18DFFD005DDBEA /* MGLStyle+MBXAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLStyle+MBXAdditions.h"; sourceTree = "<group>"; };
- DACB0C381E18DFFD005DDBEA /* MGLStyle+MBXAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MGLStyle+MBXAdditions.m"; sourceTree = "<group>"; };
- DACBC6082011885800C4D7E2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = "<group>"; };
- DACBC6092011888C00C4D7E2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Foundation.strings; sourceTree = "<group>"; };
- DACBC60A2011889E00C4D7E2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = "<group>"; };
- DACC22121CF3D3E200D220D9 /* MGLFeature.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFeature.h; sourceTree = "<group>"; };
- DACC22131CF3D3E200D220D9 /* MGLFeature.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFeature.mm; sourceTree = "<group>"; };
- DACC22171CF3D4F700D220D9 /* MGLFeature_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFeature_Private.h; sourceTree = "<group>"; };
- DACCD9C71F1F443B00BB09A1 /* fr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Foundation.strings; sourceTree = "<group>"; };
- DACFE7971F66EA0C00630DA8 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = vi; path = vi.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DAD165721CF4CD7A001FF4B9 /* MGLShapeCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeCollection.h; sourceTree = "<group>"; };
- DAD165731CF4CD7A001FF4B9 /* MGLShapeCollection.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeCollection.mm; sourceTree = "<group>"; };
- DAD88E03202ACF5900AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAD88E04202ACF7C00AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Foundation.strings; sourceTree = "<group>"; };
- DAD88E05202ACF8200AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = da; path = da.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DAD88E06202ACF9200AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAE6C2E11CC304F900DB3429 /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = "<group>"; };
- DAE6C2E31CC3050F00DB3429 /* DroppedPinAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DroppedPinAnnotation.h; sourceTree = "<group>"; };
- DAE6C2E41CC3050F00DB3429 /* DroppedPinAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DroppedPinAnnotation.m; sourceTree = "<group>"; };
- DAE6C2E51CC3050F00DB3429 /* LocationCoordinate2DTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocationCoordinate2DTransformer.h; sourceTree = "<group>"; };
- DAE6C2E61CC3050F00DB3429 /* LocationCoordinate2DTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocationCoordinate2DTransformer.m; sourceTree = "<group>"; };
- DAE6C2E91CC3050F00DB3429 /* OfflinePackNameValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OfflinePackNameValueTransformer.h; sourceTree = "<group>"; };
- DAE6C2EA1CC3050F00DB3429 /* OfflinePackNameValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OfflinePackNameValueTransformer.m; sourceTree = "<group>"; };
- DAE6C2EB1CC3050F00DB3429 /* TimeIntervalTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimeIntervalTransformer.h; sourceTree = "<group>"; };
- DAE6C2EC1CC3050F00DB3429 /* TimeIntervalTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TimeIntervalTransformer.m; sourceTree = "<group>"; };
- DAE6C3281CC30DB200DB3429 /* Mapbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Mapbox.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- DAE6C32C1CC30DB200DB3429 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
- DAE6C3311CC30DB200DB3429 /* test.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = test.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- DAE6C33A1CC30DB200DB3429 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
- DAE6C3451CC31D1200DB3429 /* libmbgl-core.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libmbgl-core.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- DAE6C3461CC31D1200DB3429 /* libmbgl-platform-macos.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libmbgl-platform-macos.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- DAE6C34A1CC31E0400DB3429 /* MGLAccountManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAccountManager.h; sourceTree = "<group>"; };
- DAE6C34B1CC31E0400DB3429 /* MGLAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotation.h; sourceTree = "<group>"; };
- DAE6C34C1CC31E0400DB3429 /* MGLGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLGeometry.h; sourceTree = "<group>"; };
- DAE6C34D1CC31E0400DB3429 /* MGLMapCamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapCamera.h; sourceTree = "<group>"; };
- DAE6C34E1CC31E0400DB3429 /* MGLMultiPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMultiPoint.h; sourceTree = "<group>"; };
- DAE6C34F1CC31E0400DB3429 /* MGLOfflinePack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflinePack.h; sourceTree = "<group>"; };
- DAE6C3501CC31E0400DB3429 /* MGLOfflineRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineRegion.h; sourceTree = "<group>"; };
- DAE6C3511CC31E0400DB3429 /* MGLOfflineStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineStorage.h; sourceTree = "<group>"; };
- DAE6C3521CC31E0400DB3429 /* MGLOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOverlay.h; sourceTree = "<group>"; };
- DAE6C3531CC31E0400DB3429 /* MGLPointAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPointAnnotation.h; sourceTree = "<group>"; };
- DAE6C3541CC31E0400DB3429 /* MGLPolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolygon.h; sourceTree = "<group>"; };
- DAE6C3551CC31E0400DB3429 /* MGLPolyline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolyline.h; sourceTree = "<group>"; };
- DAE6C3561CC31E0400DB3429 /* MGLShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShape.h; sourceTree = "<group>"; };
- DAE6C3571CC31E0400DB3429 /* MGLStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyle.h; sourceTree = "<group>"; };
- DAE6C3581CC31E0400DB3429 /* MGLTilePyramidOfflineRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTilePyramidOfflineRegion.h; sourceTree = "<group>"; };
- DAE6C3591CC31E0400DB3429 /* MGLTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTypes.h; sourceTree = "<group>"; };
- DAE6C36A1CC31E2A00DB3429 /* MGLAccountManager_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAccountManager_Private.h; sourceTree = "<group>"; };
- DAE6C36B1CC31E2A00DB3429 /* MGLAccountManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAccountManager.m; sourceTree = "<group>"; };
- DAE6C36C1CC31E2A00DB3429 /* MGLGeometry_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLGeometry_Private.h; sourceTree = "<group>"; };
- DAE6C36D1CC31E2A00DB3429 /* MGLGeometry.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLGeometry.mm; sourceTree = "<group>"; };
- DAE6C36E1CC31E2A00DB3429 /* MGLMapCamera.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapCamera.mm; sourceTree = "<group>"; };
- DAE6C36F1CC31E2A00DB3429 /* MGLMultiPoint_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMultiPoint_Private.h; sourceTree = "<group>"; };
- DAE6C3701CC31E2A00DB3429 /* MGLMultiPoint.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMultiPoint.mm; sourceTree = "<group>"; };
- DAE6C3711CC31E2A00DB3429 /* MGLOfflinePack_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflinePack_Private.h; sourceTree = "<group>"; };
- DAE6C3721CC31E2A00DB3429 /* MGLOfflinePack.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOfflinePack.mm; sourceTree = "<group>"; };
- DAE6C3731CC31E2A00DB3429 /* MGLOfflineRegion_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineRegion_Private.h; sourceTree = "<group>"; };
- DAE6C3741CC31E2A00DB3429 /* MGLOfflineStorage_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineStorage_Private.h; sourceTree = "<group>"; };
- DAE6C3751CC31E2A00DB3429 /* MGLOfflineStorage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOfflineStorage.mm; sourceTree = "<group>"; };
- DAE6C3761CC31E2A00DB3429 /* MGLPointAnnotation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPointAnnotation.mm; sourceTree = "<group>"; };
- DAE6C3771CC31E2A00DB3429 /* MGLPolygon.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPolygon.mm; sourceTree = "<group>"; };
- DAE6C3781CC31E2A00DB3429 /* MGLPolyline.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPolyline.mm; sourceTree = "<group>"; };
- DAE6C3791CC31E2A00DB3429 /* MGLShape.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShape.mm; sourceTree = "<group>"; };
- DAE6C37A1CC31E2A00DB3429 /* MGLStyle.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyle.mm; sourceTree = "<group>"; };
- DAE6C37B1CC31E2A00DB3429 /* MGLTilePyramidOfflineRegion.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLTilePyramidOfflineRegion.mm; sourceTree = "<group>"; };
- DAE6C37C1CC31E2A00DB3429 /* MGLTypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLTypes.m; sourceTree = "<group>"; };
- DAE6C37D1CC31E2A00DB3429 /* NSBundle+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+MGLAdditions.h"; sourceTree = "<group>"; };
- DAE6C37E1CC31E2A00DB3429 /* NSBundle+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+MGLAdditions.m"; sourceTree = "<group>"; };
- DAE6C37F1CC31E2A00DB3429 /* NSException+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSException+MGLAdditions.h"; sourceTree = "<group>"; };
- DAE6C3801CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSProcessInfo+MGLAdditions.h"; sourceTree = "<group>"; };
- DAE6C3811CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSProcessInfo+MGLAdditions.m"; sourceTree = "<group>"; };
- DAE6C3821CC31E2A00DB3429 /* NSString+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MGLAdditions.h"; sourceTree = "<group>"; };
- DAE6C3831CC31E2A00DB3429 /* NSString+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MGLAdditions.m"; sourceTree = "<group>"; };
- DAE6C39F1CC31E9400DB3429 /* MGLAnnotationImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationImage.h; sourceTree = "<group>"; };
- DAE6C3A01CC31E9400DB3429 /* MGLMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapView.h; sourceTree = "<group>"; };
- DAE6C3A11CC31E9400DB3429 /* MGLMapView+IBAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLMapView+IBAdditions.h"; sourceTree = "<group>"; };
- DAE6C3A21CC31E9400DB3429 /* MGLMapViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapViewDelegate.h; sourceTree = "<group>"; };
- DAE6C3A71CC31EF300DB3429 /* MGLAnnotationImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAnnotationImage.m; sourceTree = "<group>"; };
- DAE6C3A81CC31EF300DB3429 /* MGLAttributionButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAttributionButton.h; sourceTree = "<group>"; };
- DAE6C3A91CC31EF300DB3429 /* MGLAttributionButton.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLAttributionButton.mm; sourceTree = "<group>"; };
- DAE6C3AA1CC31EF300DB3429 /* MGLCompassCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCompassCell.h; sourceTree = "<group>"; };
- DAE6C3AB1CC31EF300DB3429 /* MGLCompassCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLCompassCell.m; sourceTree = "<group>"; };
- DAE6C3AC1CC31EF300DB3429 /* MGLMapView_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapView_Private.h; sourceTree = "<group>"; };
- DAE6C3AD1CC31EF300DB3429 /* MGLMapView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapView.mm; sourceTree = "<group>"; };
- DAE6C3AE1CC31EF300DB3429 /* MGLMapView+IBAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "MGLMapView+IBAdditions.mm"; sourceTree = "<group>"; };
- DAE6C3AF1CC31EF300DB3429 /* MGLOpenGLLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOpenGLLayer.h; sourceTree = "<group>"; };
- DAE6C3B01CC31EF300DB3429 /* MGLOpenGLLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOpenGLLayer.mm; sourceTree = "<group>"; };
- DAE6C3BB1CC31F2E00DB3429 /* default_marker.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = default_marker.pdf; sourceTree = "<group>"; };
- DAE6C3BC1CC31F2E00DB3429 /* mapbox.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = mapbox.pdf; sourceTree = "<group>"; };
- DAE6C3C11CC31F4500DB3429 /* Mapbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Mapbox.h; path = src/Mapbox.h; sourceTree = SOURCE_ROOT; };
- DAE6C3C61CC3499100DB3429 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; };
- DAE6C3C81CC34BD800DB3429 /* MGLGeometryTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLGeometryTests.mm; path = ../../darwin/test/MGLGeometryTests.mm; sourceTree = "<group>"; };
- DAE6C3CA1CC34BD800DB3429 /* MGLOfflineRegionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLOfflineRegionTests.m; path = ../../darwin/test/MGLOfflineRegionTests.m; sourceTree = "<group>"; };
- DAE6C3CC1CC34BD800DB3429 /* MGLStyleTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLStyleTests.mm; path = ../../darwin/test/MGLStyleTests.mm; sourceTree = "<group>"; };
- DAE7DEC31E24549F007505A6 /* MGLNSStringAdditionsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLNSStringAdditionsTests.m; path = ../../darwin/test/MGLNSStringAdditionsTests.m; sourceTree = "<group>"; };
- DAE8CCAA1E6E8605009B5CB0 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DAE8CCAB1E6E8B72009B5CB0 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAE8CCAC1E6E8B8D009B5CB0 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAE9E0F21EB7BF39001E8E8B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Foundation.strings; sourceTree = "<group>"; };
- DAE9ED53223897C400C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAE9ED54223897ED00C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Foundation.strings; sourceTree = "<group>"; };
- DAE9ED55223898B200C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = gl; path = gl.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DAE9ED56223898CF00C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAED385D1D62CED700D7640F /* NSURL+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURL+MGLAdditions.h"; sourceTree = "<group>"; };
- DAED385E1D62CED700D7640F /* NSURL+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURL+MGLAdditions.m"; sourceTree = "<group>"; };
- DAEDC4311D6033F1000224FF /* MGLAttributionInfoTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLAttributionInfoTests.m; path = ../../darwin/test/MGLAttributionInfoTests.m; sourceTree = "<group>"; };
- DAEDC4361D606291000224FF /* MGLAttributionButtonTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAttributionButtonTests.m; sourceTree = "<group>"; };
- DAF0D80D1DFE0E5D00B28378 /* MGLPointCollection_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPointCollection_Private.h; sourceTree = "<group>"; };
- DAF0D8151DFE6B1800B28378 /* MGLAttributionInfo_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAttributionInfo_Private.h; sourceTree = "<group>"; };
- DAF25713201901C100367EF5 /* MGLHillshadeStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHillshadeStyleLayer.mm; sourceTree = "<group>"; };
- DAF25714201901C200367EF5 /* MGLHillshadeStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHillshadeStyleLayer.h; sourceTree = "<group>"; };
- DAF2571D201902A500367EF5 /* MGLHillshadeStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHillshadeStyleLayerTests.mm; sourceTree = "<group>"; };
- DAFBD0D51E3FA969000CD6BF /* zh-Hant */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = "<group>"; };
- DAFBD0D61E3FA983000CD6BF /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Foundation.strings"; sourceTree = "<group>"; };
- DAFEB3702093ACBF00A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = "<group>"; };
- DAFEB3722093ACDA00A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Foundation.strings; sourceTree = "<group>"; };
- DAFEB3732093ACE400A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
- DD0902AF1DB1AC6400C5BDCE /* MGLNetworkConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLNetworkConfiguration.m; sourceTree = "<group>"; };
- DD0902B01DB1AC6400C5BDCE /* MGLNetworkConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLNetworkConfiguration.h; sourceTree = "<group>"; };
- DD58A4C71D822C6200E1F038 /* MGLExpressionTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLExpressionTests.mm; path = ../../darwin/test/MGLExpressionTests.mm; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- DA839E8F1CC2E3400062CAFB /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- DAE6C33D1CC30DB200DB3429 /* Mapbox.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- DAE6C3241CC30DB200DB3429 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 5548BE781D09E718005DDE81 /* libmbgl-core.a in Frameworks */,
- 55D120A31F7906E6004B6D81 /* libmbgl-filesource.a in Frameworks */,
- 52B5D17F1E5E26DF00BBCB48 /* libmbgl-loop-darwin.a in Frameworks */,
- 55CF7533213EDADF00ED86C4 /* libmbgl-vendor-icu.a in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- DAE6C32E1CC30DB200DB3429 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- DAE0DD7A1D5F015A005A6BB1 /* libmbgl-core.a in Frameworks */,
- 55D120A51F790A0C004B6D81 /* libmbgl-filesource.a in Frameworks */,
- DAE6C3321CC30DB200DB3429 /* Mapbox.framework in Frameworks */,
- 52B5D1801E5E26DF00BBCB48 /* libmbgl-loop-darwin.a in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 35136D471D42295400C20EFD /* Layers */ = {
- isa = PBXGroup;
- children = (
- 747ABE66219B2C3200523B67 /* MGLSymbolStyleLayer_Private.h */,
- 747ABE62219B2C1700523B67 /* MGLOpenGLStyleLayer_Private.h */,
- 747ABE63219B2C1700523B67 /* MGLRasterStyleLayer_Private.h */,
- 747ABE60219B2C0000523B67 /* MGLLineStyleLayer_Private.h */,
- 747ABE5E219B2BED00523B67 /* MGLHillshadeStyleLayer_Private.h */,
- 747ABE56219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h */,
- 747ABE55219B2BDA00523B67 /* MGLCircleStyleLayer_Private.h */,
- 747ABE54219B2BDA00523B67 /* MGLFillExtrusionStyleLayer_Private.h */,
- 747ABE57219B2BDB00523B67 /* MGLFillStyleLayer_Private.h */,
- 747ABE58219B2BDB00523B67 /* MGLHeatmapStyleLayer_Private.h */,
- 749EC88F2199CCB8005608D7 /* MGLStyleLayerManager.h */,
- 749EC8902199CCB9005608D7 /* MGLStyleLayerManager.mm */,
- DA8F25851D51C9E10010E6B5 /* MGLBackgroundStyleLayer.h */,
- DA8F25861D51C9E10010E6B5 /* MGLBackgroundStyleLayer.mm */,
- 3527428B1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.h */,
- 3527428C1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.mm */,
- DAA998F91E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.h */,
- DAA998FA1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.mm */,
- 35602BF81D3EA99F0050646F /* MGLFillStyleLayer.h */,
- 35602BF91D3EA99F0050646F /* MGLFillStyleLayer.mm */,
- 35602BFD1D3EA9B40050646F /* MGLForegroundStyleLayer.h */,
- 35602BFE1D3EA9B40050646F /* MGLForegroundStyleLayer.mm */,
- 8946239A200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.h */,
- 8946239B200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.mm */,
- DAF25714201901C200367EF5 /* MGLHillshadeStyleLayer.h */,
- DAF25713201901C100367EF5 /* MGLHillshadeStyleLayer.mm */,
- DA8F25891D51CA540010E6B5 /* MGLLineStyleLayer.h */,
- DA8F258A1D51CA540010E6B5 /* MGLLineStyleLayer.mm */,
- DA7262051DEEDD460043BB89 /* MGLOpenGLStyleLayer.h */,
- DA7262061DEEDD460043BB89 /* MGLOpenGLStyleLayer.mm */,
- DA8F258D1D51CA600010E6B5 /* MGLRasterStyleLayer.h */,
- DA8F258E1D51CA600010E6B5 /* MGLRasterStyleLayer.mm */,
- 3538AA211D542685008EC33D /* MGLStyleLayer.h */,
- 35602BFC1D3EA9B40050646F /* MGLStyleLayer_Private.h */,
- 3538AA221D542685008EC33D /* MGLStyleLayer.mm */,
- DA8F25911D51CA750010E6B5 /* MGLSymbolStyleLayer.h */,
- DA8F25921D51CA750010E6B5 /* MGLSymbolStyleLayer.mm */,
- DA6408D51DA4E5DA00908C90 /* MGLVectorStyleLayer.h */,
- DA6408D61DA4E5DA00908C90 /* MGLVectorStyleLayer.mm */,
- );
- name = Layers;
- sourceTree = "<group>";
- };
- 352742791D4C235C00A1ECE6 /* Categories */ = {
- isa = PBXGroup;
- children = (
- DA8F25A61D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h */,
- DA8F25A71D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm */,
- );
- name = Categories;
- sourceTree = "<group>";
- };
- 3527427E1D4C242B00A1ECE6 /* Sources */ = {
- isa = PBXGroup;
- children = (
- 07F8E2F41F674C8000F794BB /* MGLComputedShapeSource.h */,
- 07D947471F6741F500E37934 /* MGLComputedShapeSource_Private.h */,
- 07F8E2F51F674C8000F794BB /* MGLComputedShapeSource.mm */,
- 352742831D4C244700A1ECE6 /* MGLRasterTileSource.h */,
- DA7DC9821DED647F0027472F /* MGLRasterTileSource_Private.h */,
- 352742841D4C244700A1ECE6 /* MGLRasterTileSource.mm */,
- DACA8620201920BE00E9693A /* MGLRasterDEMSource.h */,
- DACA8621201920BE00E9693A /* MGLRasterDEMSource.mm */,
- 352742871D4C245800A1ECE6 /* MGLShapeSource.h */,
- DA87A99B1DC9D8DD00810D09 /* MGLShapeSource_Private.h */,
- 352742881D4C245800A1ECE6 /* MGLShapeSource.mm */,
- 3527427F1D4C243B00A1ECE6 /* MGLSource.h */,
- DA8F25991D51CAD00010E6B5 /* MGLSource_Private.h */,
- 352742801D4C243B00A1ECE6 /* MGLSource.mm */,
- DA551B7F1DB496AC0009AFAF /* MGLTileSource.h */,
- DA551B801DB496AC0009AFAF /* MGLTileSource_Private.h */,
- DA551B811DB496AC0009AFAF /* MGLTileSource.mm */,
- DA8F25951D51CAC70010E6B5 /* MGLVectorTileSource.h */,
- DA7DC9801DED5F5C0027472F /* MGLVectorTileSource_Private.h */,
- DA8F25961D51CAC70010E6B5 /* MGLVectorTileSource.mm */,
- 07A019EB1ED662D800ACD43E /* MGLImageSource.h */,
- 07A019EC1ED662D800ACD43E /* MGLImageSource.mm */,
- );
- name = Sources;
- sourceTree = "<group>";
- };
- 3527429B1D4C259500A1ECE6 /* Styling */ = {
- isa = PBXGroup;
- children = (
- 1753ED3F1E53CE5200A9FD90 /* MGLConversion.h */,
- 352742791D4C235C00A1ECE6 /* Categories */,
- 35136D471D42295400C20EFD /* Layers */,
- 3527427E1D4C242B00A1ECE6 /* Sources */,
- 352742771D4C220900A1ECE6 /* MGLStyleValue.h */,
- DA8F259B1D51CB000010E6B5 /* MGLStyleValue_Private.h */,
- 3527429E1D4C25BD00A1ECE6 /* MGLStyleValue.mm */,
- 1F7454A11ECFB00300021D39 /* MGLLight.h */,
- 1F7454A21ECFB00300021D39 /* MGLLight.mm */,
- 1F7454A01ECFB00300021D39 /* MGLLight_Private.h */,
- );
- name = Styling;
- sourceTree = "<group>";
- };
- 4031ACFA1E9EB39A00A3EA26 /* Swift Integration */ = {
- isa = PBXGroup;
- children = (
- 4031ACFB1E9EB3C100A3EA26 /* MGLMapViewDelegateIntegrationTests.swift */,
- );
- name = "Swift Integration";
- sourceTree = "<group>";
- };
- 4031AD001E9FD61000A3EA26 /* Test Helpers */ = {
- isa = PBXGroup;
- children = (
- CA0B3C042329F7E600E4B493 /* MGLTestAssertionHandler.h */,
- CA0B3C052329F7E600E4B493 /* MGLTestAssertionHandler.m */,
- 4031AD011E9FD6A300A3EA26 /* MGLSDKTestHelpers.swift */,
- );
- name = "Test Helpers";
- sourceTree = "<group>";
- };
- CFF9F98A23A2503300B0DE92 /* Interface */ = {
- isa = PBXGroup;
- children = (
- CFF9F98C23A2505700B0DE92 /* MGLNetworkIntegrationManager.h */,
- CFF9F98B23A2505700B0DE92 /* MGLNetworkIntegrationManager.m */,
- );
- name = Interface;
- sourceTree = "<group>";
- };
- DA33895E1FA3E997001EA329 /* Recovered References */ = {
- isa = PBXGroup;
- children = (
- );
- name = "Recovered References";
- sourceTree = "<group>";
- };
- DA839E891CC2E3400062CAFB = {
- isa = PBXGroup;
- children = (
- DA839E941CC2E3400062CAFB /* Demo App */,
- DAE6C3291CC30DB200DB3429 /* SDK */,
- DAE6C3371CC30DB200DB3429 /* SDK Tests */,
- DAE6C31E1CC308BC00DB3429 /* Frameworks */,
- DAE6C3C41CC31F7800DB3429 /* Configuration */,
- DA839E931CC2E3400062CAFB /* Products */,
- DA33895E1FA3E997001EA329 /* Recovered References */,
- );
- sourceTree = "<group>";
- };
- DA839E931CC2E3400062CAFB /* Products */ = {
- isa = PBXGroup;
- children = (
- DA839E921CC2E3400062CAFB /* Mapbox GL.app */,
- DAE6C3281CC30DB200DB3429 /* Mapbox.framework */,
- DAE6C3311CC30DB200DB3429 /* test.xctest */,
- );
- name = Products;
- sourceTree = "<group>";
- };
- DA839E941CC2E3400062CAFB /* Demo App */ = {
- isa = PBXGroup;
- children = (
- DA839E951CC2E3400062CAFB /* AppDelegate.h */,
- DA839E961CC2E3400062CAFB /* AppDelegate.m */,
- DAE6C2E31CC3050F00DB3429 /* DroppedPinAnnotation.h */,
- DAE6C2E41CC3050F00DB3429 /* DroppedPinAnnotation.m */,
- 3E6465D8206576A900685536 /* LimeGreenStyleLayer.h */,
- 3E6465D7206576A800685536 /* LimeGreenStyleLayer.m */,
- DAE6C2E51CC3050F00DB3429 /* LocationCoordinate2DTransformer.h */,
- DAE6C2E61CC3050F00DB3429 /* LocationCoordinate2DTransformer.m */,
- DA839E9B1CC2E3400062CAFB /* MapDocument.h */,
- DA839E9C1CC2E3400062CAFB /* MapDocument.m */,
- DA839E9E1CC2E3400062CAFB /* MapDocument.xib */,
- DACB0C371E18DFFD005DDBEA /* MGLStyle+MBXAdditions.h */,
- DACB0C381E18DFFD005DDBEA /* MGLStyle+MBXAdditions.m */,
- DAE6C2E91CC3050F00DB3429 /* OfflinePackNameValueTransformer.h */,
- DAE6C2EA1CC3050F00DB3429 /* OfflinePackNameValueTransformer.m */,
- DAA48EFB1D6A4731006A7E36 /* StyleLayerIconTransformer.h */,
- DAA48EFC1D6A4731006A7E36 /* StyleLayerIconTransformer.m */,
- DAE6C2EB1CC3050F00DB3429 /* TimeIntervalTransformer.h */,
- DAE6C2EC1CC3050F00DB3429 /* TimeIntervalTransformer.m */,
- DA839EA11CC2E3400062CAFB /* Assets.xcassets */,
- DA839EA31CC2E3400062CAFB /* MainMenu.xib */,
- 358EB3AE1D61F0DB00E46D9C /* amsterdam.geojson */,
- DA5589761D320C41006B7F64 /* wms.json */,
- DAE6C2E11CC304F900DB3429 /* Credits.rtf */,
- DA839EA61CC2E3400062CAFB /* Info.plist */,
- 96E027331E57C9A7004B8E66 /* Localizable.strings */,
- DA839E981CC2E3400062CAFB /* Supporting Files */,
- 89462398200D199100DA8EF2 /* heatmap.json */,
- );
- name = "Demo App";
- path = app;
- sourceTree = "<group>";
- };
- DA839E981CC2E3400062CAFB /* Supporting Files */ = {
- isa = PBXGroup;
- children = (
- DA839E991CC2E3400062CAFB /* main.m */,
- );
- name = "Supporting Files";
- sourceTree = "<group>";
- };
- DA87A99A1DC9D88800810D09 /* Sources */ = {
- isa = PBXGroup;
- children = (
- 07A240921F67566F002C8210 /* MGLComputedShapeSourceTests.m */,
- DA87A9961DC9D88400810D09 /* MGLShapeSourceTests.mm */,
- DA87A9971DC9D88400810D09 /* MGLTileSetTests.mm */,
- 920A3E581E6F859D00C16EFC /* MGLSourceQueryTests.m */,
- 07BA4CAB1EE21887004528F5 /* MGLImageSourceTests.m */,
- );
- name = Sources;
- sourceTree = "<group>";
- };
- DA8933A81CCD28D100E68420 /* Kit Resources */ = {
- isa = PBXGroup;
- children = (
- DA8933AB1CCD290700E68420 /* Localizable.strings */,
- DAE6C3BB1CC31F2E00DB3429 /* default_marker.pdf */,
- DAE6C3BC1CC31F2E00DB3429 /* mapbox.pdf */,
- 1F9EF4051FBA1B0D0063FBB0 /* mapbox_helmet.pdf */,
- DA8933A71CCD287300E68420 /* MGLAnnotationCallout.xib */,
- );
- name = "Kit Resources";
- sourceTree = "<group>";
- };
- DA8933B21CCD2C0700E68420 /* Foundation Resources */ = {
- isa = PBXGroup;
- children = (
- DA8933B31CCD2C2500E68420 /* Foundation.strings */,
- DA8933B61CCD2C2D00E68420 /* Foundation.stringsdict */,
- );
- name = "Foundation Resources";
- path = ../../darwin/resources;
- sourceTree = "<group>";
- };
- DA8F257C1D51C5F40010E6B5 /* Layers */ = {
- isa = PBXGroup;
- children = (
- 170A82C2201FAFF800943087 /* MGLHeatmapColorTests.mm */,
- 170A82BE201BDD1B00943087 /* MGLHeatmapStyleLayerTests.mm */,
- 40E1601A1DF216E6005EA6D9 /* MGLStyleLayerTests.h */,
- 40E1601B1DF216E6005EA6D9 /* MGLStyleLayerTests.m */,
- DA2207BA1DC076930002F84D /* test-Bridging-Header.h */,
- DAA999001E9F5EC5002E6EA6 /* MGLFillExtrusionStyleLayerTests.mm */,
- DA8F25741D51C5F40010E6B5 /* MGLFillStyleLayerTests.mm */,
- DAF2571D201902A500367EF5 /* MGLHillshadeStyleLayerTests.mm */,
- DA8F25751D51C5F40010E6B5 /* MGLRasterStyleLayerTests.mm */,
- DA8F25761D51C5F40010E6B5 /* MGLSymbolStyleLayerTests.mm */,
- DA8F25771D51C5F40010E6B5 /* MGLLineStyleLayerTests.mm */,
- DA8F25781D51C5F40010E6B5 /* MGLCircleStyleLayerTests.mm */,
- DA8F25791D51C5F40010E6B5 /* MGLBackgroundStyleLayerTests.mm */,
- );
- name = Layers;
- sourceTree = "<group>";
- };
- DA8F257D1D51C5F40010E6B5 /* Styling */ = {
- isa = PBXGroup;
- children = (
- DA8F257C1D51C5F40010E6B5 /* Layers */,
- DA87A99A1DC9D88800810D09 /* Sources */,
- 1F7454AA1ED1DDBD00021D39 /* MGLLightTest.mm */,
- );
- name = Styling;
- path = ../../darwin/test;
- sourceTree = "<group>";
- };
- DA8F25B81D51D2280010E6B5 /* Foundation Templates */ = {
- isa = PBXGroup;
- children = (
- DA8F25B61D51D2240010E6B5 /* MGLStyleLayer.h.ejs */,
- DA8F25B71D51D2240010E6B5 /* MGLStyleLayer.mm.ejs */,
- DA8F25B51D51D2240010E6B5 /* MGLStyleLayerTests.mm.ejs */,
- );
- name = "Foundation Templates";
- path = ../../darwin/src;
- sourceTree = "<group>";
- };
- DA90B12C1DB43B180073CF55 /* Categories */ = {
- isa = PBXGroup;
- children = (
- 355BA4EB1D41633E00CCC6D5 /* NSColor+MGLAdditions.h */,
- 355BA4EC1D41633E00CCC6D5 /* NSColor+MGLAdditions.mm */,
- 405C03961DB0004E001AC280 /* NSImage+MGLAdditions.h */,
- 405C03971DB0004E001AC280 /* NSImage+MGLAdditions.mm */,
- DAE6C3801CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h */,
- DAE6C3811CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.m */,
- );
- name = Categories;
- sourceTree = "<group>";
- };
- DAD1657C1CF4CE6B001FF4B9 /* Formatters */ = {
- isa = PBXGroup;
- children = (
- DA35A2BD1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.h */,
- DA35A2BE1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m */,
- DA35A2AB1CCA091800E826B2 /* MGLCompassDirectionFormatter.h */,
- DA35A2AC1CCA091800E826B2 /* MGLCompassDirectionFormatter.m */,
- DA35A2A31CC9EB1A00E826B2 /* MGLCoordinateFormatter.h */,
- DA35A2A51CC9EB2700E826B2 /* MGLCoordinateFormatter.m */,
- 35C6DF821E214C0400ACA483 /* MGLDistanceFormatter.h */,
- 35C6DF831E214C0400ACA483 /* MGLDistanceFormatter.m */,
- );
- name = Formatters;
- sourceTree = "<group>";
- };
- DAD1657D1CF4CECB001FF4B9 /* Geometry */ = {
- isa = PBXGroup;
- children = (
- DAE6C34B1CC31E0400DB3429 /* MGLAnnotation.h */,
- CA4045C4216720D700B356E1 /* MGLCluster.h */,
- DACC22171CF3D4F700D220D9 /* MGLFeature_Private.h */,
- DACC22121CF3D3E200D220D9 /* MGLFeature.h */,
- DACC22131CF3D3E200D220D9 /* MGLFeature.mm */,
- DAE6C36C1CC31E2A00DB3429 /* MGLGeometry_Private.h */,
- DAE6C34C1CC31E0400DB3429 /* MGLGeometry.h */,
- DAE6C36D1CC31E2A00DB3429 /* MGLGeometry.mm */,
- DAE6C36F1CC31E2A00DB3429 /* MGLMultiPoint_Private.h */,
- DAE6C34E1CC31E0400DB3429 /* MGLMultiPoint.h */,
- DAE6C3701CC31E2A00DB3429 /* MGLMultiPoint.mm */,
- DAE6C3521CC31E0400DB3429 /* MGLOverlay.h */,
- DAE6C3531CC31E0400DB3429 /* MGLPointAnnotation.h */,
- DAE6C3761CC31E2A00DB3429 /* MGLPointAnnotation.mm */,
- DAF0D80D1DFE0E5D00B28378 /* MGLPointCollection_Private.h */,
- 4049C2A11DB6CE7800B3F799 /* MGLPointCollection.h */,
- 4049C2A71DB6D09B00B3F799 /* MGLPointCollection.mm */,
- 9654C12C1FFC394700DB6A19 /* MGLPolygon_Private.h */,
- DAE6C3541CC31E0400DB3429 /* MGLPolygon.h */,
- DAE6C3771CC31E2A00DB3429 /* MGLPolygon.mm */,
- 9654C12A1FFC38E000DB6A19 /* MGLPolyline_Private.h */,
- DAE6C3551CC31E0400DB3429 /* MGLPolyline.h */,
- DAE6C3781CC31E2A00DB3429 /* MGLPolyline.mm */,
- 408AA85A1DAEECF100022900 /* MGLShape_Private.h */,
- DAE6C3561CC31E0400DB3429 /* MGLShape.h */,
- DAE6C3791CC31E2A00DB3429 /* MGLShape.mm */,
- DAD165721CF4CD7A001FF4B9 /* MGLShapeCollection.h */,
- DAD165731CF4CD7A001FF4B9 /* MGLShapeCollection.mm */,
- );
- name = Geometry;
- sourceTree = "<group>";
- };
- DAD1657E1CF4CF04001FF4B9 /* Offline Maps */ = {
- isa = PBXGroup;
- children = (
- DAE6C34F1CC31E0400DB3429 /* MGLOfflinePack.h */,
- DAE6C3711CC31E2A00DB3429 /* MGLOfflinePack_Private.h */,
- DAE6C3721CC31E2A00DB3429 /* MGLOfflinePack.mm */,
- DAE6C3501CC31E0400DB3429 /* MGLOfflineRegion.h */,
- DAE6C3731CC31E2A00DB3429 /* MGLOfflineRegion_Private.h */,
- DAE6C3511CC31E0400DB3429 /* MGLOfflineStorage.h */,
- DAE6C3741CC31E2A00DB3429 /* MGLOfflineStorage_Private.h */,
- DAE6C3751CC31E2A00DB3429 /* MGLOfflineStorage.mm */,
- 9250B8C22073C69000EF338C /* MGLShapeOfflineRegion.h */,
- 92FC0AE3207CC8DA007B6B54 /* MGLShapeOfflineRegion_Private.h */,
- 92FC0AE5207CDD8D007B6B54 /* MGLShapeOfflineRegion.mm */,
- DAE6C3581CC31E0400DB3429 /* MGLTilePyramidOfflineRegion.h */,
- 9221BAAE20699CBA0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h */,
- DAE6C37B1CC31E2A00DB3429 /* MGLTilePyramidOfflineRegion.mm */,
- );
- name = "Offline Maps";
- sourceTree = "<group>";
- };
- DAD1657F1CF4CF50001FF4B9 /* Categories */ = {
- isa = PBXGroup;
- children = (
- 40B77E431DB11BB0003DA2FE /* NSArray+MGLAdditions.h */,
- 40B77E421DB11BB0003DA2FE /* NSArray+MGLAdditions.mm */,
- DAE6C37D1CC31E2A00DB3429 /* NSBundle+MGLAdditions.h */,
- DAE6C37E1CC31E2A00DB3429 /* NSBundle+MGLAdditions.m */,
- 359819571E02F611008FC139 /* NSCoder+MGLAdditions.h */,
- 359819581E02F611008FC139 /* NSCoder+MGLAdditions.mm */,
- 35C5D8431D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.h */,
- 35C5D8441D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.mm */,
- 35C5D8451D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.h */,
- 35C5D8461D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.mm */,
- 35D65C581D65AD5500722C23 /* NSDate+MGLAdditions.h */,
- 35D65C591D65AD5500722C23 /* NSDate+MGLAdditions.mm */,
- 408AA85F1DAEED3300022900 /* NSDictionary+MGLAdditions.h */,
- 408AA85E1DAEED3300022900 /* NSDictionary+MGLAdditions.mm */,
- DAE6C37F1CC31E2A00DB3429 /* NSException+MGLAdditions.h */,
- 3508EC621D749D39009B0EE4 /* NSExpression+MGLAdditions.h */,
- DAC25FC9200FD5E2009BE98E /* NSExpression+MGLPrivateAdditions.h */,
- 3508EC631D749D39009B0EE4 /* NSExpression+MGLAdditions.mm */,
- 352903991D6C63B80002C7DF /* NSPredicate+MGLAdditions.h */,
- 3529039A1D6C63B80002C7DF /* NSPredicate+MGLAdditions.mm */,
- 1FC481842098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h */,
- DAE6C3821CC31E2A00DB3429 /* NSString+MGLAdditions.h */,
- DAE6C3831CC31E2A00DB3429 /* NSString+MGLAdditions.m */,
- DAED385D1D62CED700D7640F /* NSURL+MGLAdditions.h */,
- DAED385E1D62CED700D7640F /* NSURL+MGLAdditions.m */,
- DA35A2CD1CCAAED300E826B2 /* NSValue+MGLAdditions.h */,
- DA35A2CE1CCAAED300E826B2 /* NSValue+MGLAdditions.m */,
- );
- name = Categories;
- sourceTree = "<group>";
- };
- DAE6C31E1CC308BC00DB3429 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */,
- 55D120A41F7906E6004B6D81 /* libmbgl-filesource.a */,
- 5548BE7B1D0ACBBD005DDE81 /* libmbgl-loop-darwin.a */,
- 55D9B4B01D005D3900C1CCE2 /* libz.tbd */,
- 52BECB091CC5A26F009CD791 /* SystemConfiguration.framework */,
- DAE6C3451CC31D1200DB3429 /* libmbgl-core.a */,
- DAE6C3461CC31D1200DB3429 /* libmbgl-platform-macos.a */,
- DAE6C3C61CC3499100DB3429 /* libsqlite3.tbd */,
- );
- name = Frameworks;
- sourceTree = "<group>";
- };
- DAE6C3291CC30DB200DB3429 /* SDK */ = {
- isa = PBXGroup;
- children = (
- DAE6C3C11CC31F4500DB3429 /* Mapbox.h */,
- DAE6C3491CC31DF500DB3429 /* Foundation */,
- DA8F25B81D51D2280010E6B5 /* Foundation Templates */,
- DA8933B21CCD2C0700E68420 /* Foundation Resources */,
- DAE6C39E1CC31E7C00DB3429 /* Kit */,
- DA8933A81CCD28D100E68420 /* Kit Resources */,
- DAE6C32C1CC30DB200DB3429 /* Info.plist */,
- );
- name = SDK;
- path = sdk;
- sourceTree = "<group>";
- };
- DAE6C3371CC30DB200DB3429 /* SDK Tests */ = {
- isa = PBXGroup;
- children = (
- DAE6C33A1CC30DB200DB3429 /* Info.plist */,
- DA2784FD1DF03060001D5B8D /* Media.xcassets */,
- CA9461A520884CCB0015EB12 /* MGLAnnotationTests.m */,
- DAEDC4361D606291000224FF /* MGLAttributionButtonTests.m */,
- DAEDC4311D6033F1000224FF /* MGLAttributionInfoTests.m */,
- DA35A2C11CCA9F4A00E826B2 /* MGLClockDirectionFormatterTests.m */,
- 3526EABC1DF9B19800006B43 /* MGLCodingTests.mm */,
- DA35A2B51CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m */,
- DA35A2A71CC9F41600E826B2 /* MGLCoordinateFormatterTests.m */,
- 35C6DF861E214C1800ACA483 /* MGLDistanceFormatterTests.m */,
- DA2987591E1A4290002299F5 /* MGLDocumentationExampleTests.swift */,
- DA57D4B01EBC699800793288 /* MGLDocumentationGuideTests.swift */,
- DD58A4C71D822C6200E1F038 /* MGLExpressionTests.mm */,
- DA0CD58D1CF56F5800A5F5A5 /* MGLFeatureTests.mm */,
- DAE6C3C81CC34BD800DB3429 /* MGLGeometryTests.mm */,
- DA695423215B1E6C002041A4 /* MGLMapCameraTests.m */,
- 076171C4213A0DC200668A35 /* MGLMapViewTests.m */,
- 1F95931A1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm */,
- DAE7DEC31E24549F007505A6 /* MGLNSStringAdditionsTests.m */,
- CA0B3C082329FB4800E4B493 /* MGLOfflinePackTests.mm */,
- DAE6C3CA1CC34BD800DB3429 /* MGLOfflineRegionTests.m */,
- 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */,
- 35C5D84B1D6DD75B00E95907 /* MGLPredicateTests.mm */,
- CA8FBC0C21A4A74300D1203C /* MGLRendererConfigurationTests.mm */,
- CAD9D0AB22A88A32001B25EE /* MGLResourceTests.mm */,
- DAE6C3CC1CC34BD800DB3429 /* MGLStyleTests.mm */,
- 556660D51E1D07E400E2C41B /* MGLVersionNumber.m */,
- DA35D0891E1A631B007DED41 /* one-liner.json */,
- 1F8A59F921653483004DFE75 /* sideload_sat.db */,
- DA8F257D1D51C5F40010E6B5 /* Styling */,
- 4031ACFA1E9EB39A00A3EA26 /* Swift Integration */,
- 4031AD001E9FD61000A3EA26 /* Test Helpers */,
- );
- name = "SDK Tests";
- path = test;
- sourceTree = "<group>";
- };
- DAE6C3491CC31DF500DB3429 /* Foundation */ = {
- isa = PBXGroup;
- children = (
- 3527429B1D4C259500A1ECE6 /* Styling */,
- DAD1657F1CF4CF50001FF4B9 /* Categories */,
- DAD1657C1CF4CE6B001FF4B9 /* Formatters */,
- DAD1657D1CF4CECB001FF4B9 /* Geometry */,
- DAD1657E1CF4CF04001FF4B9 /* Offline Maps */,
- DAE6C34A1CC31E0400DB3429 /* MGLAccountManager.h */,
- DAE6C36A1CC31E2A00DB3429 /* MGLAccountManager_Private.h */,
- DAE6C36B1CC31E2A00DB3429 /* MGLAccountManager.m */,
- DA00FC881D5EEAC3009AABC8 /* MGLAttributionInfo.h */,
- DAF0D8151DFE6B1800B28378 /* MGLAttributionInfo_Private.h */,
- DA00FC891D5EEAC3009AABC8 /* MGLAttributionInfo.mm */,
- 1FF4858C2237235200F19727 /* MGLAttributedExpression.h */,
- 1FF4858B2237235200F19727 /* MGLAttributedExpression.m */,
- 556660C51E1BEA0100E2C41B /* MGLFoundation.h */,
- 558DE7A41E56161C00C7916D /* MGLFoundation_Private.h */,
- 558DE7A51E56161C00C7916D /* MGLFoundation.mm */,
- DAE6C34D1CC31E0400DB3429 /* MGLMapCamera.h */,
- 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 */,
- 92F2C3EA1F0E3A1900268EC0 /* MGLRendererFrontend.h */,
- DAE6C3571CC31E0400DB3429 /* MGLStyle.h */,
- 3537CA731D3F93A600380318 /* MGLStyle_Private.h */,
- DAE6C37A1CC31E2A00DB3429 /* MGLStyle.mm */,
- DAE6C3591CC31E0400DB3429 /* MGLTypes.h */,
- DAE6C37C1CC31E2A00DB3429 /* MGLTypes.m */,
- DA87A99F1DC9DC6200810D09 /* MGLValueEvaluator.h */,
- 1F8A5A03216D4696004DFE75 /* MGLLoggingConfiguration.h */,
- 1F8A5A01216D4695004DFE75 /* MGLLoggingConfiguration_Private.h */,
- CF762DEE22DC7EFF00338472 /* MGLLoggingConfiguration.mm */,
- );
- name = Foundation;
- path = ../darwin/src;
- sourceTree = SOURCE_ROOT;
- };
- DAE6C39E1CC31E7C00DB3429 /* Kit */ = {
- isa = PBXGroup;
- children = (
- CFF9F98A23A2503300B0DE92 /* Interface */,
- DA90B12C1DB43B180073CF55 /* Categories */,
- DAE6C39F1CC31E9400DB3429 /* MGLAnnotationImage.h */,
- DAC2ABC41CC6D343006D18C4 /* MGLAnnotationImage_Private.h */,
- DAE6C3A71CC31EF300DB3429 /* MGLAnnotationImage.m */,
- DAE6C3A81CC31EF300DB3429 /* MGLAttributionButton.h */,
- DAE6C3A91CC31EF300DB3429 /* MGLAttributionButton.mm */,
- DAE6C3AA1CC31EF300DB3429 /* MGLCompassCell.h */,
- DAE6C3AB1CC31EF300DB3429 /* MGLCompassCell.m */,
- DAE6C3A01CC31E9400DB3429 /* MGLMapView.h */,
- DAE6C3AC1CC31EF300DB3429 /* MGLMapView_Private.h */,
- DAE6C3AD1CC31EF300DB3429 /* MGLMapView.mm */,
- 5591AC682298361600FF9ADF /* MGLMapView+Impl.h */,
- 5591AC692298361600FF9ADF /* MGLMapView+Impl.mm */,
- 55CAF6332294409B00F17770 /* MGLMapView+OpenGL.mm */,
- 55CAF6312294407F00F17770 /* MGLMapView+OpenGL.h */,
- DAE6C3A11CC31E9400DB3429 /* MGLMapView+IBAdditions.h */,
- DAE6C3AE1CC31EF300DB3429 /* MGLMapView+IBAdditions.mm */,
- DAE6C3A21CC31E9400DB3429 /* MGLMapViewDelegate.h */,
- DAE6C3AF1CC31EF300DB3429 /* MGLOpenGLLayer.h */,
- DAE6C3B01CC31EF300DB3429 /* MGLOpenGLLayer.mm */,
- );
- name = Kit;
- path = src;
- sourceTree = SOURCE_ROOT;
- };
- DAE6C3C41CC31F7800DB3429 /* Configuration */ = {
- isa = PBXGroup;
- children = (
- 55FE0E8D1D100A0900FD240B /* config.xcconfig */,
- );
- name = Configuration;
- sourceTree = "<group>";
- };
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
- DAE6C3251CC30DB200DB3429 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 556660C61E1BEA0100E2C41B /* MGLFoundation.h in Headers */,
- 07F8E2F71F674C8800F794BB /* MGLComputedShapeSource.h in Headers */,
- DA8F258F1D51CA600010E6B5 /* MGLRasterStyleLayer.h in Headers */,
- 3508EC641D749D39009B0EE4 /* NSExpression+MGLAdditions.h in Headers */,
- DAE6C38D1CC31E2A00DB3429 /* MGLOfflineRegion_Private.h in Headers */,
- DA7DC9831DED647F0027472F /* MGLRasterTileSource_Private.h in Headers */,
- 747ABE5B219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h in Headers */,
- 1FF4858E2237235300F19727 /* MGLAttributedExpression.h in Headers */,
- 1753ED401E53CE6100A9FD90 /* MGLConversion.h in Headers */,
- 747ABE59219B2BDB00523B67 /* MGLFillExtrusionStyleLayer_Private.h in Headers */,
- DA8F259C1D51CB000010E6B5 /* MGLStyleValue_Private.h in Headers */,
- DAE6C35B1CC31E0400DB3429 /* MGLAnnotation.h in Headers */,
- DAE6C3B61CC31EF300DB3429 /* MGLMapView_Private.h in Headers */,
- 747ABE65219B2C1800523B67 /* MGLRasterStyleLayer_Private.h in Headers */,
- 747ABE5D219B2BDB00523B67 /* MGLHeatmapStyleLayer_Private.h in Headers */,
- DAF25716201901C200367EF5 /* MGLHillshadeStyleLayer.h in Headers */,
- 92092EF01F5EB10E00AF5130 /* MGLMapSnapshotter.h in Headers */,
- 3527428D1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.h in Headers */,
- DA00FC8A1D5EEAC3009AABC8 /* MGLAttributionInfo.h in Headers */,
- DAE6C3B21CC31EF300DB3429 /* MGLAttributionButton.h in Headers */,
- DAA998FB1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.h in Headers */,
- 40B77E451DB11BC9003DA2FE /* NSArray+MGLAdditions.h in Headers */,
- 35C5D8471D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.h in Headers */,
- DAE6C3A31CC31E9400DB3429 /* MGLAnnotationImage.h in Headers */,
- DAE6C3A41CC31E9400DB3429 /* MGLMapView.h in Headers */,
- 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 */,
- DAF0D8161DFE6B1800B28378 /* MGLAttributionInfo_Private.h in Headers */,
- DAE6C3971CC31E2A00DB3429 /* NSBundle+MGLAdditions.h in Headers */,
- DAED385F1D62CED700D7640F /* NSURL+MGLAdditions.h in Headers */,
- DAD165741CF4CD7A001FF4B9 /* MGLShapeCollection.h in Headers */,
- DAE6C3631CC31E0400DB3429 /* MGLPointAnnotation.h in Headers */,
- DAC2ABC51CC6D343006D18C4 /* MGLAnnotationImage_Private.h in Headers */,
- DAE6C35F1CC31E0400DB3429 /* MGLOfflinePack.h in Headers */,
- 1F8A5A04216D4696004DFE75 /* MGLLoggingConfiguration_Private.h in Headers */,
- 1FC481852098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h in Headers */,
- DAE6C39C1CC31E2A00DB3429 /* NSString+MGLAdditions.h in Headers */,
- 1F8A5A06216D4696004DFE75 /* MGLLoggingConfiguration.h in Headers */,
- 3529039B1D6C63B80002C7DF /* NSPredicate+MGLAdditions.h in Headers */,
- 747ABE5A219B2BDB00523B67 /* MGLCircleStyleLayer_Private.h in Headers */,
- DA8F25971D51CAC70010E6B5 /* MGLVectorTileSource.h in Headers */,
- DA7DC9811DED5F5C0027472F /* MGLVectorTileSource_Private.h in Headers */,
- DAE6C3861CC31E2A00DB3429 /* MGLGeometry_Private.h in Headers */,
- DAE6C3841CC31E2A00DB3429 /* MGLAccountManager_Private.h in Headers */,
- CFF9F98E23A2505700B0DE92 /* MGLNetworkIntegrationManager.h in Headers */,
- DACA8622201920BE00E9693A /* MGLRasterDEMSource.h in Headers */,
- DAE6C3691CC31E0400DB3429 /* MGLTypes.h in Headers */,
- 07D9474D1F67441B00E37934 /* MGLComputedShapeSource_Private.h in Headers */,
- DAE6C3991CC31E2A00DB3429 /* NSException+MGLAdditions.h in Headers */,
- DA8F25871D51C9E10010E6B5 /* MGLBackgroundStyleLayer.h in Headers */,
- 4049C2A51DB6CE7F00B3F799 /* MGLPointCollection.h in Headers */,
- DAE6C3661CC31E0400DB3429 /* MGLShape.h in Headers */,
- DA551B831DB496AC0009AFAF /* MGLTileSource_Private.h in Headers */,
- 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 */,
- 9250B8C32073C69100EF338C /* MGLShapeOfflineRegion.h in Headers */,
- 747ABE67219B2C3200523B67 /* MGLSymbolStyleLayer_Private.h in Headers */,
- 55CAF6322294407F00F17770 /* MGLMapView+OpenGL.h in Headers */,
- DD0902B31DB1AC6400C5BDCE /* MGLNetworkConfiguration.h in Headers */,
- DAE6C3621CC31E0400DB3429 /* MGLOverlay.h in Headers */,
- DAE6C3651CC31E0400DB3429 /* MGLPolyline.h in Headers */,
- DAE6C39A1CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h in Headers */,
- 92F2C3EB1F0E3A1900268EC0 /* MGLRendererFrontend.h in Headers */,
- DA8F258B1D51CA540010E6B5 /* MGLLineStyleLayer.h in Headers */,
- 35C6DF841E214C0400ACA483 /* MGLDistanceFormatter.h in Headers */,
- DA8F25B21D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h in Headers */,
- 55335DF9212EC542000CE5F8 /* NSImage+MGLAdditions.h in Headers */,
- 1F7454A31ECFB00300021D39 /* MGLLight_Private.h in Headers */,
- 5591AC6A2298361600FF9ADF /* MGLMapView+Impl.h in Headers */,
- 359819591E02F611008FC139 /* NSCoder+MGLAdditions.h in Headers */,
- DAE6C38E1CC31E2A00DB3429 /* MGLOfflineStorage_Private.h in Headers */,
- 747ABE61219B2C0000523B67 /* MGLLineStyleLayer_Private.h in Headers */,
- 747ABE5F219B2BED00523B67 /* MGLHillshadeStyleLayer_Private.h in Headers */,
- DA87A9A01DC9DC6200810D09 /* MGLValueEvaluator.h in Headers */,
- 8946239D200E744800DA8EF2 /* MGLHeatmapStyleLayer.h in Headers */,
- DAE6C3601CC31E0400DB3429 /* MGLOfflineRegion.h in Headers */,
- DAE6C3681CC31E0400DB3429 /* MGLTilePyramidOfflineRegion.h in Headers */,
- DA35A2CF1CCAAED300E826B2 /* NSValue+MGLAdditions.h in Headers */,
- DAE6C3A61CC31E9400DB3429 /* MGLMapViewDelegate.h in Headers */,
- DAE6C38B1CC31E2A00DB3429 /* MGLOfflinePack_Private.h in Headers */,
- 558DE7A61E56161C00C7916D /* MGLFoundation_Private.h in Headers */,
- CA4045C7216720D700B356E1 /* MGLCluster.h in Headers */,
- DACC22141CF3D3E200D220D9 /* MGLFeature.h in Headers */,
- 3538AA231D542685008EC33D /* MGLStyleLayer.h in Headers */,
- DAE6C35C1CC31E0400DB3429 /* MGLGeometry.h in Headers */,
- DAE6C35A1CC31E0400DB3429 /* MGLAccountManager.h in Headers */,
- DA551B821DB496AC0009AFAF /* MGLTileSource.h in Headers */,
- 35602C001D3EA9B40050646F /* MGLForegroundStyleLayer.h in Headers */,
- DAE6C35D1CC31E0400DB3429 /* MGLMapCamera.h in Headers */,
- DAE6C3B41CC31EF300DB3429 /* MGLCompassCell.h in Headers */,
- DA87A99C1DC9D8DD00810D09 /* MGLShapeSource_Private.h in Headers */,
- 3537CA741D3F93A600380318 /* MGLStyle_Private.h in Headers */,
- 0721493F1EE200E900085505 /* MGLImageSource.h in Headers */,
- DA8F259A1D51CAD00010E6B5 /* MGLSource_Private.h in Headers */,
- DA8F25931D51CA750010E6B5 /* MGLSymbolStyleLayer.h in Headers */,
- DAE6C3B91CC31EF300DB3429 /* MGLOpenGLLayer.h in Headers */,
- DAF0D80E1DFE0E5D00B28378 /* MGLPointCollection_Private.h in Headers */,
- 35D65C5A1D65AD5500722C23 /* NSDate+MGLAdditions.h in Headers */,
- 355BA4ED1D41633E00CCC6D5 /* NSColor+MGLAdditions.h in Headers */,
- DAE6C3891CC31E2A00DB3429 /* MGLMultiPoint_Private.h in Headers */,
- 747ABE64219B2C1800523B67 /* MGLOpenGLStyleLayer_Private.h in Headers */,
- DAE6C3A51CC31E9400DB3429 /* MGLMapView+IBAdditions.h in Headers */,
- DA35A2AD1CCA091800E826B2 /* MGLCompassDirectionFormatter.h in Headers */,
- 352742851D4C244700A1ECE6 /* MGLRasterTileSource.h in Headers */,
- 9654C12D1FFC394700DB6A19 /* MGLPolygon_Private.h in Headers */,
- 408AA85B1DAEECFE00022900 /* MGLShape_Private.h in Headers */,
- 9221BAAF20699CBB0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h in Headers */,
- DACC22181CF3D4F700D220D9 /* MGLFeature_Private.h in Headers */,
- 9654C12B1FFC38E000DB6A19 /* MGLPolyline_Private.h in Headers */,
- DA6408D71DA4E5DA00908C90 /* MGLVectorStyleLayer.h in Headers */,
- 352742891D4C245800A1ECE6 /* MGLShapeSource.h in Headers */,
- 1F7454A41ECFB00300021D39 /* MGLLight.h in Headers */,
- 747ABE5C219B2BDB00523B67 /* MGLFillStyleLayer_Private.h in Headers */,
- 408AA8671DAEEE3900022900 /* NSDictionary+MGLAdditions.h in Headers */,
- DAE6C3671CC31E0400DB3429 /* MGLStyle.h in Headers */,
- 3EA9317388DC9A0BF46B7674 /* MGLRendererConfiguration.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXLegacyTarget section */
- DAAA17961CE13BAE00731EFE /* docs */ = {
- isa = PBXLegacyTarget;
- buildArgumentsString = "xdocument OUTPUT=build/macos/pkg/documentation";
- buildConfigurationList = DAAA17991CE13BAE00731EFE /* Build configuration list for PBXLegacyTarget "docs" */;
- buildPhases = (
- );
- buildToolPath = /usr/bin/make;
- buildWorkingDirectory = ../../;
- dependencies = (
- );
- name = docs;
- passBuildSettingsInEnvironment = 1;
- productName = docs;
- };
-/* End PBXLegacyTarget section */
-
-/* Begin PBXNativeTarget section */
- DA839E911CC2E3400062CAFB /* macosapp */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = DA839EA91CC2E3400062CAFB /* Build configuration list for PBXNativeTarget "macosapp" */;
- buildPhases = (
- DA839E8E1CC2E3400062CAFB /* Sources */,
- DA839E8F1CC2E3400062CAFB /* Frameworks */,
- DA839E901CC2E3400062CAFB /* Resources */,
- DAE6C3221CC30B3C00DB3429 /* Embed Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- DAE6C33C1CC30DB200DB3429 /* PBXTargetDependency */,
- );
- name = macosapp;
- productName = macosapp;
- productReference = DA839E921CC2E3400062CAFB /* Mapbox GL.app */;
- productType = "com.apple.product-type.application";
- };
- DAE6C3271CC30DB200DB3429 /* dynamic */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = DAE6C3431CC30DB200DB3429 /* Build configuration list for PBXNativeTarget "dynamic" */;
- buildPhases = (
- DAE6C3231CC30DB200DB3429 /* Sources */,
- DAE6C3241CC30DB200DB3429 /* Frameworks */,
- DAE6C3251CC30DB200DB3429 /* Headers */,
- DAE6C3261CC30DB200DB3429 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = dynamic;
- productName = dynamic;
- productReference = DAE6C3281CC30DB200DB3429 /* Mapbox.framework */;
- productType = "com.apple.product-type.framework";
- };
- DAE6C3301CC30DB200DB3429 /* test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = DAE6C3441CC30DB200DB3429 /* Build configuration list for PBXNativeTarget "test" */;
- buildPhases = (
- DAE6C32D1CC30DB200DB3429 /* Sources */,
- DAE6C32E1CC30DB200DB3429 /* Frameworks */,
- DAE6C32F1CC30DB200DB3429 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- DAE6C3341CC30DB200DB3429 /* PBXTargetDependency */,
- );
- name = test;
- productName = dynamicTests;
- productReference = DAE6C3311CC30DB200DB3429 /* test.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- DA839E8A1CC2E3400062CAFB /* Project object */ = {
- isa = PBXProject;
- attributes = {
- CLASSPREFIX = MBX;
- LastUpgradeCheck = 0930;
- ORGANIZATIONNAME = Mapbox;
- TargetAttributes = {
- DA839E911CC2E3400062CAFB = {
- CreatedOnToolsVersion = 7.3;
- LastSwiftMigration = 0920;
- };
- DAAA17961CE13BAE00731EFE = {
- CreatedOnToolsVersion = 7.3.1;
- };
- DAE6C3271CC30DB200DB3429 = {
- CreatedOnToolsVersion = 7.3;
- };
- DAE6C3301CC30DB200DB3429 = {
- CreatedOnToolsVersion = 7.3;
- LastSwiftMigration = 0920;
- };
- };
- };
- buildConfigurationList = DA839E8D1CC2E3400062CAFB /* Build configuration list for PBXProject "macos" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = English;
- hasScannedForEncodings = 0;
- knownRegions = (
- English,
- en,
- Base,
- "zh-Hans",
- "zh-Hant",
- de,
- fr,
- ja,
- sv,
- vi,
- "pt-BR",
- es,
- pl,
- uk,
- lt,
- ru,
- ca,
- fi,
- nl,
- hu,
- bg,
- ar,
- he,
- da,
- "pt-PT",
- ko,
- cs,
- gl,
- );
- mainGroup = DA839E891CC2E3400062CAFB;
- productRefGroup = DA839E931CC2E3400062CAFB /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- DA839E911CC2E3400062CAFB /* macosapp */,
- DAE6C3271CC30DB200DB3429 /* dynamic */,
- DAE6C3301CC30DB200DB3429 /* test */,
- DAAA17961CE13BAE00731EFE /* docs */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- DA839E901CC2E3400062CAFB /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- DA839EA21CC2E3400062CAFB /* Assets.xcassets in Resources */,
- DA839EA01CC2E3400062CAFB /* MapDocument.xib in Resources */,
- 353BAEF81D6463B8009A8DA9 /* amsterdam.geojson in Resources */,
- 96E027311E57C9A7004B8E66 /* Localizable.strings in Resources */,
- 89462399200D199100DA8EF2 /* heatmap.json in Resources */,
- DA839EA51CC2E3400062CAFB /* MainMenu.xib in Resources */,
- DA5589771D320C41006B7F64 /* wms.json in Resources */,
- DAE6C2E21CC304F900DB3429 /* Credits.rtf in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- DAE6C3261CC30DB200DB3429 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- DA8933AE1CCD290700E68420 /* Localizable.strings in Resources */,
- DAE6C3BE1CC31F2E00DB3429 /* default_marker.pdf in Resources */,
- DAE6C3BF1CC31F2E00DB3429 /* mapbox.pdf in Resources */,
- DA8933A51CCD287300E68420 /* MGLAnnotationCallout.xib in Resources */,
- DA8933B51CCD2C2500E68420 /* Foundation.strings in Resources */,
- DA8933B81CCD2C2D00E68420 /* Foundation.stringsdict in Resources */,
- 1F9EF4061FBA1B0E0063FBB0 /* mapbox_helmet.pdf in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- DAE6C32F1CC30DB200DB3429 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 35724FC41D630502002A4AB4 /* amsterdam.geojson in Resources */,
- DA2784FE1DF03060001D5B8D /* Media.xcassets in Resources */,
- DA35D08A1E1A631B007DED41 /* one-liner.json in Resources */,
- 1F8A59FA21653483004DFE75 /* sideload_sat.db in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- DA839E8E1CC2E3400062CAFB /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- DAA48EFD1D6A4731006A7E36 /* StyleLayerIconTransformer.m in Sources */,
- DA839E9D1CC2E3400062CAFB /* MapDocument.m in Sources */,
- DAE6C2ED1CC3050F00DB3429 /* DroppedPinAnnotation.m in Sources */,
- DAE6C2EE1CC3050F00DB3429 /* LocationCoordinate2DTransformer.m in Sources */,
- DAE6C2F11CC3050F00DB3429 /* TimeIntervalTransformer.m in Sources */,
- DACB0C391E18DFFD005DDBEA /* MGLStyle+MBXAdditions.m in Sources */,
- DA839E9A1CC2E3400062CAFB /* main.m in Sources */,
- DA839E971CC2E3400062CAFB /* AppDelegate.m in Sources */,
- 3E6465D9206576A900685536 /* LimeGreenStyleLayer.m in Sources */,
- DAE6C2F01CC3050F00DB3429 /* OfflinePackNameValueTransformer.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- DAE6C3231CC30DB200DB3429 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 07A019EF1ED665CD00ACD43E /* MGLImageSource.mm in Sources */,
- 92092EF11F5EB10E00AF5130 /* MGLMapSnapshotter.mm in Sources */,
- 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 */,
- 55CAF6342294409B00F17770 /* MGLMapView+OpenGL.mm in Sources */,
- 40B77E461DB11BCD003DA2FE /* NSArray+MGLAdditions.mm in Sources */,
- DAE6C38C1CC31E2A00DB3429 /* MGLOfflinePack.mm in Sources */,
- 35D65C5B1D65AD5500722C23 /* NSDate+MGLAdditions.mm in Sources */,
- CF762DEF22DC7EFF00338472 /* MGLLoggingConfiguration.mm in Sources */,
- DD0902B21DB1AC6400C5BDCE /* MGLNetworkConfiguration.m in Sources */,
- 1F7454A51ECFB00300021D39 /* MGLLight.mm in Sources */,
- DAE6C3B11CC31EF300DB3429 /* MGLAnnotationImage.m in Sources */,
- 3508EC651D749D39009B0EE4 /* NSExpression+MGLAdditions.mm in Sources */,
- DACC22151CF3D3E200D220D9 /* MGLFeature.mm in Sources */,
- DA7262081DEEDD460043BB89 /* MGLOpenGLStyleLayer.mm in Sources */,
- 355BA4EE1D41633E00CCC6D5 /* NSColor+MGLAdditions.mm in Sources */,
- DAE6C3B31CC31EF300DB3429 /* MGLAttributionButton.mm in Sources */,
- 35602BFB1D3EA99F0050646F /* MGLFillStyleLayer.mm in Sources */,
- DAE6C3931CC31E2A00DB3429 /* MGLShape.mm in Sources */,
- 352742861D4C244700A1ECE6 /* MGLRasterTileSource.mm in Sources */,
- 558DE7A71E56161C00C7916D /* MGLFoundation.mm in Sources */,
- DAE6C39D1CC31E2A00DB3429 /* NSString+MGLAdditions.m in Sources */,
- 3598195A1E02F611008FC139 /* NSCoder+MGLAdditions.mm in Sources */,
- 749EC8932199CCB9005608D7 /* MGLStyleLayerManager.mm in Sources */,
- DAE6C3941CC31E2A00DB3429 /* MGLStyle.mm in Sources */,
- DAE6C3871CC31E2A00DB3429 /* MGLGeometry.mm in Sources */,
- 894623A0200E748000DA8EF2 /* MGLHeatmapStyleLayer.mm in Sources */,
- 3527428E1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.mm in Sources */,
- 35602C011D3EA9B40050646F /* MGLForegroundStyleLayer.mm in Sources */,
- 408AA86A1DAEEE5D00022900 /* NSDictionary+MGLAdditions.mm in Sources */,
- DA8F25881D51C9E10010E6B5 /* MGLBackgroundStyleLayer.mm in Sources */,
- DA551B841DB496AC0009AFAF /* MGLTileSource.mm in Sources */,
- CFF9F98D23A2505700B0DE92 /* MGLNetworkIntegrationManager.m in Sources */,
- DAE6C3B81CC31EF300DB3429 /* MGLMapView+IBAdditions.mm in Sources */,
- DA35A2D01CCAAED300E826B2 /* NSValue+MGLAdditions.m in Sources */,
- 3538AA241D542685008EC33D /* MGLStyleLayer.mm in Sources */,
- DA35A2C01CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m in Sources */,
- 07F8E2F81F674C9000F794BB /* MGLComputedShapeSource.mm in Sources */,
- DAE6C3BA1CC31EF300DB3429 /* MGLOpenGLLayer.mm in Sources */,
- DAE6C38A1CC31E2A00DB3429 /* MGLMultiPoint.mm in Sources */,
- DAE6C3961CC31E2A00DB3429 /* MGLTypes.m in Sources */,
- 4049C2AD1DB8020600B3F799 /* MGLPointCollection.mm in Sources */,
- DA35A2A61CC9EB2700E826B2 /* MGLCoordinateFormatter.m in Sources */,
- 352742821D4C243B00A1ECE6 /* MGLSource.mm in Sources */,
- DAE6C3881CC31E2A00DB3429 /* MGLMapCamera.mm in Sources */,
- DA6408D81DA4E5DA00908C90 /* MGLVectorStyleLayer.mm in Sources */,
- 1FF4858D2237235300F19727 /* MGLAttributedExpression.m in Sources */,
- DA8F25B31D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm in Sources */,
- DAE6C3911CC31E2A00DB3429 /* MGLPolygon.mm in Sources */,
- 35C6DF851E214C0400ACA483 /* MGLDistanceFormatter.m in Sources */,
- DAE6C39B1CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.m in Sources */,
- DAA998FC1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.mm in Sources */,
- DAE6C38F1CC31E2A00DB3429 /* MGLOfflineStorage.mm in Sources */,
- DAED38601D62CED700D7640F /* NSURL+MGLAdditions.m in Sources */,
- 35C5D84A1D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.mm in Sources */,
- DAE6C3951CC31E2A00DB3429 /* MGLTilePyramidOfflineRegion.mm in Sources */,
- DAE6C3851CC31E2A00DB3429 /* MGLAccountManager.m in Sources */,
- DA00FC8B1D5EEAC3009AABC8 /* MGLAttributionInfo.mm in Sources */,
- DAE6C3921CC31E2A00DB3429 /* MGLPolyline.mm in Sources */,
- 3527428A1D4C245800A1ECE6 /* MGLShapeSource.mm in Sources */,
- DAE6C3B51CC31EF300DB3429 /* MGLCompassCell.m in Sources */,
- DA8F25901D51CA600010E6B5 /* MGLRasterStyleLayer.mm in Sources */,
- DAD165751CF4CD7A001FF4B9 /* MGLShapeCollection.mm in Sources */,
- 92FC0AE6207CDD8D007B6B54 /* MGLShapeOfflineRegion.mm in Sources */,
- 35C5D8481D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.mm in Sources */,
- 5591AC6B2298361600FF9ADF /* MGLMapView+Impl.mm in Sources */,
- DA35A2AE1CCA091800E826B2 /* MGLCompassDirectionFormatter.m in Sources */,
- DACA8623201920BE00E9693A /* MGLRasterDEMSource.mm in Sources */,
- DA8F258C1D51CA540010E6B5 /* MGLLineStyleLayer.mm in Sources */,
- DA8F25941D51CA750010E6B5 /* MGLSymbolStyleLayer.mm in Sources */,
- 3529039C1D6C63B80002C7DF /* NSPredicate+MGLAdditions.mm in Sources */,
- DA8F25981D51CAC70010E6B5 /* MGLVectorTileSource.mm in Sources */,
- 352742A11D4C25BD00A1ECE6 /* MGLStyleValue.mm in Sources */,
- 3EA93BA38DBB4B814B6C1FCC /* MGLRendererConfiguration.mm in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- DAE6C32D1CC30DB200DB3429 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- DA35A2C21CCA9F4A00E826B2 /* MGLClockDirectionFormatterTests.m in Sources */,
- DAE6C3D41CC34C9900DB3429 /* MGLOfflineRegionTests.m in Sources */,
- DAE6C3D61CC34C9900DB3429 /* MGLStyleTests.mm in Sources */,
- 1F7454AB1ED1DDBD00021D39 /* MGLLightTest.mm in Sources */,
- 07A240941F675674002C8210 /* MGLComputedShapeSourceTests.m in Sources */,
- DAEDC4371D606291000224FF /* MGLAttributionButtonTests.m in Sources */,
- CA0B3C072329F7E700E4B493 /* MGLTestAssertionHandler.m in Sources */,
- DA695424215B1E6C002041A4 /* MGLMapCameraTests.m in Sources */,
- 920A3E591E6F859D00C16EFC /* MGLSourceQueryTests.m in Sources */,
- DA35A2B61CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m in Sources */,
- 35C6DF871E214C1800ACA483 /* MGLDistanceFormatterTests.m in Sources */,
- CAD9D0AC22A88A32001B25EE /* MGLResourceTests.mm in Sources */,
- DAE6C3D21CC34C9900DB3429 /* MGLGeometryTests.mm in Sources */,
- DA87A9A41DCACC5000810D09 /* MGLSymbolStyleLayerTests.mm in Sources */,
- 40E1601D1DF217D6005EA6D9 /* MGLStyleLayerTests.m in Sources */,
- 076171C5213A0DC200668A35 /* MGLMapViewTests.m in Sources */,
- 170A82BF201BDD1B00943087 /* MGLHeatmapStyleLayerTests.mm in Sources */,
- 1F95931B1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm in Sources */,
- DAF25721201902C100367EF5 /* MGLHillshadeStyleLayerTests.mm in Sources */,
- DA87A9A61DCACC5000810D09 /* MGLCircleStyleLayerTests.mm in Sources */,
- DA87A99E1DC9DC2100810D09 /* MGLPredicateTests.mm in Sources */,
- DD58A4C91D822C6700E1F038 /* MGLExpressionTests.mm in Sources */,
- CA0B3C092329FB4800E4B493 /* MGLOfflinePackTests.mm in Sources */,
- 170A82C4201FB6EC00943087 /* MGLHeatmapColorTests.mm in Sources */,
- 4031ACFC1E9EB3C100A3EA26 /* MGLMapViewDelegateIntegrationTests.swift in Sources */,
- CA8FBC0D21A4A74300D1203C /* MGLRendererConfigurationTests.mm in Sources */,
- 4031AD031E9FD6AA00A3EA26 /* MGLSDKTestHelpers.swift in Sources */,
- DA87A9A71DCACC5000810D09 /* MGLBackgroundStyleLayerTests.mm in Sources */,
- DAA999011E9F5EC5002E6EA6 /* MGLFillExtrusionStyleLayerTests.mm in Sources */,
- DA29875A1E1A4290002299F5 /* MGLDocumentationExampleTests.swift in Sources */,
- 07BA4CAC1EE21887004528F5 /* MGLImageSourceTests.m in Sources */,
- DA87A9A51DCACC5000810D09 /* MGLLineStyleLayerTests.mm in Sources */,
- DA87A9A31DCACC5000810D09 /* MGLRasterStyleLayerTests.mm in Sources */,
- CA9461A620884CCB0015EB12 /* MGLAnnotationTests.m in Sources */,
- DA87A9991DC9D88400810D09 /* MGLTileSetTests.mm in Sources */,
- DA35A2A81CC9F41600E826B2 /* MGLCoordinateFormatterTests.m in Sources */,
- DAE7DEC41E24549F007505A6 /* MGLNSStringAdditionsTests.m in Sources */,
- DA87A9981DC9D88400810D09 /* MGLShapeSourceTests.mm in Sources */,
- 55E2AD111E5B0A6900E8C587 /* MGLOfflineStorageTests.mm in Sources */,
- 3526EABD1DF9B19800006B43 /* MGLCodingTests.mm in Sources */,
- DA87A9A21DC9DCF100810D09 /* MGLFillStyleLayerTests.mm in Sources */,
- DA57D4B11EBC699800793288 /* MGLDocumentationGuideTests.swift in Sources */,
- DAEDC4321D6033F1000224FF /* MGLAttributionInfoTests.m in Sources */,
- DA0CD58E1CF56F5800A5F5A5 /* MGLFeatureTests.mm in Sources */,
- 556660D61E1D07E400E2C41B /* MGLVersionNumber.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- DAE6C3341CC30DB200DB3429 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = DAE6C3271CC30DB200DB3429 /* dynamic */;
- targetProxy = DAE6C3331CC30DB200DB3429 /* PBXContainerItemProxy */;
- };
- DAE6C33C1CC30DB200DB3429 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = DAE6C3271CC30DB200DB3429 /* dynamic */;
- targetProxy = DAE6C33B1CC30DB200DB3429 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- 96E027331E57C9A7004B8E66 /* Localizable.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 96E027321E57C9A7004B8E66 /* Base */,
- 96E027341E57C9A9004B8E66 /* zh-Hans */,
- 96E027351E57C9AB004B8E66 /* zh-Hant */,
- 96E027361E57C9AC004B8E66 /* de */,
- 96E027371E57C9B5004B8E66 /* fr */,
- 96E027381E57C9B7004B8E66 /* ja */,
- 96E027391E57C9B9004B8E66 /* sv */,
- 96E0273A1E57C9BB004B8E66 /* vi */,
- 96E0273B1E57C9BC004B8E66 /* pt-BR */,
- 966091701E5BBFF700A9A03B /* es */,
- 966091711E5BBFF900A9A03B /* pl */,
- 966091721E5BBFFA00A9A03B /* uk */,
- 966091731E5BBFFA00A9A03B /* lt */,
- DA618B131E68850300CB7F44 /* ru */,
- DA618B161E6886E000CB7F44 /* ca */,
- DA618B271E68926E00CB7F44 /* fi */,
- DAE8CCAB1E6E8B72009B5CB0 /* nl */,
- DA704CBE1F637531004B3F28 /* hu */,
- DA3389611FA3EDCE001EA329 /* bg */,
- DA80E95D1FE84A300065FC9B /* ar */,
- DACBC6082011885800C4D7E2 /* he */,
- DAD88E03202ACF5900AAA536 /* da */,
- DA934097208562590059919A /* pt-PT */,
- DAFEB3702093ACBF00A86A83 /* ko */,
- 1FDB00CC21F8F1FD00D21389 /* cs */,
- DAE9ED53223897C400C01291 /* gl */,
- );
- name = Localizable.strings;
- sourceTree = "<group>";
- };
- DA839E9E1CC2E3400062CAFB /* MapDocument.xib */ = {
- isa = PBXVariantGroup;
- children = (
- DA839E9F1CC2E3400062CAFB /* Base */,
- );
- name = MapDocument.xib;
- sourceTree = "<group>";
- };
- DA839EA31CC2E3400062CAFB /* MainMenu.xib */ = {
- isa = PBXVariantGroup;
- children = (
- DA839EA41CC2E3400062CAFB /* Base */,
- );
- name = MainMenu.xib;
- sourceTree = "<group>";
- };
- DA8933A71CCD287300E68420 /* MGLAnnotationCallout.xib */ = {
- isa = PBXVariantGroup;
- children = (
- DA8933A61CCD287300E68420 /* Base */,
- );
- name = MGLAnnotationCallout.xib;
- sourceTree = "<group>";
- };
- DA8933AB1CCD290700E68420 /* Localizable.strings */ = {
- isa = PBXVariantGroup;
- children = (
- DA8933AC1CCD290700E68420 /* Base */,
- DA88520F1E0A4D0D009D7AD6 /* zh-Hans */,
- DAFBD0D51E3FA969000CD6BF /* zh-Hant */,
- DAA32CA61E4C4849006F8D24 /* de */,
- DAA32CAF1E4C4B0D006F8D24 /* fr */,
- DAA32CB31E4C4CC3006F8D24 /* ja */,
- DAA32CBA1E4C4F10006F8D24 /* sv */,
- DAA32CC11E4C4F93006F8D24 /* vi */,
- DA9C01311E4C7B9F00C4742A /* pt-BR */,
- DA737ADF1E5914D300AD2CDE /* es */,
- DA737AE41E5915B000AD2CDE /* pl */,
- DA737AEC1E59180E00AD2CDE /* uk */,
- DA1AC01E1E5B8826006DF1D6 /* lt */,
- DA618B141E68852C00CB7F44 /* ru */,
- DA618B181E6887C600CB7F44 /* ca */,
- DA618B2A1E6892B500CB7F44 /* fi */,
- DAE8CCAC1E6E8B8D009B5CB0 /* nl */,
- DA704CBF1F637548004B3F28 /* hu */,
- DA3389641FA3EE00001EA329 /* bg */,
- DACBC60A2011889E00C4D7E2 /* he */,
- DAD88E06202ACF9200AAA536 /* da */,
- DA9340992085629E0059919A /* pt-PT */,
- DA9340A0208565870059919A /* ar */,
- 1FDB00CD21F8F1FF00D21389 /* cs */,
- DAE9ED56223898CF00C01291 /* gl */,
- );
- name = Localizable.strings;
- sourceTree = "<group>";
- };
- DA8933B31CCD2C2500E68420 /* Foundation.strings */ = {
- isa = PBXVariantGroup;
- children = (
- DA8933B41CCD2C2500E68420 /* Base */,
- DA8852101E0A4D3A009D7AD6 /* zh-Hans */,
- DAFBD0D61E3FA983000CD6BF /* zh-Hant */,
- DAA32CA71E4C486D006F8D24 /* de */,
- DAA32CB21E4C4CB7006F8D24 /* ja */,
- DAA32CC01E4C4F89006F8D24 /* vi */,
- DA6023EF1E4CE8E500DBFF23 /* sv */,
- DA618B171E68876C00CB7F44 /* ca */,
- DA618B231E6891ED00CB7F44 /* lt */,
- DAE9E0F21EB7BF39001E8E8B /* es */,
- DACCD9C71F1F443B00BB09A1 /* fr */,
- DA704CBA1F6372E8004B3F28 /* ru */,
- DA704CC61F666385004B3F28 /* uk */,
- DA3389601FA3EAC4001EA329 /* pt-BR */,
- DA3389621FA3EDEF001EA329 /* bg */,
- DACBC6092011888C00C4D7E2 /* he */,
- DAD88E04202ACF7C00AAA536 /* da */,
- DAFEB3722093ACDA00A86A83 /* ko */,
- DAE9ED54223897ED00C01291 /* gl */,
- );
- name = Foundation.strings;
- sourceTree = "<group>";
- };
- DA8933B61CCD2C2D00E68420 /* Foundation.stringsdict */ = {
- isa = PBXVariantGroup;
- children = (
- DA8933B71CCD2C2D00E68420 /* en */,
- DAA32CA81E4C48B9006F8D24 /* de */,
- DAA32CAE1E4C4B03006F8D24 /* fr */,
- DA9C01301E4C7B9300C4742A /* pt-BR */,
- DA6023F01E4CE8FF00DBFF23 /* sv */,
- DA737ADE1E5914AD00AD2CDE /* es */,
- DA737AE31E5915A500AD2CDE /* pl */,
- DA1AC01F1E5B8904006DF1D6 /* uk */,
- DAE8CCAA1E6E8605009B5CB0 /* ru */,
- DA618B151E6886DF00CB7F44 /* ca */,
- DA618B241E6891F300CB7F44 /* lt */,
- DACFE7971F66EA0C00630DA8 /* vi */,
- DA3389631FA3EDF5001EA329 /* bg */,
- DA33896C1FA3EF51001EA329 /* hu */,
- DA80E95F1FE84A540065FC9B /* ar */,
- DAD88E05202ACF8200AAA536 /* da */,
- DA934098208562870059919A /* pt-PT */,
- DAFEB3732093ACE400A86A83 /* ko */,
- DAE9ED55223898B200C01291 /* gl */,
- );
- name = Foundation.stringsdict;
- sourceTree = "<group>";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- DA839EA71CC2E3400062CAFB /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "-";
- COPY_PHASE_STRIP = NO;
- CURRENT_COMMIT_HASH = deadbeef;
- CURRENT_SEMANTIC_VERSION = 1.0.0;
- CURRENT_SHORT_VERSION = 1.0;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_ENABLE_CPP_RTTI = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
- GCC_WARN_SHADOW = YES;
- GCC_WARN_SIGN_COMPARE = YES;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNKNOWN_PRAGMAS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_LABEL = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SYMROOT = "$(PROJECT_DIR)/cmake";
- };
- name = Debug;
- };
- DA839EA81CC2E3400062CAFB /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "-";
- COPY_PHASE_STRIP = NO;
- CURRENT_COMMIT_HASH = deadbeef;
- CURRENT_SEMANTIC_VERSION = 1.0.0;
- CURRENT_SHORT_VERSION = 1.0;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_ENABLE_CPP_RTTI = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_PREPROCESSOR_DEFINITIONS = "NDEBUG=1";
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
- GCC_WARN_SHADOW = YES;
- GCC_WARN_SIGN_COMPARE = YES;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNKNOWN_PRAGMAS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_LABEL = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
- MTL_ENABLE_DEBUG_INFO = NO;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- SYMROOT = "$(PROJECT_DIR)/cmake";
- };
- name = Release;
- };
- DA839EAA1CC2E3400062CAFB /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- COMBINE_HIDPI_IMAGES = YES;
- INFOPLIST_FILE = "$(SRCROOT)/app/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
- OTHER_CFLAGS = "-fvisibility=hidden";
- PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxGL;
- PRODUCT_NAME = "Mapbox GL";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 4.0;
- };
- name = Debug;
- };
- DA839EAB1CC2E3400062CAFB /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- COMBINE_HIDPI_IMAGES = YES;
- INFOPLIST_FILE = "$(SRCROOT)/app/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
- OTHER_CFLAGS = "-fvisibility=hidden";
- PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxGL;
- PRODUCT_NAME = "Mapbox GL";
- SWIFT_VERSION = 4.0;
- };
- name = Release;
- };
- DAAA17971CE13BAE00731EFE /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- DEBUGGING_SYMBOLS = YES;
- DEBUG_INFORMATION_FORMAT = dwarf;
- GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- OTHER_CFLAGS = "";
- OTHER_LDFLAGS = "";
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Debug;
- };
- DAAA17981CE13BAE00731EFE /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- OTHER_CFLAGS = "";
- OTHER_LDFLAGS = "";
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Release;
- };
- DAE6C33F1CC30DB200DB3429 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 55FE0E8D1D100A0900FD240B /* config.xcconfig */;
- buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- FRAMEWORK_VERSION = A;
- HEADER_SEARCH_PATHS = (
- "$(mbgl_core_INCLUDE_DIRECTORIES)",
- "$(mbgl_filesource_INCLUDE_DIRECTORIES)",
- );
- INFOPLIST_FILE = "$(SRCROOT)/sdk/Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
- OTHER_CFLAGS = "-fvisibility=hidden";
- OTHER_LDFLAGS = (
- "$(mbgl_core_LINK_LIBRARIES)",
- "$(mbgl_filesource_LINK_LIBRARIES)",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.Mapbox;
- PRODUCT_NAME = Mapbox;
- SKIP_INSTALL = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "__attribute__((visibility (\"default\"))) ";
- };
- name = Debug;
- };
- DAE6C3401CC30DB200DB3429 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 55FE0E8D1D100A0900FD240B /* config.xcconfig */;
- buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEAD_CODE_STRIPPING = YES;
- DEFINES_MODULE = YES;
- DEPLOYMENT_POSTPROCESSING = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- FRAMEWORK_VERSION = A;
- HEADER_SEARCH_PATHS = (
- "$(mbgl_core_INCLUDE_DIRECTORIES)",
- "$(mbgl_filesource_INCLUDE_DIRECTORIES)",
- );
- INFOPLIST_FILE = "$(SRCROOT)/sdk/Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
- LLVM_LTO = YES;
- OTHER_CFLAGS = "-fvisibility=hidden";
- OTHER_LDFLAGS = (
- "$(mbgl_core_LINK_LIBRARIES)",
- "$(mbgl_filesource_LINK_LIBRARIES)",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.Mapbox;
- PRODUCT_NAME = Mapbox;
- SKIP_INSTALL = YES;
- STRIP_STYLE = "non-global";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "__attribute__((visibility (\"default\"))) ";
- };
- name = Release;
- };
- DAE6C3411CC30DB200DB3429 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 55FE0E8D1D100A0900FD240B /* config.xcconfig */;
- buildSettings = {
- CLANG_ENABLE_MODULES = YES;
- COMBINE_HIDPI_IMAGES = YES;
- HEADER_SEARCH_PATHS = (
- "$(mbgl_core_INCLUDE_DIRECTORIES)",
- "$(mbgl_filesource_INCLUDE_DIRECTORIES)",
- );
- INFOPLIST_FILE = test/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/cmake/Debug",
- );
- OTHER_CFLAGS = "-fvisibility=hidden";
- OTHER_CPLUSPLUSFLAGS = (
- "$(OTHER_CFLAGS)",
- "$(variant_cflags)",
- "$(geometry_cflags)",
- "$(geojson_cflags)",
- );
- OTHER_LDFLAGS = (
- "$(mbgl_core_LINK_LIBRARIES)",
- "$(mbgl_filesource_LINK_LIBRARIES)",
- );
- OTHER_SWIFT_FLAGS = "-warnings-as-errors";
- PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.test;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_OBJC_BRIDGING_HEADER = "../darwin/test/test-Bridging-Header.h";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 4.0;
- };
- name = Debug;
- };
- DAE6C3421CC30DB200DB3429 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 55FE0E8D1D100A0900FD240B /* config.xcconfig */;
- buildSettings = {
- CLANG_ENABLE_MODULES = YES;
- COMBINE_HIDPI_IMAGES = YES;
- HEADER_SEARCH_PATHS = (
- "$(mbgl_core_INCLUDE_DIRECTORIES)",
- "$(mbgl_filesource_INCLUDE_DIRECTORIES)",
- );
- INFOPLIST_FILE = test/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
- OTHER_CFLAGS = "-fvisibility=hidden";
- OTHER_CPLUSPLUSFLAGS = (
- "$(OTHER_CFLAGS)",
- "$(variant_cflags)",
- "$(geometry_cflags)",
- "$(geojson_cflags)",
- );
- OTHER_LDFLAGS = (
- "$(mbgl_core_LINK_LIBRARIES)",
- "$(mbgl_filesource_LINK_LIBRARIES)",
- );
- OTHER_SWIFT_FLAGS = "-warnings-as-errors";
- PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.test;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_OBJC_BRIDGING_HEADER = "../darwin/test/test-Bridging-Header.h";
- SWIFT_VERSION = 4.0;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- DA839E8D1CC2E3400062CAFB /* Build configuration list for PBXProject "macos" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- DA839EA71CC2E3400062CAFB /* Debug */,
- DA839EA81CC2E3400062CAFB /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- DA839EA91CC2E3400062CAFB /* Build configuration list for PBXNativeTarget "macosapp" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- DA839EAA1CC2E3400062CAFB /* Debug */,
- DA839EAB1CC2E3400062CAFB /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- DAAA17991CE13BAE00731EFE /* Build configuration list for PBXLegacyTarget "docs" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- DAAA17971CE13BAE00731EFE /* Debug */,
- DAAA17981CE13BAE00731EFE /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- DAE6C3431CC30DB200DB3429 /* Build configuration list for PBXNativeTarget "dynamic" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- DAE6C33F1CC30DB200DB3429 /* Debug */,
- DAE6C3401CC30DB200DB3429 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- DAE6C3441CC30DB200DB3429 /* Build configuration list for PBXNativeTarget "test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- DAE6C3411CC30DB200DB3429 /* Debug */,
- DAE6C3421CC30DB200DB3429 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = DA839E8A1CC2E3400062CAFB /* Project object */;
-}
diff --git a/platform/macos/macos.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/platform/macos/macos.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index f2c779de46..0000000000
--- a/platform/macos/macos.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
- version = "1.0">
- <FileRef
- location = "self:/Users/mxn/hub/mapbox-gl-native/platform/macos/macos.xcodeproj">
- </FileRef>
-</Workspace>
diff --git a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/CI.xcscheme b/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/CI.xcscheme
deleted file mode 100644
index cfb1eca382..0000000000
--- a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/CI.xcscheme
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
- LastUpgradeVersion = "0930"
- version = "1.3">
- <BuildAction
- parallelizeBuildables = "YES"
- buildImplicitDependencies = "YES">
- <BuildActionEntries>
- <BuildActionEntry
- buildForTesting = "YES"
- buildForRunning = "YES"
- buildForProfiling = "YES"
- buildForArchiving = "YES"
- buildForAnalyzing = "YES">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "4E8A9455A3A23B7FD2A8FC52"
- BuildableName = "All"
- BlueprintName = "All"
- ReferencedContainer = "container:../../build/macos/platform/macos/platform.xcodeproj">
- </BuildableReference>
- </BuildActionEntry>
- <BuildActionEntry
- buildForTesting = "YES"
- buildForRunning = "YES"
- buildForProfiling = "YES"
- buildForArchiving = "YES"
- buildForAnalyzing = "YES">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DA839E911CC2E3400062CAFB"
- BuildableName = "Mapbox GL.app"
- BlueprintName = "macosapp"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </BuildActionEntry>
- <BuildActionEntry
- buildForTesting = "YES"
- buildForRunning = "NO"
- buildForProfiling = "NO"
- buildForArchiving = "NO"
- buildForAnalyzing = "NO">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DAE6C3301CC30DB200DB3429"
- BuildableName = "test.xctest"
- BlueprintName = "test"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </BuildActionEntry>
- <BuildActionEntry
- buildForTesting = "YES"
- buildForRunning = "YES"
- buildForProfiling = "YES"
- buildForArchiving = "YES"
- buildForAnalyzing = "YES">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "9771D7F76DA54F52A89268C6"
- BuildableName = "mbgl-test"
- BlueprintName = "mbgl-test"
- ReferencedContainer = "container:../../build/macos/mbgl.xcodeproj">
- </BuildableReference>
- </BuildActionEntry>
- <BuildActionEntry
- buildForTesting = "NO"
- buildForRunning = "NO"
- buildForProfiling = "NO"
- buildForArchiving = "NO"
- buildForAnalyzing = "NO">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "D87DA13F4A80489CB4508EBD"
- BuildableName = "mbgl-benchmark"
- BlueprintName = "mbgl-benchmark"
- ReferencedContainer = "container:../../build/macos/mbgl.xcodeproj">
- </BuildableReference>
- </BuildActionEntry>
- </BuildActionEntries>
- </BuildAction>
- <TestAction
- buildConfiguration = "Debug"
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- shouldUseLaunchSchemeArgsEnv = "YES"
- language = "en"
- region = "US">
- <MacroExpansion>
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DA839E911CC2E3400062CAFB"
- BuildableName = "Mapbox GL.app"
- BlueprintName = "macosapp"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </MacroExpansion>
- <Testables>
- <TestableReference
- skipped = "NO">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DAE6C3301CC30DB200DB3429"
- BuildableName = "test.xctest"
- BlueprintName = "test"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </TestableReference>
- </Testables>
- </TestAction>
- <LaunchAction
- buildConfiguration = "Debug"
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- launchStyle = "0"
- useCustomWorkingDirectory = "NO"
- ignoresPersistentStateOnLaunch = "NO"
- debugDocumentVersioning = "YES"
- debugServiceExtension = "internal"
- allowLocationSimulation = "YES">
- <MacroExpansion>
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DA839E911CC2E3400062CAFB"
- BuildableName = "Mapbox GL.app"
- BlueprintName = "macosapp"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </MacroExpansion>
- </LaunchAction>
- <ProfileAction
- buildConfiguration = "Release"
- shouldUseLaunchSchemeArgsEnv = "YES"
- savedToolIdentifier = ""
- useCustomWorkingDirectory = "NO"
- debugDocumentVersioning = "YES">
- <BuildableProductRunnable
- runnableDebuggingMode = "0">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DA839E911CC2E3400062CAFB"
- BuildableName = "Mapbox GL.app"
- BlueprintName = "macosapp"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </BuildableProductRunnable>
- </ProfileAction>
- <AnalyzeAction
- buildConfiguration = "Debug">
- </AnalyzeAction>
- <ArchiveAction
- buildConfiguration = "Release"
- revealArchiveInOrganizer = "YES">
- </ArchiveAction>
-</Scheme>
diff --git a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme b/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme
deleted file mode 100644
index 55a36344d5..0000000000
--- a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
- LastUpgradeVersion = "0930"
- version = "1.3">
- <BuildAction
- parallelizeBuildables = "YES"
- buildImplicitDependencies = "YES">
- <BuildActionEntries>
- <BuildActionEntry
- buildForTesting = "YES"
- buildForRunning = "YES"
- buildForProfiling = "YES"
- buildForArchiving = "YES"
- buildForAnalyzing = "YES">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DAE6C3271CC30DB200DB3429"
- BuildableName = "Mapbox.framework"
- BlueprintName = "dynamic"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </BuildActionEntry>
- <BuildActionEntry
- buildForTesting = "YES"
- buildForRunning = "NO"
- buildForProfiling = "NO"
- buildForArchiving = "NO"
- buildForAnalyzing = "NO">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DAE6C3301CC30DB200DB3429"
- BuildableName = "test.xctest"
- BlueprintName = "test"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </BuildActionEntry>
- </BuildActionEntries>
- </BuildAction>
- <TestAction
- buildConfiguration = "Debug"
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- shouldUseLaunchSchemeArgsEnv = "YES"
- language = "en"
- region = "US">
- <MacroExpansion>
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DAE6C3271CC30DB200DB3429"
- BuildableName = "Mapbox.framework"
- BlueprintName = "dynamic"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </MacroExpansion>
- <Testables>
- <TestableReference
- skipped = "NO">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DAE6C3301CC30DB200DB3429"
- BuildableName = "test.xctest"
- BlueprintName = "test"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </TestableReference>
- </Testables>
- </TestAction>
- <LaunchAction
- buildConfiguration = "Debug"
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- launchStyle = "0"
- useCustomWorkingDirectory = "NO"
- ignoresPersistentStateOnLaunch = "NO"
- debugDocumentVersioning = "YES"
- debugServiceExtension = "internal"
- allowLocationSimulation = "YES">
- <MacroExpansion>
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DAE6C3271CC30DB200DB3429"
- BuildableName = "Mapbox.framework"
- BlueprintName = "dynamic"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </MacroExpansion>
- </LaunchAction>
- <ProfileAction
- buildConfiguration = "Release"
- shouldUseLaunchSchemeArgsEnv = "YES"
- savedToolIdentifier = ""
- useCustomWorkingDirectory = "NO"
- debugDocumentVersioning = "YES">
- <MacroExpansion>
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DAE6C3271CC30DB200DB3429"
- BuildableName = "Mapbox.framework"
- BlueprintName = "dynamic"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </MacroExpansion>
- </ProfileAction>
- <AnalyzeAction
- buildConfiguration = "Debug">
- </AnalyzeAction>
- <ArchiveAction
- buildConfiguration = "Release"
- revealArchiveInOrganizer = "YES">
- </ArchiveAction>
-</Scheme>
diff --git a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/macosapp.xcscheme b/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/macosapp.xcscheme
deleted file mode 100644
index 98e6c54a33..0000000000
--- a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/macosapp.xcscheme
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
- LastUpgradeVersion = "0930"
- version = "1.3">
- <BuildAction
- parallelizeBuildables = "YES"
- buildImplicitDependencies = "YES">
- <BuildActionEntries>
- <BuildActionEntry
- buildForTesting = "YES"
- buildForRunning = "YES"
- buildForProfiling = "YES"
- buildForArchiving = "YES"
- buildForAnalyzing = "YES">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DA839E911CC2E3400062CAFB"
- BuildableName = "Mapbox GL.app"
- BlueprintName = "macosapp"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </BuildActionEntry>
- </BuildActionEntries>
- </BuildAction>
- <TestAction
- buildConfiguration = "Debug"
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- shouldUseLaunchSchemeArgsEnv = "YES"
- language = "en"
- region = "US">
- <MacroExpansion>
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DA839E911CC2E3400062CAFB"
- BuildableName = "Mapbox GL.app"
- BlueprintName = "macosapp"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </MacroExpansion>
- <Testables>
- <TestableReference
- skipped = "NO">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DAE6C3301CC30DB200DB3429"
- BuildableName = "test.xctest"
- BlueprintName = "test"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </TestableReference>
- </Testables>
- </TestAction>
- <LaunchAction
- buildConfiguration = "Debug"
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- launchStyle = "0"
- useCustomWorkingDirectory = "NO"
- ignoresPersistentStateOnLaunch = "NO"
- debugDocumentVersioning = "YES"
- debugServiceExtension = "internal"
- allowLocationSimulation = "YES">
- <BuildableProductRunnable
- runnableDebuggingMode = "0">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DA839E911CC2E3400062CAFB"
- BuildableName = "Mapbox GL.app"
- BlueprintName = "macosapp"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </BuildableProductRunnable>
- </LaunchAction>
- <ProfileAction
- buildConfiguration = "Release"
- shouldUseLaunchSchemeArgsEnv = "YES"
- savedToolIdentifier = ""
- useCustomWorkingDirectory = "NO"
- debugDocumentVersioning = "YES">
- <BuildableProductRunnable
- runnableDebuggingMode = "0">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "DA839E911CC2E3400062CAFB"
- BuildableName = "Mapbox GL.app"
- BlueprintName = "macosapp"
- ReferencedContainer = "container:macos.xcodeproj">
- </BuildableReference>
- </BuildableProductRunnable>
- </ProfileAction>
- <AnalyzeAction
- buildConfiguration = "Debug">
- </AnalyzeAction>
- <ArchiveAction
- buildConfiguration = "Release"
- revealArchiveInOrganizer = "YES">
- </ArchiveAction>
-</Scheme>
diff --git a/platform/macos/macos.xcworkspace/contents.xcworkspacedata b/platform/macos/macos.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 65341f19fa..0000000000
--- a/platform/macos/macos.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
- version = "1.0">
- <FileRef
- location = "container:macos.xcodeproj">
- </FileRef>
- <FileRef
- location = "group:../../build/macos/mbgl.xcodeproj">
- </FileRef>
-</Workspace>
diff --git a/platform/macos/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/platform/macos/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d981003d..0000000000
--- a/platform/macos/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>IDEDidComputeMac32BitWarning</key>
- <true/>
-</dict>
-</plist>
diff --git a/platform/macos/macos.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist b/platform/macos/macos.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist
deleted file mode 100644
index cb6ecad738..0000000000
--- a/platform/macos/macos.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Bucket
- type = "3"
- version = "2.0">
- <Breakpoints>
- <BreakpointProxy
- BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
- <BreakpointContent
- shouldBeEnabled = "No"
- ignoreCount = "0"
- continueAfterRunningActions = "No"
- scope = "1"
- stopOnStyle = "0">
- <Actions>
- <BreakpointActionProxy
- ActionExtensionID = "Xcode.BreakpointAction.Sound">
- <ActionContent
- soundName = "Basso">
- </ActionContent>
- </BreakpointActionProxy>
- </Actions>
- </BreakpointContent>
- </BreakpointProxy>
- </Breakpoints>
-</Bucket>
diff --git a/platform/macos/scripts/deploy-packages.sh b/platform/macos/scripts/deploy-packages.sh
deleted file mode 100755
index bb90f3a8b0..0000000000
--- a/platform/macos/scripts/deploy-packages.sh
+++ /dev/null
@@ -1,144 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-set -o pipefail
-set -u
-
-# dynamic environment variables:
-# VERSION_TAG={determined automatically}: Version tag in format macos-vX.X.X-pre.X
-# GITHUB_RELEASE=true: Upload to github
-# BINARY_DIRECTORY=build/macos/deploy: Directory in which to save test packages
-
-# environment variables and dependencies:
-# - You must run "mbx auth ..." before running
-# - Set GITHUB_TOKEN to a GitHub API access token in your environment to use GITHUB_RELEASE
-# - "wget" is required for downloading the zip files from s3
-# - The "github-release" command is required to use GITHUB_RELEASE
-
-function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; }
-function finish { >&2 echo -en "\033[0m"; }
-trap finish EXIT
-
-publish() {
- OPTRESET=1
- OPTIND=
- local arg
- local rule=
- local suffix=
- local app=
- while getopts 'r:s:a:' arg; do
- case ${arg} in
- r) rule=${OPTARG};;
- s) suffix=${OPTARG};;
- a) app=${OPTARG};;
- *) "Usage: [-r rule] [-s suffix] [-a app]"; return
- esac
- done
-
- step "Building: make ${rule} ${suffix}"
- make ${rule}
- step "Publishing ${rule} with ${suffix}"
- local file_name=""
- if [ -z ${suffix} ]
- then
- file_name=mapbox-macos-sdk-${PUBLISH_VERSION}.zip
- else
- file_name=mapbox-macos-sdk-${PUBLISH_VERSION}-${suffix}.zip
- fi
- step "Compressing ${file_name}…"
- cd build/macos/pkg
- rm -f ../deploy/${file_name}
- zip -yr ../deploy/${file_name} *
- cd -
- if [[ "${GITHUB_RELEASE}" == true ]]; then
- echo "Uploading ${file_name} to GitHub"
- github-release upload \
- --tag "macos-v${PUBLISH_VERSION}" \
- --name ${file_name} \
- --file "${BINARY_DIRECTORY}/${file_name}" > /dev/null
- fi
- if [ ${app} ]; then
- file_name="Mapbox GL.app.zip"
- step "Compressing ${file_name}…"
- cd build/macos/app
- rm -f "${file_name}"
- zip -yr "../deploy/${file_name}" 'Mapbox GL.app'
- cd -
- if [[ "${GITHUB_RELEASE}" == true ]]; then
- echo "Uploading ${file_name} to GitHub"
- github-release upload \
- --tag "macos-v${PUBLISH_VERSION}" \
- --name "${file_name}" \
- --file "${BINARY_DIRECTORY}/${file_name}" > /dev/null
- fi
- fi
-}
-
-export GITHUB_USER=mapbox
-export GITHUB_REPO=mapbox-gl-native
-export BUILDTYPE=Release
-
-VERSION_TAG=${VERSION_TAG:-''}
-PUBLISH_VERSION=
-BINARY_DIRECTORY=${BINARY_DIRECTORY:-build/macos/deploy}
-GITHUB_RELEASE=${GITHUB_RELEASE:-true}
-PUBLISH_PRE_FLAG=''
-
-if [[ ${GITHUB_RELEASE} = "true" ]]; then
- GITHUB_RELEASE=true # Assign bool, not just a string
-
- if [[ -z `which github-release` ]]; then
- step "Installing github-release…"
- brew install github-release
- if [ -z `which github-release` ]; then
- echo "Unable to install github-release. See: https://github.com/aktau/github-release"
- exit 1
- fi
- fi
-fi
-
-if [[ -z ${VERSION_TAG} ]]; then
- step "Determining version number from most recent relevant git tag…"
- VERSION_TAG=$( git describe --tags --match=macos-v*.*.* --abbrev=0 )
- echo "Found tag: ${VERSION_TAG}"
-fi
-
-if [[ $( echo ${VERSION_TAG} | grep --invert-match macos-v ) ]]; then
- echo "Error: ${VERSION_TAG} is not a valid macOS version tag"
- echo "VERSION_TAG should be in format: macos-vX.X.X-pre.X"
- exit 1
-fi
-
-if [[ $( wget --spider -O- https://api.github.com/repos/${GITHUB_USER}/${GITHUB_REPO}/releases/tags/${VERSION_TAG} 2>&1 | grep -c "404 Not Found" ) == 0 ]]; then
- echo "Error: ${VERSION_TAG} has already been published on GitHub"
- echo "See: https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/tag/${VERSION_TAG}"
- exit 1
-fi
-
-PUBLISH_VERSION=$( echo ${VERSION_TAG} | sed 's/^macos-v//' )
-git checkout ${VERSION_TAG}
-
-step "Deploying version ${PUBLISH_VERSION}…"
-
-if [[ ${#} -eq 3 && $3 == "-g" ]]; then
- GITHUB_RELEASE=true
-fi
-
-make clean && make distclean
-mkdir -p ${BINARY_DIRECTORY}
-
-if [[ "${GITHUB_RELEASE}" == true ]]; then
- step "Create GitHub release…"
- if [[ $( echo ${PUBLISH_VERSION} | awk '/[0-9]-/' ) ]]; then
- PUBLISH_PRE_FLAG='--pre-release'
- fi
- github-release release \
- --tag "macos-v${PUBLISH_VERSION}" \
- --name "macos-v${PUBLISH_VERSION}" \
- --draft ${PUBLISH_PRE_FLAG}
-fi
-
-publish -r xpackage -s symbols
-publish -r "xpackage SYMBOLS=NO" -a true
-
-step "Finished deploying ${PUBLISH_VERSION} in $(($SECONDS / 60)) minutes and $(($SECONDS % 60)) seconds"
diff --git a/platform/macos/scripts/document.sh b/platform/macos/scripts/document.sh
deleted file mode 100755
index 8d8d1c7bf2..0000000000
--- a/platform/macos/scripts/document.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-set -o pipefail
-set -u
-
-if [ -z `which jazzy` ]; then
- echo "Installing jazzy…"
- gem install jazzy
- if [ -z `which jazzy` ]; then
- echo "Unable to install jazzy. See https://github.com/mapbox/mapbox-gl-native/blob/master/platform/macos/INSTALL.md"
- exit 1
- fi
-fi
-
-OUTPUT=${OUTPUT:-documentation}
-
-BRANCH=$( git describe --tags --match=macos-v*.*.* --abbrev=0 )
-SHORT_VERSION=$( echo ${BRANCH} | sed 's/^macos-v//' )
-RELEASE_VERSION=$( echo ${SHORT_VERSION} | sed -e 's/^macos-v//' -e 's/-.*//' )
-
-rm -rf /tmp/mbgl
-mkdir -p /tmp/mbgl/
-README=/tmp/mbgl/README.md
-if [[ ${STANDALONE:-} ]]; then
- cp platform/macos/docs/pod-README.md "${README}"
- perl -pi -e 's|https://raw.githubusercontent.com/mapbox/mapbox-gl-native/master/platform/macos/docs/||' \
- "${README}"
-else
- cp platform/macos/docs/doc-README.md "${README}"
-fi
-# http://stackoverflow.com/a/4858011/4585461
-echo "## Changes in [version ${RELEASE_VERSION}](https://github.com/mapbox/mapbox-gl-native/releases/tag/${BRANCH})" >> "${README}"
-sed -n -e '/^## /{' -e ':a' -e 'n' -e '/^## /q' -e 'p' -e 'ba' -e '}' platform/macos/CHANGELOG.md >> "${README}"
-
-rm -rf ${OUTPUT}
-mkdir -p ${OUTPUT}
-
-cp -r platform/darwin/docs/img "${OUTPUT}"
-cp -r platform/macos/docs/img "${OUTPUT}"
-
-jazzy \
- --config platform/macos/jazzy.yml \
- --sdk macosx \
- --github-file-prefix https://github.com/mapbox/mapbox-gl-native/tree/${BRANCH} \
- --module-version ${SHORT_VERSION} \
- --readme ${README} \
- --documentation="platform/{darwin,macos}/docs/guides/*.md" \
- --theme platform/darwin/docs/theme \
- --output ${OUTPUT} \
- --title "Maps SDK for macOS" \
- --module-version ${SHORT_VERSION}
diff --git a/platform/macos/scripts/metrics.sh b/platform/macos/scripts/metrics.sh
deleted file mode 100755
index 91dfc60358..0000000000
--- a/platform/macos/scripts/metrics.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-set -o pipefail
-
-# Track individual architectures
-scripts/check_binary_size.js "build/macos/pkg/Mapbox.framework/Versions/Current/Mapbox" "macOS x86_64"
diff --git a/platform/macos/scripts/package.sh b/platform/macos/scripts/package.sh
deleted file mode 100755
index 407b116b06..0000000000
--- a/platform/macos/scripts/package.sh
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-set -o pipefail
-set -u
-
-NAME=Mapbox
-OUTPUT=build/macos/pkg
-APP_OUTPUT=build/macos/app
-DERIVED_DATA=build/macos
-
-BUILDTYPE=${BUILDTYPE:-Release}
-SYMBOLS=${SYMBOLS:-YES}
-PRODUCTS=${DERIVED_DATA}/${BUILDTYPE}
-
-function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; }
-function finish { >&2 echo -en "\033[0m"; }
-trap finish EXIT
-
-rm -rf ${OUTPUT} ${APP_OUTPUT}
-
-HASH=`git log | head -1 | awk '{ print $2 }' | cut -c 1-10` && true
-PROJ_VERSION=$(git rev-list --count HEAD)
-SEM_VERSION=$( git describe --tags --match=macos-v*.*.* --abbrev=0 | sed 's/^macos-v//' )
-SHORT_VERSION=${SEM_VERSION%-*}
-
-CI_XCCONFIG=''
-if [[ ! -z "${CI:=}" ]]; then
- xcconfig='platform/darwin/ci.xcconfig'
- echo "CI environment, using ${xcconfig}"
- CI_XCCONFIG="-xcconfig ./${xcconfig}"
-fi
-
-step "Building dynamic framework (build ${PROJ_VERSION}, version ${SEM_VERSION})…"
-xcodebuild \
- CURRENT_PROJECT_VERSION=${PROJ_VERSION} \
- CURRENT_SHORT_VERSION=${SHORT_VERSION} \
- CURRENT_SEMANTIC_VERSION=${SEM_VERSION} \
- CURRENT_COMMIT_HASH=${HASH} \
- ${CI_XCCONFIG} \
- -derivedDataPath ${DERIVED_DATA} \
- -archivePath "${APP_OUTPUT}/macosapp.xcarchive" \
- -workspace ./platform/macos/macos.xcworkspace \
- -scheme dynamic \
- -configuration ${BUILDTYPE} \
- -jobs ${JOBS} \
- build | xcpretty
-
-step "Copying dynamic framework into place"
-mkdir -p "${OUTPUT}/${NAME}.framework"
-ditto ${PRODUCTS}/${NAME}.framework "${OUTPUT}/${NAME}.framework"
-if [[ -e ${PRODUCTS}/${NAME}.framework.dSYM ]]; then
- cp -r ${PRODUCTS}/${NAME}.framework.dSYM "${OUTPUT}"
-fi
-
-step "Building and archiving Mapbox GL.app (build ${PROJ_VERSION}, version ${SEM_VERSION})…"
-if [[ ${BUILDTYPE} == Release ]]; then
- mkdir -p ${APP_OUTPUT}
- xcodebuild \
- CURRENT_PROJECT_VERSION=${PROJ_VERSION} \
- CURRENT_SHORT_VERSION=${SHORT_VERSION} \
- CURRENT_SEMANTIC_VERSION=${SEM_VERSION} \
- CURRENT_COMMIT_HASH=${HASH} \
- ${CI_XCCONFIG} \
- -derivedDataPath ${DERIVED_DATA} \
- -archivePath "${APP_OUTPUT}/macosapp.xcarchive" \
- -workspace ./platform/macos/macos.xcworkspace \
- -scheme macosapp \
- -configuration ${BUILDTYPE} \
- -jobs ${JOBS} \
- archive | xcpretty
-fi
-
-if [[ ${SYMBOLS} = NO ]]; then
- step "Stripping symbols from binaries"
- strip -Sx "${OUTPUT}/${NAME}.framework/${NAME}"
-fi
-
-function get_comparable_uuid {
- echo $(dwarfdump --uuid ${1} | sed -n 's/.*UUID:\([^\"]*\) .*/\1/p' | sort)
-}
-
-function validate_dsym {
- step "Validating dSYM and framework UUIDs…"
- DSYM_UUID=$(get_comparable_uuid "${1}")
- FRAMEWORK_UUID=$(get_comparable_uuid "${2}")
- echo -e "${1}\n ${DSYM_UUID}\n${2}\n ${FRAMEWORK_UUID}"
- if [[ ${DSYM_UUID} != ${FRAMEWORK_UUID} ]]; then
- echo "Error: dSYM and framework UUIDs do not match."
- exit 1
- fi
-}
-
-if [[ ${BUILDTYPE} == Release ]]; then
- validate_dsym \
- "${OUTPUT}/${NAME}.framework.dSYM/Contents/Resources/DWARF/${NAME}" \
- "${OUTPUT}/${NAME}.framework/${NAME}"
-
- step "Exporting Mapbox GL.app"
- xcodebuild \
- ${CI_XCCONFIG} \
- -exportArchive \
- -archivePath "${APP_OUTPUT}/macosapp.xcarchive" \
- -exportPath "${APP_OUTPUT}" \
- -exportOptionsPlist platform/macos/ExportOptions.plist
-fi
-
-function create_podspec {
- step "Creating local podspec…"
- [[ $SYMBOLS = YES ]] && POD_SUFFIX="-symbols" || POD_SUFFIX=""
- POD_SOURCE_PATH=' :path => ".",'
- POD_FRAMEWORKS=" m.vendored_frameworks = '"${NAME}".framework'"
- INPUT_PODSPEC=platform/macos/${NAME}-macOS-SDK${POD_SUFFIX}.podspec
- OUTPUT_PODSPEC=${OUTPUT}/${NAME}-macOS-SDK${POD_SUFFIX}.podspec
- sed "s/.*:http.*/${POD_SOURCE_PATH}/" ${INPUT_PODSPEC} > ${OUTPUT_PODSPEC}
- sed -i '' "s/.*vendored_frameworks.*/${POD_FRAMEWORKS}/" ${OUTPUT_PODSPEC}
-}
-
-create_podspec
-
-step "Copying library resources…"
-cp -pv LICENSE.md "${OUTPUT}"
-cp -pv platform/macos/docs/pod-README.md "${OUTPUT}/README.md"
-sed -n -e '/^## /,$p' platform/macos/CHANGELOG.md > "${OUTPUT}/CHANGELOG.md"
-
-step "Generating API documentation…"
-make xdocument OUTPUT="${OUTPUT}/documentation"
-
-step "Checking that all public symbols are exported…"
-node platform/darwin/scripts/check-public-symbols.js macOS
diff --git a/platform/macos/sdk/Base.lproj/Localizable.strings b/platform/macos/sdk/Base.lproj/Localizable.strings
deleted file mode 100644
index 68360320eb..0000000000
--- a/platform/macos/sdk/Base.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "The map failed to load because an unknown error occurred.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "The map failed to load because the style can't be loaded.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "The map failed to load because the style is corrupted.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "The map failed to load because the style can’t be found or is incompatible.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Zoom In";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Zoom Out";
-
diff --git a/platform/macos/sdk/Base.lproj/MGLAnnotationCallout.xib b/platform/macos/sdk/Base.lproj/MGLAnnotationCallout.xib
deleted file mode 100644
index c8e29bc29e..0000000000
--- a/platform/macos/sdk/Base.lproj/MGLAnnotationCallout.xib
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
- <dependencies>
- <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10116"/>
- </dependencies>
- <objects>
- <customObject id="-2" userLabel="File's Owner" customClass="NSViewController">
- <connections>
- <outlet property="view" destination="c22-O7-iKe" id="QAM-0O-WIj"/>
- </connections>
- </customObject>
- <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
- <customObject id="-3" userLabel="Application" customClass="NSObject"/>
- <customView id="c22-O7-iKe">
- <rect key="frame" x="0.0" y="0.0" width="270" height="50"/>
- <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
- <subviews>
- <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="k5x-ao-Pz3">
- <rect key="frame" x="18" y="25" width="234" height="17"/>
- <textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" title="Title" id="nVE-Zi-KcG">
- <font key="font" metaFont="system"/>
- <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <attributedString key="userComments">
- <fragment content="Placeholder for the annotation’s title">
- <attributes>
- <font key="NSFont" metaFont="smallSystem"/>
- <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
- </attributes>
- </fragment>
- </attributedString>
- <connections>
- <binding destination="-2" name="value" keyPath="representedObject.title" id="3nD-YS-gzq"/>
- </connections>
- </textField>
- <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="e9C-Ve-ccw">
- <rect key="frame" x="18" y="8" width="234" height="14"/>
- <textFieldCell key="cell" controlSize="small" selectable="YES" sendsActionOnEndEditing="YES" title="Subtitle" id="eKw-tQ-dw8">
- <font key="font" metaFont="smallSystem"/>
- <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
- <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
- </textFieldCell>
- <attributedString key="userComments">
- <fragment content="Placeholder for the annotation’s subtitle">
- <attributes>
- <font key="NSFont" metaFont="smallSystem"/>
- <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
- </attributes>
- </fragment>
- </attributedString>
- <connections>
- <binding destination="-2" name="value" keyPath="representedObject.subtitle" id="RQf-48-DyH"/>
- </connections>
- </textField>
- </subviews>
- <constraints>
- <constraint firstItem="e9C-Ve-ccw" firstAttribute="leading" secondItem="k5x-ao-Pz3" secondAttribute="leading" id="ApT-ew-CYb"/>
- <constraint firstAttribute="bottom" secondItem="e9C-Ve-ccw" secondAttribute="bottom" constant="8" id="CWV-Dd-8oi"/>
- <constraint firstItem="k5x-ao-Pz3" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" constant="20" id="UUL-GB-Jtv"/>
- <constraint firstItem="e9C-Ve-ccw" firstAttribute="top" secondItem="k5x-ao-Pz3" secondAttribute="bottom" constant="3" id="Urc-wn-m8X"/>
- <constraint firstItem="e9C-Ve-ccw" firstAttribute="trailing" secondItem="k5x-ao-Pz3" secondAttribute="trailing" id="gss-6G-9GF"/>
- <constraint firstAttribute="trailing" secondItem="k5x-ao-Pz3" secondAttribute="trailing" constant="20" id="xCZ-s9-HaP"/>
- <constraint firstItem="k5x-ao-Pz3" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" constant="8" id="xcm-oY-jjy"/>
- </constraints>
- <point key="canvasLocation" x="257" y="355"/>
- </customView>
- </objects>
-</document>
diff --git a/platform/macos/sdk/Info.plist b/platform/macos/sdk/Info.plist
deleted file mode 100644
index a3a7d6b902..0000000000
--- a/platform/macos/sdk/Info.plist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleShortVersionString</key>
- <string>$(CURRENT_SHORT_VERSION)</string>
- <key>CFBundleDevelopmentRegion</key>
- <string>en</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIdentifier</key>
- <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>FMWK</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>$(CURRENT_PROJECT_VERSION)</string>
- <key>MGLCommitHash</key>
- <string>$(CURRENT_COMMIT_HASH)</string>
- <key>MGLSemanticVersionString</key>
- <string>$(CURRENT_SEMANTIC_VERSION)</string>
-</dict>
-</plist>
diff --git a/platform/macos/sdk/ar.lproj/Localizable.strings b/platform/macos/sdk/ar.lproj/Localizable.strings
deleted file mode 100644
index fb0b0a2a46..0000000000
--- a/platform/macos/sdk/ar.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "فشل تحميل الخريطة بسبب حدوث خطأ مجهول.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "فشل تحميل الخريطة بسبب تعذر تحميل النمط.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "فشل تحميل الخريطة لأن النمط تالف.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "فشل تحميل الخريطة بسبب تعذر العثور على النمط أو أنه غير متوافق";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "قرّب";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "بعّد";
-
diff --git a/platform/macos/sdk/bg.lproj/Localizable.strings b/platform/macos/sdk/bg.lproj/Localizable.strings
deleted file mode 100644
index 5c71390076..0000000000
--- a/platform/macos/sdk/bg.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Картата не се зареди поради неизвестна грешка.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Картата не се зареди, поради незареждане на стила.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Картата не се зареди поради повреден стил.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Картата не се зареди поради неоткрит или несъвместим стил.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Приближи";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Отдалечи";
-
diff --git a/platform/macos/sdk/ca.lproj/Localizable.strings b/platform/macos/sdk/ca.lproj/Localizable.strings
deleted file mode 100644
index cd3073a8cb..0000000000
--- a/platform/macos/sdk/ca.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "El mapa no s’ha carregat a causa d’un error desconegut.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "El mapa no s’ha carregat perquè l’estil no es pot carregar.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "El mapa no s’ha carregat perquè s’ha corromput l’estil.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "El mapa no s’ha carregat perquè no es troba l’estil o bé és incompatible.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Apropar";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Allunyar";
-
diff --git a/platform/macos/sdk/cs.lproj/Localizable.strings b/platform/macos/sdk/cs.lproj/Localizable.strings
deleted file mode 100644
index f3c3ef1839..0000000000
--- a/platform/macos/sdk/cs.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Mapa selhala, protože došlo k neznámé chybě.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Mapa selhala, protože styl nelze načíst.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Mapa selhala, protože styl je poškozen.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Mapa selhala, protože styl nelze nalézt nebo je nekompatibilní.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Přiblížit";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Oddálit";
-
diff --git a/platform/macos/sdk/da.lproj/Localizable.strings b/platform/macos/sdk/da.lproj/Localizable.strings
deleted file mode 100644
index 1c9dcaa68d..0000000000
--- a/platform/macos/sdk/da.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Kortet kunne ikke indlæses, fordi der opstod en ukendt fejl.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Kortet kunne ikke indlæses, fordi benævnelsen ikke kan indlæses.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Kortet kunne ikke indlæses, fordi benævnelsen er beskadiget.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Kortet kunne ikke indlæses, fordi benævnelsen ikke kan findes eller er uforenelig.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Zoom Ind";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Zoom Ud";
-
diff --git a/platform/macos/sdk/de.lproj/Localizable.strings b/platform/macos/sdk/de.lproj/Localizable.strings
deleted file mode 100644
index fe3d979a31..0000000000
--- a/platform/macos/sdk/de.lproj/Localizable.strings
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Vergrößern";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Verkleinern";
-
diff --git a/platform/macos/sdk/default_marker.pdf b/platform/macos/sdk/default_marker.pdf
deleted file mode 100644
index d3e0e2ce12..0000000000
--- a/platform/macos/sdk/default_marker.pdf
+++ /dev/null
Binary files differ
diff --git a/platform/macos/sdk/es.lproj/Localizable.strings b/platform/macos/sdk/es.lproj/Localizable.strings
deleted file mode 100644
index feb5e934fe..0000000000
--- a/platform/macos/sdk/es.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "No se pudo cargar el mapa debido a un error desconocido.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "No se pudo cargar el mapa debido a un error de carga en el estilo.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "No se pudo cargar el mapa debido a que el estilo está dañado.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "No se pudo cargar el mapa debido a que no se encuentra el estilo o está incompleto.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Acercar";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Alejar";
-
diff --git a/platform/macos/sdk/fi.lproj/Localizable.strings b/platform/macos/sdk/fi.lproj/Localizable.strings
deleted file mode 100644
index 071cc3558b..0000000000
--- a/platform/macos/sdk/fi.lproj/Localizable.strings
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Lähennä";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Loitonna";
-
diff --git a/platform/macos/sdk/fr.lproj/Localizable.strings b/platform/macos/sdk/fr.lproj/Localizable.strings
deleted file mode 100644
index da60467659..0000000000
--- a/platform/macos/sdk/fr.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Le chargement de la carte a échoué car une erreur inconnue est survenue.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Le chargement de la carte a échoué car le style n’a pas pu être chargé";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Le chargement de la carte a échoué car le style est corrompu.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Le chargement de la carte a échoué car le style n’a pas été trouvé ou est incompatible.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Zoomer";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Dézoomer";
-
diff --git a/platform/macos/sdk/gl.lproj/Localizable.strings b/platform/macos/sdk/gl.lproj/Localizable.strings
deleted file mode 100644
index 49652afb1b..0000000000
--- a/platform/macos/sdk/gl.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Non se puido cargar o mapa por mor dun erro descoñecido.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Non se puido cargar o mapa por mor dun erro de carga no estilo.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Non se puido cargar o mapa por mor de que o estilo está danado.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Non se puido cargar o mapa por mor de que non se atopa o estilo ou non está completo.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Achegar";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Afastar";
-
diff --git a/platform/macos/sdk/he.lproj/Localizable.strings b/platform/macos/sdk/he.lproj/Localizable.strings
deleted file mode 100644
index 0d9564894e..0000000000
--- a/platform/macos/sdk/he.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "טעינת המפה נכשלה עכב שגיאה לא ידועה.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "טעינת המפה נכשלה - לא ניתן לטעון את הסגנון.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "טעינת המפה נכשלה - הסגנון פגום.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "טעינת המפה נכשלה - לא ניתן למצוא את הסגנון או שהסגנון אינו תואם.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Zoom In";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Zoom Out";
-
diff --git a/platform/macos/sdk/hu.lproj/Localizable.strings b/platform/macos/sdk/hu.lproj/Localizable.strings
deleted file mode 100644
index 062b1f5cea..0000000000
--- a/platform/macos/sdk/hu.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Egy ismeretlen hiba miatt nem sikerült betölteni a térképet.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Nem sikerült betölteni a térképet, mert a stílust nem lehetett betölteni.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Nem sikerült betölteni a térképet, mert a stílus hibás.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Nem sikerült betölteni a térképet, mert a stílus nem található vagy inkompatibilis.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Nagyítás";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Kicsinyítés";
-
diff --git a/platform/macos/sdk/ja.lproj/Localizable.strings b/platform/macos/sdk/ja.lproj/Localizable.strings
deleted file mode 100644
index def56d1a9d..0000000000
--- a/platform/macos/sdk/ja.lproj/Localizable.strings
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "ズームイン";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "ズームアウト";
-
diff --git a/platform/macos/sdk/lt.lproj/Localizable.strings b/platform/macos/sdk/lt.lproj/Localizable.strings
deleted file mode 100644
index 0e2e604e84..0000000000
--- a/platform/macos/sdk/lt.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Nepavyko užkrauti žemėlapio dėl nežinomos klaidos.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Nepavyko užkrauti žemėlapio, nes nepavyko užkrauti stiliaus.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Nepavyko užkrauti žemėlapio, nes stilius yra netinkamo formato.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Nepavyko užkrauti žemėlapio, nes neįmanoma rasti stiliaus arba jis nėra suderinamas.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Priartinti";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Nutolinti";
-
diff --git a/platform/macos/sdk/mapbox.pdf b/platform/macos/sdk/mapbox.pdf
deleted file mode 100644
index fbe86d3a43..0000000000
--- a/platform/macos/sdk/mapbox.pdf
+++ /dev/null
Binary files differ
diff --git a/platform/macos/sdk/mapbox_helmet.pdf b/platform/macos/sdk/mapbox_helmet.pdf
deleted file mode 100644
index 699b2ff293..0000000000
--- a/platform/macos/sdk/mapbox_helmet.pdf
+++ /dev/null
@@ -1,355 +0,0 @@
-%PDF-1.5 %
-1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 33 0 R]/Order 34 0 R/RBGroups[]>>/OCGs[5 0 R 33 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 16470/Subtype/XML/Type/Metadata>>stream
-<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c137 79.159768, 2016/08/11-13:24:42 ">
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
- <rdf:Description rdf:about=""
- xmlns:xmp="http://ns.adobe.com/xap/1.0/"
- xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/"
- xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
- xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
- xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
- <xmp:CreatorTool>Adobe Illustrator CC 2017 (Macintosh)</xmp:CreatorTool>
- <xmp:CreateDate>2017-11-16T09:51:51-08:00</xmp:CreateDate>
- <xmp:ModifyDate>2017-11-16T10:04:52-08:00</xmp:ModifyDate>
- <xmp:MetadataDate>2017-11-16T10:04:52-08:00</xmp:MetadataDate>
- <xmp:Thumbnails>
- <rdf:Alt>
- <rdf:li rdf:parseType="Resource">
- <xmpGImg:width>256</xmpGImg:width>
- <xmpGImg:height>256</xmpGImg:height>
- <xmpGImg:format>JPEG</xmpGImg:format>
- <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYq7FUPe6jYWMfqXdwkC9ubAE/IdT9GKsbv/wAx9HhqtpFJdMOjf3aH6W+L/hcVSC7/ADH1uUkW&#xA;8cNuvY0Lt97Gn/C4qlNx5q8xT19S/lFf99n0/wDiHHFUBJfXsprJcSOfFnY/rOKqOKuxVWjvr2I1&#xA;iuJIz/kuw/UcVR9v5q8xQU9O/lNP9+H1P+J8sVTa0/MfWoqC4jhuF7mhRvvU0/DFU/sPzH0eai3c&#xA;Ulqx6t/eIPpX4v8AhcVZJZajYX0fqWlwk69+DAkfMdR9OKojFXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYqlmr+ZNI0lT9amHrUqIE+KQ/R2+nFWDav+YWrXRaOyAs4ezD4pCP9Y7D6B9OK&#xA;sYmmmmkMk0jSSN9p3JZj8ycVWYq7FXYqujilkNI0Zz4KCf1YqiF0rVGFVs52HiI3P8MVc2laooq1&#xA;nOo8TG4/hiqHkiljNJEZD4MCP14qtxV2KuxVfDNNDIJIZGjkX7LoSrD5EYqyfSPzC1W1Kx3oF5D/&#xA;ADH4ZAP9YbH6R9OKs50fzJpOrKPqsw9alWgf4ZB9Hf6MVTPFXYq7FXYq7FXYq7FXYq7FXYq7FXYq&#xA;7FXYqpXV3bWkD3FzIsUKCrOxoMVYB5g/MG4nLW+lVgh6G5P943+qP2R+PyxVhzu7uXdizsaszGpJ&#xA;Pck4q1iqpb21xcyiK3ieaU9ERSx+4YqyXTvy71q5o10yWcZ7Meb/APArt95xVkdl+XWhw0Nw0t03&#xA;cM3BfuSh/wCGxVOrby/odsB6NjCpHRigZv8AgmqcVR6qqiigADoBsMVbxV2KtMqsKMAQeoO4xVAX&#xA;Pl/Q7kH1rGFierBArf8ABLQ4qk17+XWhzAm3aW1bsFbmv3PU/jirG9R/LvWrYFrVkvEHZfgf/gW2&#xA;+5sVY1cW1xbSmK4ieGUdUdSp+44qp4q2jujh0Yq6mqspoQR3BGKsx8v/AJg3MBW31as8PQXI/vF/&#xA;1h+1+v54qz+1u7a7gS4tpFlhcVV1NRiqrirsVdirsVdirsVdirsVdirsVdiqWa75gsNGtvVuG5St&#xA;/cwKfjc/wHicVeXa3r+oaxcepcvSNT+6gX7CD2Hj74qluKqtta3F1MsFvG0sz7KiCpOKs10T8uCQ&#xA;s2rSU7/VYj/xJ/8Amn78VZpZadY2MXpWcCQR9wgoT8z1P04qiMVdirsVdirsVdirsVdirsVdiqHv&#xA;dPsb6L0ruBJ4+wcVp8j1H0YqwzWvy4oGm0mSvf6rKf8AiL/81ffirCbq1ubWZoLmNopU+0jihxVS&#xA;xVMtE8waho9x6ls9Y2P72BvsOPcePvir1HQvMFhrNt6tu3GVf72Bvtof4jwOKpnirsVdirsVdirs&#xA;VdirsVdiqT+ZPMlrotryakl3ID6EFev+U3goxV5Tf393f3T3N1IZJn6k9APADsB4Yqh8VTzy75Tv&#xA;9Zf1B+4slPx3DDr7IP2jir0vSND07SoPSs4gpI+OU7u/+s2Ko/FXYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYqgdX0TTtVg9G8iDEfYlGzofFWxV5n5i8p3+juZN57In4LhR0r2cdj+GKpHiqIsNQu7C6S&#xA;6tJDHMnQjoR4EdwcVereW/MlrrVryWkd3GB68Fen+UvipxVOMVdirsVdirsVdirsVSzzBrtto1g1&#xA;xL8UrVWCHu7/ANB3OKvJL+/ur+7kurl+c0hqT2A7AeAHbFUPirLfKPkttQ432oApZdY4ujS+/sv6&#xA;8VejxRRxRrHEoSNAFRFFAAOgAGKrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiq2SOOSNo5&#xA;FDxuKMjCoIPYg4q8582+Snsed9pyl7PdpYerRe47lf1YqxHFURp9/dWF3Hd2r8JozUHsR3BHcHFX&#xA;rmga5baxYLcxfDIvwzw90f8AoexxVMsVdirsVdirsVUru6gtLaS5uHCQxKWdj4DFXkGv63caxqD3&#xA;MlVjHwwRdkTsPn44qluKst8l+URqDDUL5T9SQ/uoz/u1h4/5I/HFXpIAAAAoB0GKuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuIBFDuD1GKvN/OvlL6i7ajYp/oTn99EB/dMe4/ySfux&#xA;ViOKpl5f1y40fUEuY6tEfhni7On9R2xV6/a3UF3bR3MDB4ZVDIw7g4qq4q7FXYq7FXnf5g+YDPcf&#xA;oq3b9zAa3JH7UnZfkv6/lirDcVTvyp5dfWb+jgizho1w42r4ID4tir1mKKOKNYo1CRoAqIooABsA&#xA;Biq7FXYq7FXYq7FXYq7FXYqhb/VNO0+P1Ly4SBT0DHc/JRufoxVjN7+ZWmREraW0lwR+0xEa/wDG&#xA;x/DFUpl/MzVi37m1gRfB+bn7wyYqor+ZGvAmsVs1exR9vucYqjbf8zrgH/SbFGHcxuV/Bg2Kp7p/&#xA;n3y/dkLJI1pIdqTCi/8ABLVfvpirII5I5UEkbB0bdXUggj2IxVdirsVdirsVdiq2SOOWNo5FDxuC&#xA;rqdwQdiDiryfzZ5dfRr+kYJsp6tbue3ih91xVI8VZn+XvmD0Lg6TcN+5nPK2JP2ZO6/7L9fzxV6H&#xA;irsVdiqWeZNXXSdImuqj1qcIAe8jdPu64q8dd3d2dyWdiWZjuSTuScVX21vNc3EdvCvOWVgiL4km&#xA;mKvY9C0iDSdNis4qFlHKZ/55D9pv6e2Ko/FXYq7FXYq7FXYq7FWndEUu7BVUVZiaAAdycVYL5i/M&#xA;IhmttHpts14wr/yLU/rOKsIuLm4uZWmuJGllb7TuSxP0nFVPFXYq7FXYq7FUfpWu6ppUnOznKLWr&#xA;RHeNvmp2+nrir0Ty550sdVK28wFtfHYRk/C5/wAgn9R/HFWR4q7FXYq7FXYqgNc0iDVtNls5diwr&#xA;FJ14OPst/X2xV47dW01rcSW868JomKOp7EYqpo7xuroxV0IZWGxBG4IxV7F5c1hdW0mG629X7E6j&#xA;tIvX7+uKpnirsVeZ/mFq5utWFlG37mzFGHYyNu33Cg+/FWK4qzn8uNFDPJq0y7JWK2r40+Nvu2+/&#xA;FWe4q7FXYq7FXYq7FXYq0zKqlmIVVFSTsABirzPzh5ufUpGsrNiunoaMw2MpHc/5PgPpxVi2KuxV&#xA;2KuxV2KuxV2KuxVwJBBBoRuCMVeheTfObXLJpupPWc/Db3B/b/yX/wArwPf59VWaYq7FXYq7FXYq&#xA;wP8AMfRADHq8K/apFcgeP7D/APGv3YqwXFWV/l5q/wBV1VrGQ0hvBRa9BIu6/eKj7sVel4qh9RvY&#xA;7GwuLuT7MCM9PEgbD6TtirxSaaSaaSaQ8pJGLu3izGpOKt28EtxPHBEOUsrBEHiWNBir2nTbGKws&#xA;ILOL7ECBa9KnufpO+KonFXYq7FXYq7FXYq7FWC+f/MpFdHtHoSK3jjwO4j/5qxVgeKuxV2KuxV2K&#xA;ss0Lygb7y1d3jJ/pcu9j8ozv/wAGarirE8VdirsVdirgSCCDQjocVep+S/MZ1WxMFw1b62AEhPV0&#xA;6B/n2P8AbirI8VdirsVdiqG1Kxiv7Cezl+xOhWvgezfQd8VeLXNvLb3EtvKKSwsyOP8AKU0OKtQT&#xA;SQTRzRHjJEwdG8GU1GKva9PvI72xgu4/szorgeFRuPo6Yqxv8x7/ANHR4rRTRrqT4h4pH8R/4bji&#xA;rzXFWUfl7p31nWzcsKx2aF/bm3wr/E/Rir07FXYq7FXYq7FXYq7FUt8xawmk6VLdmhk+xAp7yN9n&#xA;7upxV47LLJNK8srF5JGLOx6kk1JOKrcVdirsVdiqK0rT5tR1CCyi+3MwUnwXqzfQN8Ve0W1vFb28&#xA;dvCvGKJQiL4BRQYq8v8APOj/AKP1lpY1pb3lZY/AN+2Pv3+nFWO4q7FXYq7FUdomqy6XqcN5HWiG&#xA;kqj9pDsy/dir2aKSOWNJY2DRuAyMOhBFQcVXYq7FXYq7FXmP5h6cLbWxcoKR3iBz4c1+Fv4H6cVY&#xA;vir0v8ub8z6NJasataSEKPBJPiH/AA3LFWP/AJj3Zl1uO3B+G3hFR/lOSx/DjirFMVel/lxZCHRZ&#xA;Lkj4rqUkH/Jj+Ef8NyxVleKuxV2KuxV2KuxV2KvM/wAwtWN1qoso2/c2Yo1OhkbdvuFB9+KsVxV2&#xA;KuxV2KuxVn/5b6Pwil1WUbyVit/9UH42+kin0YqzfFUl836ONU0WVEWtxB+9gp1LKN1/2Q2xV5Hi&#xA;rsVdirsVdir1PyDqBu9ASJzWS0YwmvXj9pfwNPoxVkeKuxV2KuxVin5jWXraIlyB8VrKCT/kP8J/&#xA;4bjirzTFWWflvdmLWZbcn4biI0H+UhBH4csVSjzVcev5iv5K1pKY/wDkX8H/ABriqVYq9l8uW31b&#xA;QrCGlCIUZh/lOOR/E4qmOKuxV2KuxV2KuxVQ1C8SysZ7t91gjaQjx4itPpxV4nPNJPNJNIeUkrF3&#xA;bxZjUnFVmKuxV2KpppHlnWNVINtARCTQ3Enwxj6T1+iuKs50f8v9Ks+Ml6frs43o20QP+r3+n7sV&#xA;ZQiIihEUKiiiqBQADwGKt4q7FUk1nyfouqEyPH6Fyd/XhopJ/wAodG/XirBtY8jazp5LxJ9ctx/u&#xA;yIHkB/lJ1+6uKsdxV2KuxVm35Y3JF3e21dnjWQD/AFDxP/E8VegYq7FXYq7FUu8x231nQr6GlSYX&#xA;ZR/lIOS/iMVeNYqmvlS49DzHp79KyiP/AJGAp/xtiqAvpDLe3Ep6ySO33sTiqkilmCjqxAH04q9z&#xA;jRY41RfsoAo+QFMVXYq7FXYq7FXYq7FWLfmLe+hoa26n4rqVVI/yU+I/iBirzLFXYq7FU38uahol&#xA;ndc9UsjdKSOD1qE+cZ+FvpxV6npuq6bqEIexnSVFAqq7FfmpoR92KozFXYq7FXYq7FVO4uLe3iaa&#xA;4kWKJftO5CgfScVedeb9c8s3xYWdr6t2f+P0ViH3dX+kYqxLFXYqyr8uGI1+QDo1u4P/AASH+GKv&#xA;TMVdirsVdirToroyN9lgQfkdsVeFupVip6qSD9GKq1jIYr63lHVJUb7mBxVQxVEacpbULZQKkyoA&#xA;PmwxV7dirsVdirsVdirsVdirzr8y7rnqdrag7QxFz/rSN/RBirDsVdirsVdiqpb3FxbyrNbyNFKv&#xA;2XQlSPpGKsv0f8x7uHjFqcX1hOnrx0WQfNdlb8MVZ3p+oWmoWiXVq/qQyV4tQg1BoQQcVRGKtMyq&#xA;pZiAqipJ6ADFWF6z+Y9vHWLSovWb/lolBCfQuzH6aYqwnUtX1HUpfVvZ2mYfZU7Kv+qo2GKoTFXY&#xA;q7FWX/lpCW1i5lpsluV+lnWn/ETir0fFXYq7FXYq7FXiOoqV1C6UihWWQEfJjiqHxV2KojTmK6hb&#xA;MDQiVCD8mGKvbsVdirsVdirsVdirsVeS+dZ/W8y3h7IVjH+xQA/jXFUjxV2KuxV2KuxV2Ksz/LjW&#xA;PRu5dMlb93cfvIK/78UfEP8AZKPwxV6HirGPP2s/UdJ+qxtS4vapt1EY+2fp+z9OKvMMVdirsVdi&#xA;rsVei/lpYmPTrm8YUNxIEX/VjHX72OKsxxV2KuxV2KuxV4jqLFtQuWJqWlck/NjiqHxVWvozFe3E&#xA;R6xyOv3MRiqkjFWDDqpBH0Yq9zjdZI1dfsuAw+RFcVXYq7FXYq7FXYq7FXi+uyGXWr+T+a4lp8uZ&#xA;piqBxV2KuxV2KuxV2KqlvcS29xHcQtxliYOjeBU1GKvZ9L1GHUNOgvYjRJU5EfykbMD8jtiryrzT&#xA;rH6V1ma4U1gT91b/AOovf/ZGpxVKcVdirsVdiq+CCWeeOCJeUsrBEUd2Y0AxV7RpOnpp+m29km4h&#xA;QKSO7dWP0sScVReKuxV2KuxVbI6xxs7fZQFj8gK4q8MdizFj1Ykn6cVVbGMy3tvEOskiL97AYqj/&#xA;ADVb+h5iv46UrKZP+Rnx/wDG2KpVir2Xy5c/WdCsJq1JhRWP+Ug4n8RiqY4q7FXYq7FXYq7FXh12&#xA;3O7melOUjGnzJxVSxV2KuxV2KuxV2KuxVOdN8y3Flod7pign6yR6T/yBtpP+CUbYqk2KuxV2KuxV&#xA;2Ks5/L3y6xf9MXK0Aqtop7k7NJ/AYqz3FXYq7FXYq7FUu8x3P1bQb+WtCIXVT/lOOI/E4q8axVNf&#xA;Ktv6/mKwjpWkok/5F/H/AMa4qm35j2hi1uO4A+G4hFT/AJSEqfw44qxTFXpf5cXom0WS2J+K1lIA&#xA;/wAmT4h/w3LFWV4q7FXYq7FXYq7FXhlx/fyf6zfrxVZirsVdirsVdirsVdirsVdirsVdirsVZN5S&#xA;8oS6rIt1dqY9OQ/Iykdl/wAnxP8AmFXp8caRoscahEQBVVRQADoAMVbxV2KuxV2KuxVin5j3oh0W&#xA;O2B+K6lAI/yY/iP/AA3HFXmmKsr/AC4tDLrclwR8NtESD/lOQo/Dliqf/mPYeto8V2oq1rJ8R8Ek&#xA;+E/8NxxV5rirKPy91H6trZtmNI7xCntzX4l/iPpxV6dirsVdirsVdirsVeHXa8LuZK14yMK/InFV&#xA;LFXYq7FXYq7FXYq7FXYq7FXYq2kbyOqRqXdjRVUVJJ7ADFWceW/y/YlbrWBReqWYO5/4yEfqGKs8&#xA;RERAiKFRRRVAoAB2AGKt4q7FXYq7FXYq7FXmP5haj9Z1sWymsdmgT25t8TfwH0YqxfFXpX5cWHo6&#xA;PLdsKNdyfCfFI/hH/DFsVZJqNlHfWFxaSfZnRkr4EjY/Qd8VeKTQyQzSQyDjJGxR18GU0IxVu3nl&#xA;t5454jxliYOh8CpqMVe06ZfRX9hBeRfYnQNTwPcfQdsVROKuxV2KuxV2KvFtci9LWr+P+W4lA+XM&#xA;0xVBYq7FXYq7FXYq7FXYq7FV0cUkriOJGeRtlRQSSfYDFWTaR+X+r3hV7yllAevPeQj2QdPpOKs6&#xA;0by1pOkr/osVZqUa4k+KQ/T2+jFU0xV2KuxV2KuxV2KuxVDalfRWFhPeS/YgQtTxPYfSdsVeLXE8&#xA;txPJPKeUsrF3PiWNTirUMUk0yQxjlJIwRF8WY0AxV7XptkljYW9om6wIqV8SBufpO+KojFXmf5ha&#xA;QbXVhexr+5vBVj2Ei7N94ofvxViuKs5/LjWgryaTM2z1ltq+NPjX7t/vxVnuKuxV2KuxV2KvNPNX&#xA;lfWpNbu7m2tHlt5WDo6UNaqC2wNftV7Yqx+XR9Xi/vbKdP8AWicfrGKqBtrlTQxOCOoKnFVPFVRb&#xA;a5YgLE5J6AKTiqIi0bV5aelY3D17rE5H6sVR0Hk3zLN9mxZR4yFU/wCJEHFU0tfy11aQg3NxDAv+&#xA;Tykb7qKPxxVPbH8uNGhIa6kkumHVSfTQ/Qvxf8NirIrLTNPsU4WdvHAD14KAT8z1P04qicVdirsV&#xA;dirsVdirsVdirsVYF+Y+tBni0mFtkpLc08f2F+7f7sVYNirKvy90k3WrG9cVhshUe8jVC/ducVem&#xA;Yq7FUs8yaQuraRNa0HrU5wE9pF6ff0xV466Ojsjgq6kqynYgjYg4qvtria2uI7iFuEsTB0YdiDXF&#xA;XsehavDq2mxXkdAzfDLGP2HH2l/p7Yqj8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi&#xA;rsVdirsVdiqA1zV4NJ02W8l3Zfhij/nc/ZX+vtirxy5uZrm4kuJm5yysXdj3JNcVWIjO6ogLOxAV&#xA;R1JOwGKvYfLWjrpOkw21P3x/eXDeMjDf7umKppirsVdirzv8wfL5guP0rbr+5nNLkD9mTs3yb9fz&#xA;xVhuKp35U8xPo2ocnq1nNRbhB2HZx7rir1mKWOWJJYmDxuAyOpqCDuCMVXYq7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVssscUbSyMEjQFndjQADcknFXk3mvzE+s39UJFlDVbdDt&#xA;Xxc+7YqkmKsx/L7y/wDWLk6rcL+5tzS3B/ak/m/2P6/lir0XFXYq7FXYqpXdrBd20ltcIHhlUq6n&#xA;wOKvINf0S40fUHtpKtGfigl7OnY/PxxVLcVZZ5L82/o9xYXz/wChOf3Uh/3Ux/41P4Yq9KBDAMpq&#xA;DuCOhGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuJAFTsB1OKvNvOnm36+7afYt&#xA;/oSH97IP92sD2/yR+OKsSxVMdA0W41fUEtYqiP7U8vZEHU/PwxV7BaWkFpbRW1uoSGJQqKPAYqq4&#xA;q7FXYq7FXYqlnmDQrbWbBreX4ZVq0E3dH/oe4xV5Jf2F1YXclrcpwmjNCOxHYjxB7Yqh8VZZ5S86&#xA;Pp/CxvyXsukcvVov6r+rFXpEUsUsayxOHjcBkdTUEHuCMVXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYq7FVssscUbSSsEjQFndjQADqSTirzjzb50e/5WOnMUsuksu4aX29l/XirEsVRFhYXV/dx&#xA;2tqhkmkNAOw8SfADFXrfl/QrbRrAW8XxStRp5u7t/QdhiqZ4q7FXYq7FXYq7FXYqk/mTy3a61a8W&#xA;pHdxg+hPTp/kt4qcVeU39hd2F09rdRmOZDuD3HiD3BxVD4qnfl3zXqGjOEX99Zk1e3Y7CvdD+ycV&#xA;emaRrum6tB6tnKGYD44W2kT/AFl/j0xVH4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUBq+uabpM&#xA;Hq3kvFj/AHcS7u/+qv8AHpirzTzF5sv9Zf0z+4slPwW6nr7uf2jiqR4qiLCwu7+6S1tYzJNIdgOw&#xA;8SewGKvVPLPlm20W2IBEt3KP303/ABqvgo/HFU6xV2KuxV2KuxV2KuxV2KuxVLNd8v2Gs23pXC8Z&#xA;V/uZ1Hxof4jxGKvLtb0DUNHuPTuUrGx/dTr9hx7Hx9sVS3FVS3ubi2mWa3kaKVPsuhII+7FWa6L+&#xA;Y7qFh1aPmOn1mICv+yTp933YqzSx1Kwv4vVs50nTvxO4r4jqPpxVE4q7FXYq7FXYq7FXYq7FXYq7&#xA;FUNfalYWEXq3k6QJ25Hc/wCqOp+jFWF63+Y7MGh0mPj2NzKN/wDYp/X7sVYVc3VxdTNPcSNLK/2n&#xA;ckk/fiqniqY6LoGoavcelap+7B/eztsiD3Pj7Yq9S0Ly/YaNbelbjlK399Ow+Jz/AAHgMVTPFXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FVK6tLa7ga3uYllhfZkYVGKsA8wfl9cwFrjSazw9TbH+8X/AFT+0Px+&#xA;eKsOdHRijqVdTRlIoQfcHFWsVVILie3lEsEjRSr0dCVI+kYqyTTvzC1u2otyEvIx/OOL0/1l/iDi&#xA;rI7L8x9FmoLmOW1buSPUX71+L/hcVTq28x6Fc09G/hJPRWcI33NQ4qj0kjkXkjB18VII/DFV2Kux&#xA;Vp5EjXk7BVHVmNB+OKpfc+Y9Cth++v4QR1VXDt/wK1OKpLe/mPosIIto5bpuxA9NPvb4v+FxVjmo&#xA;/mFrdzVbYJZxn+Qcnp/rN/ADFWN3FzcXEpluJWmlPV3Ys33nFVPFW0R3YIilnY0VQKkn2AxVmHl/&#xA;8vrm443Gqk28PUW4/vG/1v5f1/LFXoFpaW1pAtvbRLFCgoqKKDFVXFXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYqlmseW9J1ZT9ahAmpQXCfDIPp7/TirBtX/AC91a1LSWRF5D2UfDIB/qnY/QfoxVjE0&#xA;M0MhjmjaORftI4KsPmDiqzFXYq7FW1dlNVJU+INMVV11HUFIK3UqkdCJGH8cVc2o6gxJa6lYnqTI&#xA;x/jiqgzsxqxLHxJrirWKuxV2Kr4oZppBHCjSSN9lEBZj8gMVZPpP5e6tdEPekWUJ7H4pD/sQdvpO&#xA;Ks40fy1pOkqPq0NZv2riSjSH6e30YqmmKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV&#xA;D3um2F8nC7t0nUdOagkfI9R9GKsbv/y40earWkslox6L/eIPoajf8NiqQXf5ca3ESbeSK5XsASjf&#xA;cwp/w2KpTceVfMUFfUsJTT/fY9T/AIhyxVASWN7EaS28kZ/ykYfrGKqOKuxVWjsb2U0it5JD/kox&#xA;/UMVR9v5V8xT09OwlFf9+D0/+J8cVTa0/LjW5SDcSRWy9wSXb7lFP+GxVP7D8uNHho13LJdMOq/3&#xA;aH6Fq3/DYqySy02wsU4WlukCnrwUAn5nqfpxVEYq7FXYq7FXYq7FXYq7FXYq7FX/2Q==</xmpGImg:image>
- </rdf:li>
- </rdf:Alt>
- </xmp:Thumbnails>
- <xmpTPg:NPages>1</xmpTPg:NPages>
- <xmpTPg:HasVisibleTransparency>True</xmpTPg:HasVisibleTransparency>
- <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
- <xmpTPg:MaxPageSize rdf:parseType="Resource">
- <stDim:w>0.222222</stDim:w>
- <stDim:h>0.221944</stDim:h>
- <stDim:unit>Inches</stDim:unit>
- </xmpTPg:MaxPageSize>
- <xmpTPg:PlateNames>
- <rdf:Seq>
- <rdf:li>Cyan</rdf:li>
- <rdf:li>Magenta</rdf:li>
- <rdf:li>Yellow</rdf:li>
- <rdf:li>Black</rdf:li>
- </rdf:Seq>
- </xmpTPg:PlateNames>
- <xmpTPg:SwatchGroups>
- <rdf:Seq>
- <rdf:li rdf:parseType="Resource">
- <xmpG:groupName>Default Swatch Group</xmpG:groupName>
- <xmpG:groupType>0</xmpG:groupType>
- </rdf:li>
- </rdf:Seq>
- </xmpTPg:SwatchGroups>
- <dc:format>application/pdf</dc:format>
- <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
- <xmpMM:DocumentID>uuid:ad04dd96-0b1b-0043-88c6-2612e9f199e0</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:fd70734a-8143-0b42-928a-90f58b786320</xmpMM:InstanceID>
- </rdf:Description>
- </rdf:RDF>
-</x:xmpmeta>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[0.0 0.0 16.0 15.98]/BleedBox[0.0 0.0 16.0 15.98]/Contents 35 0 R/Group 36 0 R/LastModified(D:20171116100452-08'00')/MediaBox[0.0 0.0 16.0 15.98]/Parent 3 0 R/PieceInfo<</Illustrator 37 0 R>>/Resources<</ExtGState<</GS0 38 0 R/GS1 39 0 R>>/Properties<</MC0 33 0 R>>/XObject<</Fm0 40 0 R/Fm1 41 0 R/Fm2 42 0 R/Fm3 43 0 R>>>>/Thumb 44 0 R/TrimBox[0.0 0.0 16.0 15.98]/Type/Page>> endobj 35 0 obj <</Filter/FlateDecode/Length 90>>stream
-HwVu6PprqV*2P04ճP04SЅRR
-@%!>n
-.\qC$qCFHC]}r
-8;Xp,*?`,t!f$f[~> endstream endobj 45 0 obj [/Indexed/DeviceRGB 255 46 0 R] endobj 46 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
-8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
-b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
-E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
-6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
-VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
-PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
-l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 40 0 obj <</BBox[0.952377 15.0476 15.0476 0.952377]/Group 47 0 R/Length 455/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ExtGState<</GS0 48 0 R>>>>/Subtype/Form>>stream
-1 1 1 rg
-/GS0 gs
-q 1 0 0 1 11.3447 6.2625 cm
-0 0 m
--1.47 -1.47 -3.642 -1.76 -5.104 -1.76 c
--5.638 -1.76 -6.179 -1.722 -6.705 -1.638 c
--7.482 2.66 -5.074 5.075 v
--4.442 5.707 -3.588 6.05 -2.689 6.05 c
--1.722 6.05 -0.792 5.661 -0.106 4.968 c
-1.295 3.566 1.333 1.349 0 0 c
--3.345 8.785 m
--7.238 8.785 -10.393 5.623 -10.393 1.737 c
--10.393 -2.148 -7.23 -5.311 -3.345 -5.311 c
-0.541 -5.311 3.703 -2.148 3.703 1.737 c
-3.703 5.631 0.549 8.785 -3.345 8.785 c
-f
-Q
- endstream endobj 41 0 obj <</BBox[0.0 16.0 16.0 0.0]/Group 49 0 R/Length 339/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ExtGState<</GS0 48 0 R>>>>/Subtype/Form>>stream
-0 0 0 rg
-/GS0 gs
-q 1 0 0 1 8 0.9519 cm
-0 0 m
--3.894 0 -7.048 3.162 -7.048 7.048 c
--7.048 10.934 -3.894 14.104 0 14.104 c
-3.894 14.104 7.048 10.941 7.048 7.056 c
-7.048 3.147 3.894 0 0 0 c
-0 15.048 m
--4.419 15.048 -8 11.459 -8 7.048 c
--8 2.637 -4.419 -0.952 0 -0.952 c
-4.419 -0.952 8 2.629 8 7.048 c
-7.992 11.459 4.419 15.048 0 15.048 c
-f
-Q
- endstream endobj 42 0 obj <</BBox[4.52039 12.3142 12.318 4.51277]/Group 50 0 R/Length 300/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ExtGState<</GS0 48 0 R>>>>/Subtype/Form>>stream
-0 0 0 rg
-/GS0 gs
-q 1 0 0 1 9.501 8.1145 cm
-0 0 m
--0.693 -1.425 l
--1.379 0 l
--2.796 0.693 l
--1.379 1.379 l
--0.693 2.804 l
-0 1.379 l
-1.417 0.693 l
-h
-1.729 3.116 m
-0.328 4.518 -1.897 4.563 -3.23 3.23 c
--5.638 0.815 -4.861 -3.482 y
--0.564 -4.259 1.852 -1.852 v
-3.177 -0.503 3.139 1.714 1.729 3.116 c
-f
-Q
- endstream endobj 43 0 obj <</BBox[6.70476 10.9181 10.9181 6.68953]/Group 51 0 R/Length 158/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ExtGState<</GS0 48 0 R>>>>/Subtype/Form>>stream
-1 1 1 rg
-/GS0 gs
-q 1 0 0 1 10.918 8.8074 cm
-0 0 m
--1.417 -0.693 l
--2.11 -2.118 l
--2.796 -0.693 l
--4.213 0 l
--2.796 0.686 l
--2.11 2.111 l
--1.417 0.686 l
-h
-f
-Q
- endstream endobj 51 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 48 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 50 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 49 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 47 0 obj <</I true/K false/S/Transparency/Type/Group>> endobj 33 0 obj <</Intent 52 0 R/Name(Layer 1)/Type/OCG/Usage 53 0 R>> endobj 52 0 obj [/View/Design] endobj 53 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 21.1)/Subtype/Artwork>>>> endobj 38 0 obj <</AIS false/BM/Normal/CA 0.899994/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 0.899994/op false>> endobj 39 0 obj <</AIS false/BM/Normal/CA 0.350006/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 0.350006/op false>> endobj 37 0 obj <</LastModified(D:20171116100452-08'00')/Private 54 0 R>> endobj 54 0 obj <</AIMetaData 55 0 R/AIPDFPrivateData1 56 0 R/AIPDFPrivateData2 57 0 R/AIPDFPrivateData3 58 0 R/ContainerVersion 11/CreatorVersion 21/NumBlock 3/RoundtripVersion 21>> endobj 55 0 obj <</Length 1253>>stream
-%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 21.1.0 %%For: (Angel) () %%Title: (mapboxgl-logo.pdf) %%CreationDate: 11/16/17 10:04 AM %%Canvassize: 16383 %%BoundingBox: 2 2 19 19 %%HiResBoundingBox: 2.5 2.51000020160791 18.5 18.5100000270513 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 326 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 2.5 2.51000020160791 18.5 18.4899997983921 %AI3_TemplateBox: 42.5 10.5 42.5 10.5 %AI3_TileBox: -367.5 -277.5 366.5 298.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 0 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI17_Begin_Content_if_version_gt:17 1 %AI9_OpenToView: -11.1249999999991 25 24 1668 982 26 0 0 6 43 0 0 0 1 1 0 1 1 0 1 %AI17_Alternate_Content %AI9_OpenToView: -11.1249999999991 25 24 1668 982 26 0 0 6 43 0 0 0 1 1 0 1 1 0 1 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 7 %%PageOrigin:-65 -26 %AI7_GridSettings: 18 8 18 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 56 0 obj <</Length 11231>>stream
-%%BoundingBox: 2 2 19 19 %%HiResBoundingBox: 2.5 2.51000020160791 18.5 18.5100000270513 %AI7_Thumbnail: 128 128 8 %%BeginData: 11078 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD37FFFD04A87DA87DA87DA87DA87DA87DA8A8FFA8FD66FFFD04A8 %FD197DA8A8FD5EFFA8A8FD077DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA8FD057DA8A8FD58FFA8A8FD297DA8A8FD51FFA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87D7D7DA8A8FD4DFFA8FD337DA8A8FD48FFA8A87D7D7DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87D7D7DA8FD077DA87D7D7DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87D7D7DFD45FFA8FD197DA87DA8A8A87DA8A8 %A87DA8FD177DA8A8FD40FFA8A87D7D7DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FFA8FD11FFA8A87DA87D7D7DA87DA87DA87DA87DA87DA87DA87D %7D7DFD3EFFA8FD127DA8A8FD19FFA8FFA8A8FD117DA8FD3BFF7D7D7DA87D %A87DA87DA87DA87DA87DA87DFD23FFA8A87D7D7DA87DA87DA87DA87DA87D %7D7DA8A8FD36FFA8A8FD0F7DA8A8FD27FFA8A8FD0F7DFD34FFA8A87DA87D %A87DA87DA87DA87DA87DA8A8FD2DFFA8A87DA87DA87DA87DA87DA87D7D7D %FD32FFA8FD0E7DFD31FFA8A8FD0D7DA8FD2FFFA87D7DA87DA87DA87DA87D %7D7DA8A8FD35FF7D7D7DA87DA87DA87DA87D7D7DA8FD2DFFFD0D7DA8FD38 %FFA8A8FD0B7DA8FD2BFF7D7D7DA87DA87DA87DA87DA8A8FD3CFFA87DA87D %A87DA87DA87DA87DA8FD29FFFD0C7DA8FD3FFFFD0C7DA8FD26FF7D7D7DA8 %7DA87DA87D7D7DA8FD42FFA87D7DA87DA87DA87DA87DA8FD25FFFD0B7DA8 %FD44FFA8FD0B7DA8FD22FF7DA87DA87DA87DA87DA87DFD47FFA8A87DA87D %A87DA87DA87DA8FD21FFFD0B7DFD49FFA8A8FD097DA8FD1FFF7D7D7DA87D %A87DA87D7D7DFD4CFFA87DA87DA87DA87DA87DA8FD1DFFA8FD0A7DFD4EFF %A8FD097DA8FD1BFFA87D7DA87DA87DA87D7D7DFD50FFA87DA87DA87DA87D %A87DFD1AFFA8FD0A7DFD52FFA8FD097DFD19FFA87DA87DA87DA87D7D7DFD %54FFA87DA87DA87DA87DA87DFD17FFA8FD097DFD55FFA8FD097DA8FD16FF %7DA87DA87DA87DA87DFD57FFA8A87DA87DA87DA87D7DA8FD14FFFD097DA8 %FD2CFFFD09A8FFA8FD21FFA8FD097DFD13FFA87D7DA87DA87DA87DA8FD2A %FFA8A87DA8FD077DA87DA87DA8A8FD1FFFA87D7DA87DA87DA87DA8FD11FF %A8FD097DA8FD27FFA8A8FD137DA8A8FD1DFFFD097DFD11FFA87DA87DA87D %A87DA8A8FD27FF7D7D7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A8A8FD1DFF7DA87DA87DA87D7D7DFD0FFFA8FD097DFD25FFA8FD1C7DA8A8 %FD1AFFA8FD087DA8FD0EFF7D7D7DA87DA87DA87DFD25FFA87D7DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D7DA8FD1AFFA8 %7DA87DA87DA87DA8FD0DFFA8FD087DA8FD24FFFD237DFD19FFA8FD087DA8 %FD0CFFA87DA87DA87DA87DA8FD24FF7D7D7DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD19FF7DA87DA87D %A87D7D7DFD0BFFA8FD087DA8FD23FFFD277DA8FD18FFFD087DA8FD0AFFA8 %7D7DA87DA87DA8A8FD23FF7D7D7DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD18FFA87DA87DA8 %7DA87DA8FD09FFA8FD087DFD23FFFD2B7DFD17FFA8FD087DFD09FFA87DA8 %7DA87DA87DA8FD22FF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D7D7DFD17FF7DA87D %A87DA87D7DA8FD08FFFD087DA8FD21FFA8FD167DA8A8FD167DFD16FFA8FD %087DFD07FFA87D7DA87DA87DA87DFD21FFA87D7DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87D7DA8FFA87D7DA87DA87DA87DA87DA87DA87DA87D %A87DA87D7DA8FD16FFA87DA87DA87DA87DFD07FFA8FD077DA8FD20FFA8FD %187DFFFFFFFD167DA8FD15FFA8FD087DFD06FF7DA87DA87DA87DA8FD21FF %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FFFFFFA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD16FF7DA87DA87DA8 %7DA8FD05FFA8FD087DFD21FFFD177DA8FD05FFFD167DFD16FFA8FD077DA8 %FD04FFA87DA87DA87DA87DA8FD20FF7DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87D7DA8FD05FFA87D7DA87DA87DA87DA87DA87DA87DA87D %A87DA87D7D7DFD15FFA87D7DA87DA87D7DA8FD04FFFD087DA8FD1FFFA8FD %187DFD07FFFD167DA8FD15FFFD077DA8FD04FFA87DA87DA87DA87DFD20FF %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD07FFA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD15FFA87DA87DA87D %A87DFFFFFFA8FD077DA8FD20FFFD187DA8FD07FFA8FD167DFD15FFA8FD07 %7DA8FFFFA87D7DA87DA87D7DA8FD1FFF7DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87D7DA8FD09FFA87D7DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87D7DA8FD15FF7D7D7DA87DA87DA8FFFFA8FD077DFD1FFFA8FD18 %7DFD0BFFFD157DA8FD14FFA8FD087DFFFF7DA87DA87DA87DA8FD1FFFA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD0DFFA8A87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DFD15FF7DA87DA87DA87DA8FFA8FD %077DA8FD1FFFFD157DA8A8FD0FFFA8A8FD127DA8FD14FFA8FD077DFFFF7D %7D7DA87DA87DFD1FFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8 %FD15FFA8A87DA87DA87DA87DA87DA87DA87DA87DFD15FFA87D7DA87DA87D %7DA8A8FD077DA8FD1EFFA8FD117DA8A8FD17FFA8A8FD0E7DA8FD14FFA8FD %077DA8A87DA87DA87DA87DFD1FFF7DA87DA87DA87DA87DA87DA87DA87DA8 %A8FD1DFFA8A87DA87DA87DA87DA87DA87DA8FD14FFA8A87DA87DA87D7DA8 %FD087DA8FD1DFFA8FD0E7DA8A8FD1FFFA8A8FD0A7DA8FD15FFFD077DA8A8 %7DA87DA87DA87DFD1EFFA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD1D %FFA8A87DA87DA87DA87DA87DA87DA8FD15FFA87DA87DA87DA8FD087DA8FD %1EFFFD137DA8A8FD17FFA8A8FD0F7DFD15FFFD077DA8A87DA87DA87DA8A8 %FD1EFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD15FFA8A8 %7DA87DA87DA87DA87DA87DA87DA87DA8FD15FFA87DA87DA87DA8FD087DA8 %FD1EFFFD177DA8A8FD0FFFA8A8FD127DA8FD15FFFD087DA87DA87DA87D7D %7DFD1DFFA87D7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %A8FD0DFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD16FFA87D %A87DA87DA8FD087DA8FD1DFFA8FD1B7DFD0BFFFD167DA8FD15FFFD087DA8 %7DA87DA87D7DA8FD1DFFA87D7DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA8A8FD09FFA8A87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DFD16FFA87DA87DA87DA8FD087DA8FD1DFFA8FD1B7DA8FD09FF %FD167DA8FD16FFFD087DA87DA87DA87DA8A8FD1DFF7DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD07FFA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87D7DA8FD16FFA87DA87DA87DA8FD08 %7DA8FD1CFFA8FD1E7DFD07FFFD177DFD17FFFD087DA87DA87DA87DA87DFD %1DFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA8A8FD05FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %FD17FFA87DA87DA87DA8FD087DA8FD1CFFA8FD1E7DA8FD05FFFD177DA8FD %17FFFD077DA8A87DA87DA87D7D7DFD1CFFA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD05FF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87D7D7DFD18FFA87DA87DA8FD0B7DA8FD1BFF %FD217DFFFFFFFD177DA8FD18FFFD077DA8FF7DA87DA87DA87DFD1CFFA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A8A8FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD18FF %A8A87DA87DA87D7DA8A8FD077DA8FD1BFFFD217DA8FFA8FD167DA8FD18FF %A8FD077DA8FF7DA87DA87DA87DA8FD1BFFA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87D7D7DFD19FFA87D7DA87DA87DA8FFA8FD08 %7DFD1BFFFD397DFD1AFFA8FD077DFFFF7DA87DA87DA87DA8FD1BFFA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD1BFF7DA87DA8 %7DA87DA8FFFFA8FD077DA8FD1AFFFD377DFD1BFFA8FD087DFFFFA87D7DA8 %7DA87D7DA8FD1AFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DFD1CFFA87DA87DA87DA87DA8FFFFFFFD077DA8FD1AFFFD357DFD1DFF %FD087DA8FFFFFFA87DA87DA87DA87DFD1AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87D7D7DFD1EFFA87DA87DA87DA87DFD04FFA8FD077DA8FD %19FFFD337DFD1EFFA8FD077DA8FD05FF7DA87DA87DA87DA8FD19FFA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA8A8FD1FFF7DA87DA87DA87D7DA8FD %04FFA8FD087DFD19FFFD2F7DA8A8FD1FFFA8FD087DFD06FFA87D7DA87DA8 %7DA8A8FD18FFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D7D7DFD22FFA87DA87DA8 %7DA87DA8FD07FFFD077DA8FD18FFA8FD2A7DA8A8FD23FFFD087DA8FD07FF %A87DA87DA87DA87DFD19FF7DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87D7D7DA87DFD25FFA87D7DA87D %A87D7D7DFD08FFFD097DFD17FFA8FD267DA8A8FD26FFA8FD077DA8FD09FF %7DA87DA87DA87DA8A8FD17FF7DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87D7D7DA8A8FD29FF7DA87DA87DA87DA8 %A8FD09FFA8FD077DA8FD16FFA8FD207DA8A8FD2BFFFD097DFD0AFFA87D7D %A87DA87D7D7DFD17FF7DA8FD077DA87D7D7DA87D7D7DA8FD077DA87DA8A8 %FD2FFFA8A87DA87DA87DA87DFD0CFFFD097DFD17FFA8FFA8A87DA87DA87D %A8FD057DA87DA87DFD04A8FFA8FD32FFA8FD087DFD0DFF7DA87DA87DA87D %A8A8FD61FF7DA87DA87DA87D7DA8FD0DFFA8FD077DA8FD60FFFD097DFD0E %FFA87D7DA87DA87DA87DA8FD5EFFA87D7DA87DA87DA87DFD10FFFD097DFD %5DFFA8FD087DA8FD11FF7DA87DA87DA87DA87DFD5CFFA87DA87DA87DA87D %7DA8FD11FFA8FD097DFD5AFFA8FD087DA8FD13FFA87DA87DA87DA87D7DA8 %FD58FFA87DA87DA87DA87D7D7DFD14FFA8FD097DA8FD57FFFD097DA8FD15 %FFA87D7DA87DA87DA87DA8A8FD55FF7DA87DA87DA87DA87DA8FD17FFFD0A %7DA8FD53FFFD097DA8FD19FF7D7D7DA87DA87DA87DA8FD52FF7D7D7DA87D %A87DA87D7DA8FD19FFA8FD097DA8A8FD4FFFFD0A7DA8FD1BFFA87DA87DA8 %7DA87DA87DA8FD4EFF7DA87DA87DA87DA87DA8A8FD1DFFA8FD097DA8FD4C %FFFD0B7DFD1FFFA87DA87DA87DA87DA87DA8FD4AFF7D7D7DA87DA87DA87D %7D7DFD20FFA8FD0B7DA8FD47FFFD0B7DFD23FFA87DA87DA87DA87DA87D7D %A8FD45FF7DA87DA87DA87DA87D7D7DFD24FFA8A8FD0B7DFD42FFA8FD0B7D %FD27FFA87DA87DA87DA87DA87D7D7DFD3FFFA8A87DA87DA87DA87DA87D7D %7DFD28FFA8A8FD0B7DA8A8FD3BFFFD0D7DFD2BFFA87DA87DA87DA87DA87D %A87DA8A8FD39FF7D7D7DA87DA87DA87DA87DA8A8FD2DFFA8FD0D7DFD35FF %A8A8FD0D7DFD2FFFA87DA87DA87DA87DA87DA87D7D7DA8A8FD31FF7D7D7D %A87DA87DA87DA87DA87DA8A8FD32FFFD0F7DA8A8FD2BFFA8A8FD0E7DA8FD %34FFA87D7DA87DA87DA87DA87DA87D7D7DA8A8FD28FFA87DA87DA87DA87D %A87DA87DA87DA87DA8FD37FFA8FD107DA8A8FD21FFA8A8FD117DFD3BFFA8 %7DA87DA87DA87DA87DA87DA87DA87D7D7DA8A8FD1BFFA8A87DA87D7D7DA8 %7DA87DA87DA87DA87DA87DA8A8FD3EFFFD157DFD04A8FD0DFFA8FFA8A87D %A8FD137DA8A8FD40FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %7D7DA87DA87DFD09A87DA87DA87D7D7DA87DA87DA87DA87DA87DA87DA87D %A87DA87DFD45FFA8FD377DA8A8FD48FFA8A87D7D7DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87D7D7DFD4EFFA8FD2E7DA8A8FD52FFA8A87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD57FFA87DA8FD217DA8A8FD5EFFA8A87DA8FD077DA87DA87DA8 %7DA87DA8FD077DFD04A8FD64FFA8FFA8A87DA8FD0B7DA87DFD04A8FD34FF %FF %%EndData endstream endobj 57 0 obj <</Filter[/FlateDecode]/Length 16229>>stream
-HWn8;pLQ/;x'a4-1'(PTo:8^[6Ūs8bJZIJPр<SRڣ= z`R
-^Q1"wa^2|r@t*g|^u hxO`|E:\;$'Yƾh"Ob??`F4{x?c[ط!F8
-.drB2p!<,^&PP>qh[J) kB)`PFG{rt֨s6O#1yn# }տ iJCun8ds`HFE<e E&<C#R=yALɲCtK6Qݮ*-߮FЯbt1Z:R\u-]AVN~Oo!\ v}CN"k@
- U;hHi(
-4X;D-\&4Zw\Z=)hLE/]
-k/s<;wH|鴧 ERIIp1{Yrx1
-β2 z#8/2Ew%bMoMo?ɧl,7,!C9StYbIoIJVKq#o‚-4k,a z*ɹɜZc# D,tѲSFaƮn#a ]=uP,>uqlRuUpX?o =܉Ч|=j#Ao
-M?ɯ)鎢5[}Z*OLJ.2MLgjQ
-Nz8"=MK Xg)Ifa" 8>;=w~%f從*~Ttx,WZ%'whcО̞ޓ:K(JK'_D$t`8.T?(1կ)3-
-$ֹqbMDoDb'KoT;}Eyu;Ì\NPbO P_ 2΢_C:'BA#;7B2xo%nG;0d;ep[-[ojW
-{|s]-e]:}-<z`šR
-$+1qKHp"D8+{S7ӔBՉ^D4%TR$ɉd ,)*pu#}/;v.("iU0Oؤ !u{ձkG?<MV/xDG4~zJ]6gų*<:M`-W>@Aa*Duc."qձQ(tsJFROW-t5YPD#xqsݾlk6.ոzW'ݓ@ܢ/w9봫#e:tҜL9e`{']lpIBXƦCqͻ <~6qdok," nq+ >3Jxcqo^FtChc5
-:*sGn:QUWvN'l! F3U. X
-?t}϶#{P0hǎPDq\eh
-y+ȯNB2 m}%)foq ag2iQ`chytT^Xmi!F
-$gPy
-',QM Tx#ǓM1~(^?đ,ȏ Z=ֱLi,JPQg h`H#9Iv$KK6|/]^`?^S ^4wT% V\.r'HBpcUR)% 0 7V(6]*kRfS ­gaR@q̹X<ŪBm +6{ץ<JS-p
-MNnD|
-]'T;"Z\ :tʰ!71Ž *;  I -޼T𪂭0!d3c-:s7?trܨbWMƠ&ܣe*|I$ȡ(dr,ʆH0<+CCvroZD.HAX-xFuo&EKLc1e.V<}
-1aFGl7;زWL1t$a95.fwq'2֓@:QcjeЅiRB}aY
-ngeQV{s{(FXU3 (HK9dkfdn+ÑdQvư/a0e^?D<뷟jC[3N|LR ;1cFꅉЫB.R R?됁PnV_6GWh^>y8At5*:U1C ' SCE]X
-w
-w*$ ),OQتDLjttV/ura* PbgU%B/!u#+qSڵ 1噣1<&1v1婼r &yd|cp2SiJY ˉCOr(UyeCpn9z7o:P79CO *UYB
-cdc&?[SBbMDM`́;j&-<&U&G:ܹ*o`|a
-N^GʥPHI%#z{ugTxvZzFdIƻoǷ/g+6;M'덵՞k|IaƻΎmrx͵{m>^}6j}4|"3ѝ4l7ȨgVjɂ?ˇB6nntft;mZc{o޾ZqցٺuvoT;k?ڇ6[6کaZkV3n[]m94SћcEßwpOSm60K' 6Wki7mwtY]Y~~ۛ7#]7kN-bҏCѵ߭npSWljyts8Wz\Q, JG5Qcg47gίkNL-X6t2"qU69©`cߦl;BM 9 KS*[)mN/LOI/9
-}
->?);9Pq*@}rybPF7uy=E禚ǽsF_d)Y
-N`
- 6n`+MvGTs׬g.VӢB&)Rz-e;F Sl3rU[]'5% 0BXvƆ*1Vb*8A:#JhId#ؘ
-et}2ROSM I46PW! BI⃥@y,Sy#H6Uiy!`[͕_1 T~>M~6Ȍ%"Gad̈́4޿wxpU
-x#3NpU'bfJ>AxjK]UFo&G,ƯaKUV< H V
-ۊ2GʲW&)؃=̽6)PDled[w^M[Q!TIV⁃\sPxA#k=+435Yb9%Qgⴷ0 <|tG?h6mI'nAa bЮ\`rQVBٜɋ@Pǫ28;W_gcF 2 x3x潟V۶(zpwb SQ*?6wj=Cmxzګc#$1p7hL}jΚTp0)3^n!pQp- O&%0Ǻf9NJr9:b9mzbC %sW4u>(HhpXmqܧR7 ;jB'Ո3a`dEPاbP/o 6Y@ZbYoK30>3ҚBXOE%" j`c?g##{_ WX_ $=;c=S MwT)
-[t6WE/B[㝛bWQ*2=>Hf IM8h I*N NxWRN^$7O;",̃F\hS|^6o-N 94"VhHwbNqK\)д"4 (ocg844ٟeoݨ(UA V!/N TA=մ(-a `hm:-{#`|)I;̯y;ճXT}L6|WxPsf9 kQӡ{z)W IN-;^,R}9kn
-|VEO>bWzE~Ҋ
-n(|p |UNwG1
-x'cݾaeF7k Œ ʡWO{K"ov~}Q7D<n5gꫬ‡a1eIaT!i1(0Kj닐)R^~`dN)@6ZPddSWWx;:*ASvɇqqqT-*$
-Cf]L51][bQt=ڕfTd!GR[? ߏ|7_?0=.~?.*Tl(+ /2de l0/Tqm#J(ҫV-0il˼6aB+Vf
-y;7?tM^j"-E =|u`EMK^U5y4LUX<},s_Lq@Bg}]$(x,]sW&!! Ewf@E}NpF eP Jj҆iD8#v [=^ %a,zxH; IզI?XFEBL|9ǁ_$_$ϐ
-ꑸ0̴klinRڞﷶ+_l2.MSOq*>`e{⡅^(06 QFSd{<#1wva " W{M턠]t>|zj $r4 4sCc'C]H08d3nhj
-w[vzVV9[*B~f3W`9+S,k?W q/.8EmmAW
-B`d6$uSdX.$ais*,?' 0tvI6<>-[#%{O$<zq=" !)N,9n$TS-(t(aqE㝟t+ץӇh""ٖT
-mg$i!fb'Cb?.{դ>*RoF!,&B؋3xU%
-ԃ]It^%;r~6݄C)L ܻk?w=g+r;sx,\%"@
-2/Q[gDd#RHwN!IL_mQ"LM'_CuHzHE :[W=ᅛ&Îq0;7N
- k1 Vl&6m4gS~HSAp8jZ>7g;]MTEbLA#B4N+OK[M&!OL2׽/+rv.xIW&MH9Q(;)R'L߽-I?b ZS%Ԫ1M7
-2zFj$#JU J{jlϲ9kxۇlR?`agOjTww |\K6j'% ,l~do8J{ѝS6m_t"-K8x \[NB: Z|}<4N n)X] {2pPw읋!; P\
-rv[B]4ؼ5a,?;Xh5y(Sa wӽ=%B甩O[#Rh0hz*ƘV*?'<h>+0,&m Z-&\.EaWQB豭jFfAL"xhci/
-+Lwu:- ZO
-tX 6:`"tenWxtٛ1fuQ` <Dfr#AMdT1cvޡQAE(yiHw%d|ȫPiSQ
-5ٷ~n*LY_
-D6Kh6'(bOmx 6 a-CSJEʡW@᭞ў mT`9a$KҩE8EӅ<HJ:?HJ3őNAeQS9π*&}-bt:`8Ug!Z] EztA: OrJU
-?SB:)+{\i?#Xa|~ӌT6>Xђ[Ǣ7\-Ÿ́ђWa9CUPS~:;3v꩏@{@.{3WvZ[7[& 4dKҏtCn_;!{G?Wbh늵hf퉺Tu}_žO6x(g.vƂ\op0~Hз+м' ͢B}Խ?C:h>+43١r-V%BQpC%i:D(PisXP$CõF yM4LI6.j2
-y{RQތu#7.'U 4WBo؋>(?khɲjƧLϜC/L-uͧ7tE,C.{$4˷$KAFɝ]LJctRd$ߩ?m/P<>/嬰F@+#rj
-ӻ3'pvWrX\>M#$5+"Jӆ}@GvPllX !+Q-/WPDө\WM~,^[ro6L4Zd>r~ -Cq!|fյ1a. uY:>%vΑ,7{eī4YwE:N7Cy`_GW|9=We5AY2RdC"<O_uW16 dnd#|i0ջ.v.Y=zv1UoOjLؙQ?1*J}cۿfB;?n+1w\ 1I(DJxiӋd+U<=̯֫Iul6e`ZvqW!<|ܖKS-/.zfs#J~D?=j1ij-yH +&"dXzi@ouL;`cgGYYpBָ$x_Dr?Ygm%M)ȺnbU=ܪ76!=D_E+SHƃJF
-IUVp?nfz|dU4P:{
-Ƒá؛Dž&T[Rdt5Zfz}&m^R6:a 6 bdv"5i /yb=G<kǯJ=ZZt
-2 
-.@A!tڈ "FwbC~M5^m<xd{򦖈3QWB9 1}&Nr'Uf8ʇQcM$O>Y'WV\켕ag@0 ] uttIQ'+њ i@eNh໢I[3 @(04hi(F;d`j;>1eG1LG>ȩXy<ȿJ)K"G>Uc9oebA< k/]ͷtf^@VY"d ]4c^ޠ0S32 Z sΉ.r84焖
-L uB1_ 'ɪ8rqDZ.]n\[ A0i!ct =9S;r GZ;Q1g{*87u6Ya4B5k!aax5ha1g԰yE@5U.QU>ILNLh1>T$TQJH~CNt慰M/`j:v,!Yt\Jx<Z)^Y d\?8dd |ksW* V?ͭ)x gj
-̜fUzWҤKΎIٶ4w1C4U!p68X!uGzܔf9y}ӵ81>{ARzkyq9FK.1ʡ"\8efsQ :2t)>9-59` ē#Q6/M"[?KMׯ$k%$Mjuef aHiZi0'SãSN{2&߉ɛfC-$Xz
-~ =y/`0Tvwٱ.;&Sh)'/l)s^؅CGxf`k%K饦
-"s^I|d)^3>2sgk9# sOw Su}*\i4o^nh!IIUv'Ƭ
-)WvOABdʕ4§eFƹ#ޱᎽ5υ'->hLrr~q$h ֡ˆ~L,7+\܋WHv2uU%,íT`46*|w܏I;mVryC1r'\`zyr6,o֤ZfɚeBu,CV1DmBD)&q'e&CRdѦKKK'`Ckp'-UЕA
-y-pZ&ݝߕP"z!G
-/ajHmwIҷX*) R~!0o:]?&,3P;Վ~X@}oF9PM_3NrlvR!ek8tD)P`L$9ԙY|h`/b%l哕h}MD Q+Nا
-9໧ظ&ҭ)A:
-^b~lz|װ9G(c^^!Sa>#~DqK=T6xl-2ޏ]o1ey*
-S!*GiZLuGW_!c=v'e s1r\K4Dž%@_X˥@H*9/ۦT(>p/J\SS{0K&ɱF t8bw߰v^M} .+V_S}q %?<sq}Yn #z%}NJ~"݊%By(h0$(7#`bށ֯e+ !PV/c
- q,KOx_̨J|\'96ȫ H)AUCP@)Ztx@ܗjFgM],˃BwR֨!Y!*VDX&)ʝV7_K8-KEJ,_:|KId~8KQ'<|r!G
-HWBN}<pI*X!R zU nl-9sfJlj:mJlt3,Q8O*GuLOsIv_mȲ~1. =^R$YP%έu 7K|yiM vo`{**~H JR!$
-
-IA]pJ~_8-襓*XT WD`=6WBR4d11CExX_;Tc]μNMj
-|P ~UnRhb 95dW$3lymu2\#d$G: Y%c(+
-(|Mxq:]_2;OZF
-
-zl2CǨaB ]րJY.馛ًlM2j$|.
-m+\ :]б+#nΨ.}h[DInFD7Srú Ydj,ԡvT׾+aͳ'T4 Z
-!X)d屮WdSgļPƶ۩U.[RSΦ ރ#chb1MZCؑa ;ҿ.!Pt/I|dX2yam\w⻁MG+%f
-_ϼ~.gq C0Og g]B 6g q80:s2
-ܕ: w%c'iڦ8A* t00xRapa'[
-vJW\S;.Ӷ۾>qekL0 hJT`kgbPAZe2 ']z 
-Ít|{]5y:o 논huW3{8|wE Iac /m0"it4~!ܪwL11t;E]>Yrb::u 0끷9ɾ(tOohM9d3W
-¨pÙԭf J|0S Ow2y^9<(%v ٴG N߁/>Ώ(?": )I
-T%5r1/`'l/9%  1^tmW6|gg1YӱR;1650ԛ'㈀8W_h(oYŬ]lӻC3 ) r0 dO_efÀe<WN<)P}_c <ɡS!c}YaF5+Exlڻ[NcXPٰH!cm<N(ȊdFVX $2b>E)1[..C #`#*)7t0X"'&_y~-ȕ
-bKfP0gq\)VPP)Ji+/[j$*rͰiGYfJ?a,psFx# c$-7q9Vv:gRCYJ4"
-*ŗS9s@#}9, 4Te>4V_6\=Sijb
-R
-7ĺrjmU{ ;GKpʏd(" ]R̋کv~e,xs -7[P}1Tݟ^)mU&NQm料AgTyHz, ):
-K3 -L8rhQ\ⶑ?CW|:Fs*nsW7ӝмtɉ*2XHaZh\71EgְU@NZǂKCvjZnTJ)h
-7(J36t Cg
-Qr+'H4"ډ(cAomh9֣H>xnP1Wˡ_ϝct9 FqJ</)ЩX 1FmT_ת9[q)&~MfLnw݈Rӧ`11b|77]E 6 F^(+S"nbbO+{Ƹ ͕!&Y8B.w!5 w nĮAgGd#Ex?>ἅgCy)⋄7c=*
-+
-Uy+?dWy\A"!-iiQZkE;TI}f̙sJߪ^/Go
-$y: jK,՟=]>A}! <C-Vh1d fXWМ@`$"aؠ4V4x7V=ʴiJ 0-I]z/d3sJ5&懷&sZW{bv
-MLݡŠPG)|,> 4|>!NZtR09Q9zi &-BBy_Ѹ%=NA~wꝩ7~;>|;keݓ x9^ G2"˙;oyeOn矵ᢙp-EFSBv]aܳJy3d]+3AM5xgs=gK>^
-OFO'fFc
-{
-@m6FP61\
-pop
-Em֨{? T{6H҉;NnHȶ޺
-[MMZHcDPyz͞dȷݘm1'L5ν)`?LPuJP8Pg0^K3*~m#- տhԒܘ~jsm8ކoRրMrG h tу(LƷhQ+Om
-Ld<r
-+tXqgP:SjϺqwk@$ٝ[`7pr*iE
-2wOU
-X<-7p4ݛ'A?M^lvSVz
-N
-6@PknAD4TMlW&R^fBI6Bwa<[]~}
-` b4!#`ɣoAGzun=+N t R$ H[wf4=K&fOy晙=5S[Q
-ET)r(] CoX z]P LMg.D@nO&(ew5]ǧׂv"<3ȖiR\W]!+bBtS-ٴl3H?.c rI,&y柦˸5ufY 
-$[K$ ޖRQ&|#N6 'V%=՚C*09#~{(n/dqf/?8Z&ZR%qp| @T~X=&&Nq 3bاu6Q^DVѢ"dZ09ze@JC=$$qwS0
- P?H+vSO`.>80*$EG+G$Tk֨Ϫ#q Ao+(0Wp%JyJ,R%5ct -=ݥ"g&(UJupp]ї#HDer
-`O:c4ʜO~T|`xlDixBU Qų<I&\(n4:B0XϮ#g$IjgUīn>pƎhN2t<5sܑj~hg[ٚ!*A3agyhZNА,=M] m2ƀe9_% jsR/0ED`6;
-.ԭYM$-pnNQABE 'x;D!l־~*Z5Rc<<ONzy:!Vv4
-
-V|ǪP
-B=Q]T,4C!m-:![=v^ e ;L
-ls`M ;\7ř{r]E"&* ȿULu:t!:y+<}ݭ[SXHԩ
-MLţ++ t>\M|J
-%Hp)ol5/}NɗL3:K*&U-{Y3B Y!`sو
-V%o@O!pXS(ol > W''
->*fJ JϠDr
-P~
-KTۈ;Z8TZo
-W`KXrk6V Lm>1QyqW >O9ía%M^^kζt;U)^W.T`v/p\Jzc)V5B>8Fx^m?S[n?05'RxYh;kkGo|.
-'ĠɃtox,<M)M:.] ]./
-{px2QcX]G gyOQ]'˶%XaJGwu?Gc&/qqP;ju=*b65STׯvgH4
-ǓAշ޳
-eAf0PZ?`Bxأ>)BSuHyo5ɛw.Ͽ|SWce?2 Y_]ߵ9% >EBk|hZmrs6Ũucѻ\Sy8_ﺏߢEZjo7bR4X*F(k~n 4}'"jC.-·5\;Dp6rgvt.^XGZgj+]9gb ~(Y+-c><ז+N0f\rH͝vBq:㕑sw6]=ϑ>R[;$lR#-4YY+&VJMZ`[-m֕ӃpD9.c\pcb.r\24E,mpRyX2r),!X,Ck- A&,Sx
-OWdF"ԏw^Nnp:z٨y7A۠=`Mp
-{d2_y
-+ {F =$*1 iRK1r~0Xl&K K.$YAU샛P>r,fjVSN 棌1ϓά7(MHBK%B
-ASy?T n=Ǧ;_':r:EQ<5 -a
-C(BZkɤ-R vW'mWO?Q~؉O~+ȈN#?
-0000000016 00000 n
-0000000159 00000 n
-0000016706 00000 n
-0000000000 00000 f
-0000063411 00000 n
-0000000000 00000 f
-0000016757 00000 n
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000063481 00000 n
-0000063512 00000 n
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000020437 00000 n
-0000063597 00000 n
-0000017158 00000 n
-0000017316 00000 n
-0000020870 00000 n
-0000020624 00000 n
-0000020747 00000 n
-0000018097 00000 n
-0000018739 00000 n
-0000019249 00000 n
-0000019733 00000 n
-0000017381 00000 n
-0000017536 00000 n
-0000017584 00000 n
-0000020375 00000 n
-0000020138 00000 n
-0000020313 00000 n
-0000020251 00000 n
-0000020076 00000 n
-0000020508 00000 n
-0000020539 00000 n
-0000020944 00000 n
-0000021127 00000 n
-0000022431 00000 n
-0000033714 00000 n
-0000050016 00000 n
-0000063622 00000 n
-trailer <</Size 60/Root 1 0 R/Info 59 0 R/ID[<A9574215A3794EB69EDC5F2A9F73D83F><4EB2C399D71C4705888A21443A38AEB3>]>> startxref 63763 %%EOF \ No newline at end of file
diff --git a/platform/macos/sdk/nl.lproj/Localizable.strings b/platform/macos/sdk/nl.lproj/Localizable.strings
deleted file mode 100644
index 8e7b0ae45f..0000000000
--- a/platform/macos/sdk/nl.lproj/Localizable.strings
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Inzoomen";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Uitzoomen";
-
diff --git a/platform/macos/sdk/pl.lproj/Localizable.strings b/platform/macos/sdk/pl.lproj/Localizable.strings
deleted file mode 100644
index d86155cbde..0000000000
--- a/platform/macos/sdk/pl.lproj/Localizable.strings
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Powiększ";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Pomniejsz";
-
diff --git a/platform/macos/sdk/pt-BR.lproj/Localizable.strings b/platform/macos/sdk/pt-BR.lproj/Localizable.strings
deleted file mode 100644
index 72fa43b657..0000000000
--- a/platform/macos/sdk/pt-BR.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Falha ao carregar mapa devido a um erro desconhecido.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Falha ao carregar mapa porque o estilo não pode ser carregado.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Falha ao carregar mapa porque o estilo está corrompido.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Falha ao carregar mapa porque o estilo não pode ser encontrado ou é incompatível.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Aumentar Zoom";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Reduzir Zoom";
-
diff --git a/platform/macos/sdk/pt-PT.lproj/Localizable.strings b/platform/macos/sdk/pt-PT.lproj/Localizable.strings
deleted file mode 100644
index 1385193989..0000000000
--- a/platform/macos/sdk/pt-PT.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Não foi possível carregar o mapa porque ocorreu um erro.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Não foi possível carregar o mapa porque o estilo não foi carregado.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Não foi possível carregar o mapa porque o estilo está corrompido.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Não foi possível carregar o mapa porque o estilo não foi encontrado ou não é compatível.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Apromixar";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Afastar";
-
diff --git a/platform/macos/sdk/ru.lproj/Localizable.strings b/platform/macos/sdk/ru.lproj/Localizable.strings
deleted file mode 100644
index 8554c9ebd1..0000000000
--- a/platform/macos/sdk/ru.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Не удалось загрузить карту из-за неизвестной ошибки.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Не удалось загрузить карту из-за ошибки загрузки стиля.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Не удалось загрузить карту из-за ошибки в стиле.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Не удалось загрузить карту так как стиль не найден или несовместим.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Приблизить";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Отдалить";
-
diff --git a/platform/macos/sdk/sv.lproj/Localizable.strings b/platform/macos/sdk/sv.lproj/Localizable.strings
deleted file mode 100644
index 0612033f3d..0000000000
--- a/platform/macos/sdk/sv.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Misslyckades med att ladda kartan på grund av ett okänt fel.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Misslyckades med att ladda kartan för att kartstilen kunde inte laddas.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Kunde inte ladda kartan för att kartstilen är korrupt.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Kunde inte ladda kartan för att kartstilen kunde inte hittas eller är den inkompatibel.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Zooma In";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Zooma Ut";
-
diff --git a/platform/macos/sdk/uk.lproj/Localizable.strings b/platform/macos/sdk/uk.lproj/Localizable.strings
deleted file mode 100644
index 74ec8ebaee..0000000000
--- a/platform/macos/sdk/uk.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Неможливо завантажити мапу через невідому помилку.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Неможливо завантажити мапу, бо неможливо завантажити стиль.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Неможливо завантажити мапу, через помилки в стилі.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Неможливо завантажити мапу, бо неможливо знайти стиль або він несумісний.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Збільшити";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Зменшити";
-
diff --git a/platform/macos/sdk/vi.lproj/Localizable.strings b/platform/macos/sdk/vi.lproj/Localizable.strings
deleted file mode 100644
index 11256ca5e9..0000000000
--- a/platform/macos/sdk/vi.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "Bản đồ bị thất bại khi tải vì lỗi không rõ.";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "Bản đồ bị thất bại khi tải vì không thể tải bảng kiểu.";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "Bản đồ bị thất bại khi tải vì bảng kiểu bị hỏng.";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "Bản đồ bị thất bại khi tải vì không tìm thấy bảng kiểu hoặc bảng kiểu không tương thích.";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "Phóng to";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "Thu nhỏ";
-
diff --git a/platform/macos/sdk/zh-Hans.lproj/Localizable.strings b/platform/macos/sdk/zh-Hans.lproj/Localizable.strings
deleted file mode 100644
index 40b61a2dba..0000000000
--- a/platform/macos/sdk/zh-Hans.lproj/Localizable.strings
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "放大";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "缩小";
-
diff --git a/platform/macos/sdk/zh-Hant.lproj/Localizable.strings b/platform/macos/sdk/zh-Hant.lproj/Localizable.strings
deleted file mode 100644
index e5cf4b7695..0000000000
--- a/platform/macos/sdk/zh-Hant.lproj/Localizable.strings
+++ /dev/null
@@ -1,27 +0,0 @@
-/* User-friendly error description */
-"LOAD_MAP_FAILED_DESC" = "發生不知名錯誤,無法載入地圖。";
-
-/* User-friendly error description */
-"LOAD_STYLE_FAILED_DESC" = "載入樣式表時發生錯誤,無法載入地圖。";
-
-/* Accessibility title */
-"MAP_A11Y_TITLE" = "Mapbox";
-
-/* User-friendly error description */
-"PARSE_STYLE_FAILED_DESC" = "樣式表有毀損,無法載入地圖。";
-
-/* User-friendly error description */
-"STYLE_NOT_FOUND_DESC" = "找不到樣式表或樣式表不兼容,無法載入地圖。";
-
-/* Label of Zoom In button */
-"ZOOM_IN_LABEL" = "+";
-
-/* Tooltip of Zoom In button */
-"ZOOM_IN_TOOLTIP" = "放大";
-
-/* Label of Zoom Out button; U+2212 MINUS SIGN */
-"ZOOM_OUT_LABEL" = "−";
-
-/* Tooltip of Zoom Out button */
-"ZOOM_OUT_TOOLTIP" = "縮小";
-
diff --git a/platform/macos/src/MGLAnnotationImage.h b/platform/macos/src/MGLAnnotationImage.h
deleted file mode 100644
index d7336133d1..0000000000
--- a/platform/macos/src/MGLAnnotationImage.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#import <AppKit/AppKit.h>
-
-#import "MGLFoundation.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- The `MGLAnnotationImage` class is responsible for presenting point-based
- annotations visually on an `MGLMapView` instance. Annotation image objects pair
- `NSImage` objects with annotation-related metadata. They may be recycled later
- and put into a reuse queue that is maintained by the map view.
- */
-MGL_EXPORT
-@interface MGLAnnotationImage : NSObject <NSSecureCoding>
-
-#pragma mark Initializing and Preparing the Image Object
-
-/**
- Initializes and returns a new annotation image object.
-
- @param image The image to display for the annotation.
- @param reuseIdentifier The string that identifies this annotation image in the
- reuse queue.
- @return The initialized annotation image object or `nil` if there was a problem
- initializing the object.
- */
-+ (instancetype)annotationImageWithImage:(NSImage *)image reuseIdentifier:(NSString *)reuseIdentifier;
-
-#pragma mark Getting and Setting Attributes
-
-/** The image to display for the annotation. */
-@property (nonatomic, readonly) NSImage *image;
-
-/**
- The string that identifies this annotation image in the reuse queue.
- (read-only)
-
- You specify the reuse identifier when you create the image object. You use this
- type later to retrieve an annotation image object that was created previously
- but which is currently unused because its annotation is not on-screen.
-
- If you define distinctly different types of annotations (with distinctly
- different annotation images to go with them), you can differentiate between the
- annotation types by specifying different reuse identifiers for each one.
- */
-@property (nonatomic, readonly) NSString *reuseIdentifier;
-
-/**
- A Boolean value indicating whether the annotation is selectable.
-
- The default value of this property is `YES`. If the value of this property is
- `NO`, the annotation image ignores click events and cannot be selected.
- */
-@property (nonatomic, getter=isSelectable) BOOL selectable;
-
-/**
- The cursor that appears above any annotation using this annotation image.
-
- By default, this property is set to `nil`, representing the current cursor.
- */
-@property (nonatomic, nullable) NSCursor *cursor;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/platform/macos/src/MGLAnnotationImage.m b/platform/macos/src/MGLAnnotationImage.m
deleted file mode 100644
index 8d715b427b..0000000000
--- a/platform/macos/src/MGLAnnotationImage.m
+++ /dev/null
@@ -1,63 +0,0 @@
-#import "MGLAnnotationImage_Private.h"
-
-@interface MGLAnnotationImage ()
-
-@property (nonatomic) NSImage *image;
-@property (nonatomic) NSString *reuseIdentifier;
-@property (nonatomic, strong, nullable) NSString *styleIconIdentifier;
-
-@end
-
-@implementation MGLAnnotationImage
-
-+ (instancetype)annotationImageWithImage:(NSImage *)image reuseIdentifier:(NSString *)reuseIdentifier {
- return [[self alloc] initWithImage:image reuseIdentifier:reuseIdentifier];
-}
-
-- (instancetype)initWithImage:(NSImage *)image reuseIdentifier:(NSString *)reuseIdentifier {
- if (self = [super init]) {
- _image = image;
- _reuseIdentifier = [reuseIdentifier copy];
- _selectable = YES;
- }
- return self;
-}
-
-+ (BOOL)supportsSecureCoding {
- return YES;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)decoder {
- if (self = [super init]) {
- _image = [decoder decodeObjectOfClass:[NSImage class] forKey:@"image"];
- _reuseIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"reuseIdentifier"];
- _cursor = [decoder decodeObjectOfClass:[NSCursor class] forKey:@"cursor"];
- _selectable = [decoder decodeBoolForKey:@"selectable"];
- }
- return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)coder {
- [coder encodeObject:_image forKey:@"image"];
- [coder encodeObject:_reuseIdentifier forKey:@"reuseIdentifier"];
- [coder encodeObject:_cursor forKey:@"cursor"];
- [coder encodeBool:_selectable forKey:@"selectable"];
-}
-
-- (BOOL)isEqual:(id)other {
- if (self == other) return YES;
- if (![other isKindOfClass:[MGLAnnotationImage class]]) return NO;
-
- MGLAnnotationImage *otherAnnotationImage = other;
-
- return ((!_reuseIdentifier && !otherAnnotationImage.reuseIdentifier) || [_reuseIdentifier isEqualToString:otherAnnotationImage.reuseIdentifier])
- && _selectable == otherAnnotationImage.selectable
- && ((!_cursor && !otherAnnotationImage.cursor) || [_cursor isEqual:otherAnnotationImage.cursor])
- && (_image == otherAnnotationImage.image || [[_image TIFFRepresentation] isEqualToData:[otherAnnotationImage.image TIFFRepresentation]]);
-}
-
-- (NSUInteger)hash {
- return _reuseIdentifier.hash + @(_selectable).hash + _image.hash;
-}
-
-@end
diff --git a/platform/macos/src/MGLAnnotationImage_Private.h b/platform/macos/src/MGLAnnotationImage_Private.h
deleted file mode 100644
index 428f1db5d9..0000000000
--- a/platform/macos/src/MGLAnnotationImage_Private.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#import "Mapbox.h"
-
-@interface MGLAnnotationImage (Private)
-
-/// Unique identifier of the sprite image used by the style to represent the receiver’s `image`.
-@property (nonatomic, strong, nullable) NSString *styleIconIdentifier;
-
-@end
diff --git a/platform/macos/src/MGLAttributionButton.h b/platform/macos/src/MGLAttributionButton.h
deleted file mode 100644
index 3e0b53a6d0..0000000000
--- a/platform/macos/src/MGLAttributionButton.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#import <Cocoa/Cocoa.h>
-
-#import "MGLFoundation.h"
-#import "MGLTypes.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class MGLAttributionInfo;
-
-/// Button that looks like a hyperlink and opens a URL.
-MGL_EXPORT
-@interface MGLAttributionButton : NSButton
-
-/// Returns an `MGLAttributionButton` instance with the given info.
-- (instancetype)initWithAttributionInfo:(MGLAttributionInfo *)info;
-
-/// The URL to open and display as a tooltip.
-@property (nonatomic, readonly, nullable) NSURL *URL;
-
-/// Opens the URL.
-- (IBAction)openURL:(nullable id)sender;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/platform/macos/src/MGLAttributionButton.mm b/platform/macos/src/MGLAttributionButton.mm
deleted file mode 100644
index 3df415f60d..0000000000
--- a/platform/macos/src/MGLAttributionButton.mm
+++ /dev/null
@@ -1,55 +0,0 @@
-#import "MGLAttributionButton.h"
-#import "MGLAttributionInfo.h"
-
-#import "NSBundle+MGLAdditions.h"
-#import "NSString+MGLAdditions.h"
-
-@implementation MGLAttributionButton
-
-- (instancetype)initWithAttributionInfo:(MGLAttributionInfo *)info {
- if (self = [super initWithFrame:NSZeroRect]) {
- self.bordered = NO;
- self.bezelStyle = NSRegularSquareBezelStyle;
-
- // Extract any prefix consisting of intellectual property symbols.
- NSScanner *scanner = [NSScanner scannerWithString:info.title.string];
- NSCharacterSet *symbolSet = [NSCharacterSet characterSetWithCharactersInString:@"©℗®℠™ &"];
- NSString *symbol;
- [scanner scanCharactersFromSet:symbolSet intoString:&symbol];
-
- // Remove the underline from the symbol for aesthetic reasons.
- NSMutableAttributedString *title = info.title.mutableCopy;
- [title removeAttribute:NSUnderlineStyleAttributeName range:NSMakeRange(0, symbol.length)];
-
- self.attributedTitle = title;
- [self sizeToFit];
-
- _URL = info.URL;
- if (_URL) {
- self.toolTip = _URL.absoluteString;
- }
-
- self.target = self;
- self.action = @selector(openURL:);
- }
- return self;
-}
-
-- (BOOL)wantsLayer {
- return YES;
-}
-
-- (void)resetCursorRects {
- if (self.URL) {
- // The whole button gets a pointing hand cursor, just like a hyperlink.
- [self addCursorRect:self.bounds cursor:[NSCursor pointingHandCursor]];
- }
-}
-
-- (IBAction)openURL:(__unused id)sender {
- if (self.URL) {
- [[NSWorkspace sharedWorkspace] openURL:self.URL];
- }
-}
-
-@end
diff --git a/platform/macos/src/MGLCompassCell.h b/platform/macos/src/MGLCompassCell.h
deleted file mode 100644
index 5ed70dcb06..0000000000
--- a/platform/macos/src/MGLCompassCell.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Cocoa/Cocoa.h>
-
-/// Circular slider with an arrow pointing north.
-@interface MGLCompassCell : NSSliderCell
-@end
diff --git a/platform/macos/src/MGLCompassCell.m b/platform/macos/src/MGLCompassCell.m
deleted file mode 100644
index b3a4ad4544..0000000000
--- a/platform/macos/src/MGLCompassCell.m
+++ /dev/null
@@ -1,34 +0,0 @@
-#import "MGLCompassCell.h"
-
-@implementation MGLCompassCell
-
-- (instancetype)init {
- if (self = [super init]) {
- self.sliderType = NSCircularSlider;
- // A tick mark for each cardinal direction.
- self.numberOfTickMarks = 4;
- // This slider goes backwards!
- self.minValue = -360;
- self.maxValue = 0;
- }
- return self;
-}
-
-- (void)drawKnob:(NSRect)knobRect {
- // Draw a red triangle pointing whichever way the slider is facing.
- NSBezierPath *trianglePath = [NSBezierPath bezierPath];
- [trianglePath moveToPoint:NSMakePoint(NSMinX(knobRect), NSMaxY(knobRect))];
- [trianglePath lineToPoint:NSMakePoint(NSMaxX(knobRect), NSMaxY(knobRect))];
- [trianglePath lineToPoint:NSMakePoint(NSMidX(knobRect), NSMinY(knobRect))];
- [trianglePath closePath];
- NSAffineTransform *transform = [NSAffineTransform transform];
- [transform translateXBy:NSMidX(knobRect) yBy:NSMidY(knobRect)];
- [transform scaleBy:0.8];
- [transform rotateByDegrees:self.doubleValue];
- [transform translateXBy:-NSMidX(knobRect) yBy:-NSMidY(knobRect)];
- [trianglePath transformUsingAffineTransform:transform];
- [[NSColor redColor] setFill];
- [trianglePath fill];
-}
-
-@end
diff --git a/platform/macos/src/MGLMapView+IBAdditions.h b/platform/macos/src/MGLMapView+IBAdditions.h
deleted file mode 100644
index 29d914a7d9..0000000000
--- a/platform/macos/src/MGLMapView+IBAdditions.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#import <Foundation/Foundation.h>
-
-#import "MGLMapView.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface MGLMapView (IBAdditions)
-
-#if TARGET_INTERFACE_BUILDER
-
-// Core properties that can be manipulated in the Attributes inspector in
-// Interface Builder. These redeclarations merely add the IBInspectable keyword.
-// They appear here to ensure that they appear above the convenience properties;
-// inspectables declared in MGLMapView.h are always sorted before those in
-// MGLMapView+IBAdditions.h, due to ASCII sort order.
-
-// We want this property to look like a URL bar in the Attributes inspector, but
-// just calling it styleURL would violate Cocoa naming conventions and conflict
-// with the existing NSURL property. Fortunately, IB strips out the two
-// underscores for display.
-
-/** URL of the style currently displayed in the receiver.
-
- The URL may be a full HTTP or HTTPS URL, a Mapbox
- style URL (`mapbox://styles/<user>/<style>`), or a path to a local file
- relative to the application’s resource path. Leave this field blank for the
- default style. */
-@property (nonatomic, nullable) IBInspectable NSString *styleURL__;
-
-// Convenience properties related to the initial viewport. These properties
-// are not meant to be used outside of Interface Builder. latitude and longitude
-// are backed by properties of type CLLocationDegrees, but these declarations
-// must use the type double because Interface Builder is unaware that
-// CLLocationDegrees is a typedef for double.
-
-/** The initial center latitude. */
-@property (nonatomic) IBInspectable double latitude;
-
-/** The initial center longitude. */
-@property (nonatomic) IBInspectable double longitude;
-
-@property (nonatomic) IBInspectable double zoomLevel;
-
-// Renamed properties. Interface Builder derives the display name of each
-// inspectable from the runtime name, but runtime names don’t always make sense
-// in UI.
-
-/** A Boolean value that determines whether the user may zoom the map, changing
- its zoom level. */
-@property (nonatomic) IBInspectable BOOL allowsZooming;
-
-/** A Boolean value that determines whether the user may scroll around the map,
- changing its center coordinate. */
-@property (nonatomic) IBInspectable BOOL allowsScrolling;
-
-/** A Boolean value that determines whether the user may rotate the map,
- changing its direction. */
-@property (nonatomic) IBInspectable BOOL allowsRotating;
-
-/** A Boolean value that determines whether the user may tilt the map, changing
- its pitch. */
-@property (nonatomic) IBInspectable BOOL allowsTilting;
-
-#endif
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/platform/macos/src/MGLMapView+IBAdditions.mm b/platform/macos/src/MGLMapView+IBAdditions.mm
deleted file mode 100644
index 0c65abc031..0000000000
--- a/platform/macos/src/MGLMapView+IBAdditions.mm
+++ /dev/null
@@ -1,120 +0,0 @@
-#import "MGLMapView+IBAdditions.h"
-
-#import "MGLStyle.h"
-
-#import "MGLMapView_Private.h"
-
-@implementation MGLMapView (IBAdditions)
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingStyleURL__ {
- return [NSSet setWithObject:@"styleURL"];
-}
-
-- (nullable NSString *)styleURL__ {
- return self.styleURL.absoluteString;
-}
-
-- (void)setStyleURL__:(nullable NSString *)URLString {
- URLString = [URLString stringByTrimmingCharactersInSet:
- [NSCharacterSet whitespaceAndNewlineCharacterSet]];
- NSURL *url = URLString.length ? [NSURL URLWithString:URLString] : nil;
- if (URLString.length && !url) {
- [NSException raise:MGLInvalidStyleURLException
- format:@"“%@” is not a valid style URL.", URLString];
- }
- self.styleURL = url;
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingLatitude {
- return [NSSet setWithObjects:@"centerCoordinate", @"camera", nil];
-}
-
-- (double)latitude {
- return self.centerCoordinate.latitude;
-}
-
-- (void)setLatitude:(double)latitude {
- if (!isnan(self.pendingLongitude)) {
- // With both components present, set the real center coordinate and
- // forget the pending parts.
- self.centerCoordinate = CLLocationCoordinate2DMake(latitude, self.pendingLongitude);
- self.pendingLatitude = NAN;
- self.pendingLongitude = NAN;
- } else {
- // Not enough info to make a valid center coordinate yet. Stash this
- // latitude away until the longitude is set too.
- self.pendingLatitude = latitude;
- }
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingLongitude {
- return [NSSet setWithObjects:@"centerCoordinate", @"camera", nil];
-}
-
-- (double)longitude {
- return self.centerCoordinate.longitude;
-}
-
-- (void)setLongitude:(double)longitude {
- if (!isnan(self.pendingLatitude)) {
- // With both components present, set the real center coordinate and
- // forget the pending parts.
- self.centerCoordinate = CLLocationCoordinate2DMake(self.pendingLatitude, longitude);
- self.pendingLatitude = NAN;
- self.pendingLongitude = NAN;
- } else {
- // Not enough info to make a valid center coordinate yet. Stash this
- // longitude away until the latitude is set too.
- self.pendingLongitude = longitude;
- }
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingAllowsZooming {
- return [NSSet setWithObject:@"zoomEnabled"];
-}
-
-- (BOOL)allowsZooming {
- return self.zoomEnabled;
-}
-
-- (void)setAllowsZooming:(BOOL)allowsZooming {
- self.zoomEnabled = allowsZooming;
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingAllowsScrolling {
- return [NSSet setWithObject:@"scrollEnabled"];
-}
-
-- (BOOL)allowsScrolling {
- return self.scrollEnabled;
-}
-
-- (void)setAllowsScrolling:(BOOL)allowsScrolling {
- self.scrollEnabled = allowsScrolling;
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingAllowsRotating {
- return [NSSet setWithObject:@"rotateEnabled"];
-}
-
-- (BOOL)allowsRotating {
- return self.rotateEnabled;
-}
-
-- (void)setAllowsRotating:(BOOL)allowsRotating {
- self.rotateEnabled = allowsRotating;
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingAllowsTilting {
- return [NSSet setWithObject:@"pitchEnabled"];
-}
-
-- (BOOL)allowsTilting {
- return self.pitchEnabled;
-}
-
-- (void)setAllowsTilting:(BOOL)allowsTilting {
- self.pitchEnabled = allowsTilting;
-}
-
-@end
diff --git a/platform/macos/src/MGLMapView+Impl.h b/platform/macos/src/MGLMapView+Impl.h
deleted file mode 100644
index d33a19dbab..0000000000
--- a/platform/macos/src/MGLMapView+Impl.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#import <mbgl/gfx/renderer_backend.hpp>
-#import <mbgl/map/map_observer.hpp>
-#import <mbgl/util/image.hpp>
-
-@class MGLMapView;
-
-typedef struct _CGLContextObject* CGLContextObj;
-
-class MGLMapViewImpl : public mbgl::MapObserver {
-public:
- static std::unique_ptr<MGLMapViewImpl> Create(MGLMapView*);
-
- MGLMapViewImpl(MGLMapView*);
- virtual ~MGLMapViewImpl() = default;
-
- virtual mbgl::gfx::RendererBackend& getRendererBackend() = 0;
-
- // We need a static image of what was rendered for printing.
- virtual mbgl::PremultipliedImage readStillImage() = 0;
-
- virtual CGLContextObj getCGLContextObj() {
- return nullptr;
- }
-
- // mbgl::MapObserver implementation
- void onCameraWillChange(mbgl::MapObserver::CameraChangeMode) override;
- void onCameraIsChanging() override;
- void onCameraDidChange(mbgl::MapObserver::CameraChangeMode) override;
- void onWillStartLoadingMap() override;
- void onDidFinishLoadingMap() override;
- void onDidFailLoadingMap(mbgl::MapLoadError mapError, const std::string& what) override;
- void onWillStartRenderingFrame() override;
- void onDidFinishRenderingFrame(mbgl::MapObserver::RenderFrameStatus) override;
- void onWillStartRenderingMap() override;
- void onDidFinishRenderingMap(mbgl::MapObserver::RenderMode) override;
- void onDidFinishLoadingStyle() override;
- void onSourceChanged(mbgl::style::Source& source) override;
- void onDidBecomeIdle() override;
- bool onCanRemoveUnusedStyleImage(const std::string& imageIdentifier) override;
-
-protected:
- /// Cocoa map view that this adapter bridges to.
- __weak MGLMapView *mapView = nullptr;
-};
diff --git a/platform/macos/src/MGLMapView+Impl.mm b/platform/macos/src/MGLMapView+Impl.mm
deleted file mode 100644
index c00f858153..0000000000
--- a/platform/macos/src/MGLMapView+Impl.mm
+++ /dev/null
@@ -1,101 +0,0 @@
-#import "MGLMapView+Impl.h"
-#import "MGLMapView+OpenGL.h"
-#import "MGLStyle_Private.h"
-#import "NSBundle+MGLAdditions.h"
-
-#include <mbgl/map/map.hpp>
-#include <mbgl/style/style.hpp>
-
-std::unique_ptr<MGLMapViewImpl> MGLMapViewImpl::Create(MGLMapView* nativeView) {
- return std::make_unique<MGLMapViewOpenGLImpl>(nativeView);
-}
-
-MGLMapViewImpl::MGLMapViewImpl(MGLMapView* nativeView_) : mapView(nativeView_) {
-}
-
-void MGLMapViewImpl::onCameraWillChange(mbgl::MapObserver::CameraChangeMode mode) {
- bool animated = mode == mbgl::MapObserver::CameraChangeMode::Animated;
- [mapView cameraWillChangeAnimated:animated];
-}
-
-void MGLMapViewImpl::onCameraIsChanging() {
- [mapView cameraIsChanging];
-}
-
-void MGLMapViewImpl::onCameraDidChange(mbgl::MapObserver::CameraChangeMode mode) {
- bool animated = mode == mbgl::MapObserver::CameraChangeMode::Animated;
- [mapView cameraDidChangeAnimated:animated];
-}
-
-void MGLMapViewImpl::onWillStartLoadingMap() {
- [mapView mapViewWillStartLoadingMap];
-}
-
-void MGLMapViewImpl::onDidFinishLoadingMap() {
- [mapView mapViewDidFinishLoadingMap];
-}
-
-void MGLMapViewImpl::onDidFailLoadingMap(mbgl::MapLoadError mapError, const std::string& what) {
- NSString *description;
- MGLErrorCode code;
- switch (mapError) {
- case mbgl::MapLoadError::StyleParseError:
- code = MGLErrorCodeParseStyleFailed;
- description = NSLocalizedStringWithDefaultValue(@"PARSE_STYLE_FAILED_DESC", nil, nil, @"The map failed to load because the style is corrupted.", @"User-friendly error description");
- break;
- case mbgl::MapLoadError::StyleLoadError:
- code = MGLErrorCodeLoadStyleFailed;
- description = NSLocalizedStringWithDefaultValue(@"LOAD_STYLE_FAILED_DESC", nil, nil, @"The map failed to load because the style can't be loaded.", @"User-friendly error description");
- break;
- case mbgl::MapLoadError::NotFoundError:
- code = MGLErrorCodeNotFound;
- description = NSLocalizedStringWithDefaultValue(@"STYLE_NOT_FOUND_DESC", nil, nil, @"The map failed to load because the style can’t be found or is incompatible.", @"User-friendly error description");
- break;
- default:
- code = MGLErrorCodeUnknown;
- description = NSLocalizedStringWithDefaultValue(@"LOAD_MAP_FAILED_DESC", nil, nil, @"The map failed to load because an unknown error occurred.", @"User-friendly error description");
- }
- NSDictionary *userInfo = @{
- NSLocalizedDescriptionKey: description,
- NSLocalizedFailureReasonErrorKey: @(what.c_str()),
- };
- NSError *error = [NSError errorWithDomain:MGLErrorDomain code:code userInfo:userInfo];
- [mapView mapViewDidFailLoadingMapWithError:error];
-}
-
-void MGLMapViewImpl::onWillStartRenderingFrame() {
- [mapView mapViewWillStartRenderingFrame];
-}
-
-void MGLMapViewImpl::onDidFinishRenderingFrame(mbgl::MapObserver::RenderFrameStatus status) {
- bool fullyRendered = status.mode == mbgl::MapObserver::RenderMode::Full;
- [mapView mapViewDidFinishRenderingFrameFullyRendered:fullyRendered];
-}
-
-void MGLMapViewImpl::onWillStartRenderingMap() {
- [mapView mapViewWillStartRenderingMap];
-}
-
-void MGLMapViewImpl::onDidFinishRenderingMap(mbgl::MapObserver::RenderMode mode) {
- bool fullyRendered = mode == mbgl::MapObserver::RenderMode::Full;
- [mapView mapViewDidFinishRenderingMapFullyRendered:fullyRendered];
-}
-
-void MGLMapViewImpl::onDidBecomeIdle() {
- [mapView mapViewDidBecomeIdle];
-}
-
-void MGLMapViewImpl::onDidFinishLoadingStyle() {
- [mapView mapViewDidFinishLoadingStyle];
-}
-
-void MGLMapViewImpl::onSourceChanged(mbgl::style::Source& source) {
- NSString *identifier = @(source.getID().c_str());
- MGLSource * nativeSource = [mapView.style sourceWithIdentifier:identifier];
- [mapView sourceDidChange:nativeSource];
-}
-
-bool MGLMapViewImpl::onCanRemoveUnusedStyleImage(const std::string &imageIdentifier) {
- NSString *imageName = [NSString stringWithUTF8String:imageIdentifier.c_str()];
- return [mapView shouldRemoveStyleImage:imageName];
-}
diff --git a/platform/macos/src/MGLMapView+OpenGL.h b/platform/macos/src/MGLMapView+OpenGL.h
deleted file mode 100644
index d4c6a448cd..0000000000
--- a/platform/macos/src/MGLMapView+OpenGL.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#import "MGLMapView+Impl.h"
-#import "MGLMapView_Private.h"
-
-#include <mbgl/gfx/renderable.hpp>
-#include <mbgl/gl/renderer_backend.hpp>
-
-/// Adapter responsible for bridging calls from mbgl to MGLMapView and Cocoa.
-class MGLMapViewOpenGLImpl final : public MGLMapViewImpl,
- public mbgl::gl::RendererBackend,
- public mbgl::gfx::Renderable {
-public:
- MGLMapViewOpenGLImpl(MGLMapView*);
- ~MGLMapViewOpenGLImpl() override = default;
-
-public:
- void restoreFramebufferBinding();
-
- // Implementation of mbgl::gfx::RendererBackend
-public:
- mbgl::gfx::Renderable& getDefaultRenderable() override {
- return *this;
- }
-
-private:
- void activate() override;
- void deactivate() override;
- // End implementation of mbgl::gfx::RendererBackend
-
- // Implementation of mbgl::gl::RendererBackend
-public:
- void updateAssumedState() override;
-
-private:
- mbgl::gl::ProcAddress getExtensionFunctionPointer(const char* name) override;
- // End implementation of mbgl::gl::Rendererbackend
-
- // Implementation of MGLMapViewImpl
-public:
- mbgl::gfx::RendererBackend& getRendererBackend() override {
- return *this;
- }
-
- mbgl::PremultipliedImage readStillImage() override;
- CGLContextObj getCGLContextObj() override;
-};
diff --git a/platform/macos/src/MGLMapView+OpenGL.mm b/platform/macos/src/MGLMapView+OpenGL.mm
deleted file mode 100644
index f6168a4b80..0000000000
--- a/platform/macos/src/MGLMapView+OpenGL.mm
+++ /dev/null
@@ -1,89 +0,0 @@
-#import "MGLMapView+OpenGL.h"
-#import "MGLOpenGLLayer.h"
-
-#include <mbgl/gl/renderable_resource.hpp>
-
-#import <OpenGL/gl.h>
-
-class MGLMapViewOpenGLRenderableResource final : public mbgl::gl::RenderableResource {
-public:
- MGLMapViewOpenGLRenderableResource(MGLMapViewOpenGLImpl& backend_) : backend(backend_) {
- }
-
- void bind() override {
- backend.restoreFramebufferBinding();
- }
-
-private:
- MGLMapViewOpenGLImpl& backend;
-
-public:
- // The current framebuffer of the NSOpenGLLayer we are painting to.
- GLint fbo = 0;
-
- // The reference counted count of activation calls
- NSUInteger activationCount = 0;
-};
-
-MGLMapViewOpenGLImpl::MGLMapViewOpenGLImpl(MGLMapView* nativeView_)
- : MGLMapViewImpl(nativeView_),
- mbgl::gl::RendererBackend(mbgl::gfx::ContextMode::Unique),
- mbgl::gfx::Renderable(mapView.framebufferSize,
- std::make_unique<MGLMapViewOpenGLRenderableResource>(*this)) {
-
- // Install the OpenGL layer. Interface Builder’s synchronous drawing means
- // we can’t display a map, so don’t even bother to have a map layer.
- mapView.layer =
- mapView.isTargetingInterfaceBuilder ? [CALayer layer] : [MGLOpenGLLayer layer];
-}
-
-mbgl::gl::ProcAddress MGLMapViewOpenGLImpl::getExtensionFunctionPointer(const char* name) {
- static CFBundleRef framework = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.opengl"));
- if (!framework) {
- throw std::runtime_error("Failed to load OpenGL framework.");
- }
-
- return reinterpret_cast<mbgl::gl::ProcAddress>(CFBundleGetFunctionPointerForName(
- framework, (__bridge CFStringRef)[NSString stringWithUTF8String:name]));
-}
-
-void MGLMapViewOpenGLImpl::activate() {
- auto& resource = getResource<MGLMapViewOpenGLRenderableResource>();
- if (resource.activationCount++) {
- return;
- }
-
- MGLOpenGLLayer* layer = (MGLOpenGLLayer*)mapView.layer;
- [layer.openGLContext makeCurrentContext];
-}
-
-void MGLMapViewOpenGLImpl::deactivate() {
- auto& resource = getResource<MGLMapViewOpenGLRenderableResource>();
- if (--resource.activationCount) {
- return;
- }
-
- [NSOpenGLContext clearCurrentContext];
-}
-
-void MGLMapViewOpenGLImpl::updateAssumedState() {
- auto& resource = getResource<MGLMapViewOpenGLRenderableResource>();
- glGetIntegerv(GL_FRAMEBUFFER_BINDING, &resource.fbo);
- assumeFramebufferBinding(resource.fbo);
- assumeViewport(0, 0, mapView.framebufferSize);
-}
-
-void MGLMapViewOpenGLImpl::restoreFramebufferBinding() {
- auto& resource = getResource<MGLMapViewOpenGLRenderableResource>();
- setFramebufferBinding(resource.fbo);
- setViewport(0, 0, mapView.framebufferSize);
-}
-
-mbgl::PremultipliedImage MGLMapViewOpenGLImpl::readStillImage() {
- return readFramebuffer(mapView.framebufferSize);
-}
-
-CGLContextObj MGLMapViewOpenGLImpl::getCGLContextObj() {
- MGLOpenGLLayer* layer = (MGLOpenGLLayer*)mapView.layer;
- return layer.openGLContext.CGLContextObj;
-}
diff --git a/platform/macos/src/MGLMapView.h b/platform/macos/src/MGLMapView.h
deleted file mode 100644
index 374d4eeab7..0000000000
--- a/platform/macos/src/MGLMapView.h
+++ /dev/null
@@ -1,1247 +0,0 @@
-#import <Cocoa/Cocoa.h>
-#import <CoreLocation/CoreLocation.h>
-
-#import "MGLFoundation.h"
-#import "MGLTypes.h"
-#import "MGLGeometry.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class MGLAnnotationImage;
-@class MGLMapCamera;
-@class MGLStyle;
-@class MGLShape;
-
-@protocol MGLAnnotation;
-@protocol MGLMapViewDelegate;
-@protocol MGLOverlay;
-@protocol MGLFeature;
-
-/**
- An interactive, customizable map view with an interface similar to the one
- provided by Apple’s MapKit.
-
- Using `MGLMapView`, you can embed the map inside a view, allow users to
- manipulate it with standard gestures, animate the map between different
- viewpoints, and present information in the form of annotations and overlays.
-
- The map view loads scalable vector tiles that conform to the
- <a href="https://github.com/mapbox/vector-tile-spec">Mapbox Vector Tile Specification</a>.
- It styles them with a style that conforms to the
- <a href="https://www.mapbox.com/mapbox-gl-style-spec/">Mapbox Style Specification</a>.
- Such styles can be designed in
- <a href="https://www.mapbox.com/studio/">Mapbox Studio</a> and hosted on
- mapbox.com.
-
- A collection of Mapbox-hosted styles is available through the `MGLStyle` class.
- These basic styles use
- <a href="https://www.mapbox.com/developers/vector-tiles/mapbox-streets">Mapbox Streets</a>
- or <a href="https://www.mapbox.com/satellite/">Mapbox Satellite</a> data
- sources, but you can specify a custom style that makes use of your own data.
-
- Mapbox-hosted vector tiles and styles require an API access token, which you
- can obtain from the
- <a href="https://www.mapbox.com/studio/account/tokens/">Mapbox account page</a>.
- Access tokens associate requests to Mapbox’s vector tile and style APIs with
- your Mapbox account. They also deter other developers from using your styles
- without your permission.
-
- Adding your own gesture recognizer to `MGLMapView` will block the corresponding
- gesture recognizer built into `MGLMapView`. To avoid conflicts, define which
- gesture recognizer takes precedence. For example, you can subclass
- `NSClickGestureRecognizer` and override `-[NSGestureRecognizer shouldRequireFailureOfGestureRecognizer:]`,
- so that your subclass will be invoked only if the default `MGLMapView` click
- gesture recognizer fails:
-
- ```swift
- class MapClickGestureRecognizer: NSClickGestureRecognizer {
- override func shouldRequireFailure(of otherGestureRecognizer: NSGestureRecognizer) -> Bool {
- return otherGestureRecognizer is NSClickGestureRecognizer
- }
- }
- ```
-
- @note You are responsible for getting permission to use the map data and for
- ensuring that your use adheres to the relevant terms of use.
- */
-MGL_EXPORT IB_DESIGNABLE
-@interface MGLMapView : NSView
-
-#pragma mark Creating Instances
-
-/**
- Initializes and returns a newly allocated map view with the specified frame and
- the default style.
-
- @param frame The frame for the view, measured in points.
- @return An initialized map view.
- */
-- (instancetype)initWithFrame:(NSRect)frame;
-
-/**
- Initializes and returns a newly allocated map view with the specified frame and
- style URL.
-
- @param frame The frame for the view, measured in points.
- @param styleURL URL of the map style to display. The URL may be a full HTTP or
- HTTPS URL, a Mapbox style URL
- (`mapbox://styles/<user>/<style>`), or a path to a local file relative to
- the application’s resource path. Specify `nil` for the default style.
- @return An initialized map view.
- */
-- (instancetype)initWithFrame:(NSRect)frame styleURL:(nullable NSURL *)styleURL;
-
-#pragma mark Accessing the Delegate
-
-/**
- The receiver’s delegate.
-
- A map view sends messages to its delegate to notify it of changes to its
- contents or the viewpoint. The delegate also provides information about
- annotations displayed on the map, such as the styles to apply to individual
- annotations.
- */
-@property (nonatomic, weak, nullable) IBOutlet id <MGLMapViewDelegate> delegate;
-
-#pragma mark Configuring the Map’s Appearance
-
-/**
- The style currently displayed in the receiver.
-
- Unlike the `styleURL` property, this property is set to an object that allows
- you to manipulate every aspect of the style locally.
-
- If the style is loading, this property is set to `nil` until the style finishes
- loading. If the style has failed to load, this property is set to `nil`.
- Because the style loads asynchronously, you should manipulate it in the
- `-[MGLMapViewDelegate mapView:didFinishLoadingStyle:]` or
- `-[MGLMapViewDelegate mapViewDidFinishLoadingMap:]` method. It is not possible
- to manipulate the style before it has finished loading.
-
- @note The default styles provided by Mapbox contain sources and layers with
- identifiers that will change over time. Applications that use APIs that
- manipulate a style's sources and layers must first set the style URL to an
- explicitly versioned style using a convenience method like
- `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL”
- inspectable in Interface Builder, or a manually constructed `NSURL`.
- */
-@property (nonatomic, readonly, nullable) MGLStyle *style;
-
-/**
- URL of the style currently displayed in the receiver.
-
- The URL may be a full HTTP or HTTPS URL, a Mapbox
- style URL (`mapbox://styles/<user>/<style>`), or a path to a local file relative
- to the application’s resource path.
-
- If you set this property to `nil`, the receiver will use the default style and
- this property will automatically be set to that style’s URL.
-
- If you want to modify the current style without replacing it outright, or if
- you want to introspect individual style attributes, use the `style` property.
- */
-@property (nonatomic, null_resettable) NSURL *styleURL;
-
-/**
- Reloads the style.
-
- You do not normally need to call this method. The map view automatically
- responds to changes in network connectivity by reloading the style. You may
- need to call this method if you change the access token after a style has
- loaded but before loading a style associated with a different Mapbox account.
- */
-- (IBAction)reloadStyle:(id)sender;
-
-/**
- A control for zooming in and out, positioned in the lower-right corner.
- */
-@property (nonatomic, readonly) NSSegmentedControl *zoomControls;
-
-/**
- A control indicating the map’s direction and allowing the user to manipulate
- the direction, positioned above the zoom controls in the lower-right corner.
- */
-@property (nonatomic, readonly) NSSlider *compass;
-
-/**
- The Mapbox logo, positioned in the lower-left corner.
-
- @note The Mapbox terms of service, which governs the use of Mapbox-hosted
- vector tiles and styles,
- <a href="https://www.mapbox.com/help/mapbox-logo/">requires</a> most Mapbox
- customers to display the Mapbox logo. If this applies to you, do not hide
- this view or change its contents.
- */
-@property (nonatomic, readonly) NSImageView *logoView;
-
-/**
- A view showing legally required copyright notices, positioned along the bottom
- of the map view, to the left of the Mapbox logo.
-
- @note The Mapbox terms of service, which governs the use of Mapbox-hosted
- vector tiles and styles,
- <a href="https://www.mapbox.com/help/attribution/">requires</a> these
- copyright notices to accompany any map that features Mapbox-designed styles,
- OpenStreetMap data, or other Mapbox data such as satellite or terrain data.
- If that applies to this map view, do not hide this view or remove any
- notices from it.
- */
-@property (nonatomic, readonly) NSView *attributionView;
-
-/**
- A Boolean value indicating whether the map should prefetch tiles.
-
- When this property is set to `YES`, the map view prefetches tiles designed for
- a low zoom level and displays them until receiving more detailed tiles for the
- current zoom level. The prefetched tiles typically contain simplified versions
- of each shape, improving the map view’s perceived performance.
-
- The default value of this property is `YES`.
- */
-@property (nonatomic, assign) BOOL prefetchesTiles;
-
-
-#pragma mark Manipulating the Viewpoint
-
-/**
- The geographic coordinate at the center of the map view.
-
- Changing the value of this property centers the map on the new coordinate
- without changing the current zoom level.
-
- Changing the value of this property updates the map view immediately. If you
- want to animate the change, use the `-setCenterCoordinate:animated:` method
- instead.
- */
-@property (nonatomic) CLLocationCoordinate2D centerCoordinate;
-
-/**
- Changes the center coordinate of the map and optionally animates the change.
-
- Changing the center coordinate centers the map on the new coordinate without
- changing the current zoom level.
-
- @param coordinate The new center coordinate for the map.
- @param animated Specify `YES` if you want the map view to scroll to the new
- location or `NO` if you want the map to display the new location
- immediately.
- */
-- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated;
-
-/**
- The zoom level of the receiver.
-
- In addition to affecting the visual size and detail of features on the map, the
- zoom level affects the size of the vector tiles that are loaded. At zoom level
- 0, each tile covers the entire world map; at zoom level 1, it covers ¼ of the
- world; at zoom level 2, <sup>1</sup>⁄<sub>16</sub> of the world, and so on.
-
- Changing the value of this property updates the map view immediately. If you
- want to animate the change, use the `-setZoomLevel:animated:` method instead.
- */
-@property (nonatomic) double zoomLevel;
-
-/**
- The minimum zoom level at which the map can be shown.
-
- Depending on the map view’s aspect ratio, the map view may be prevented from
- reaching the minimum zoom level, in order to keep the map from repeating within
- the current viewport.
-
- If the value of this property is greater than that of the `maximumZoomLevel`
- property, the behavior is undefined.
-
- The default value of this property is 0.
- */
-@property (nonatomic) IBInspectable double minimumZoomLevel;
-
-/**
- The maximum zoom level the map can be shown at.
-
- If the value of this property is smaller than that of the `minimumZoomLevel`
- property, the behavior is undefined.
-
- The default value of this property is 22. The upper bound for this property
- is 25.5.
- */
-@property (nonatomic) IBInspectable double maximumZoomLevel;
-
-/**
- Changes the zoom level of the map and optionally animates the change.
-
- Changing the zoom level scales the map without changing the current center
- coordinate.
-
- @param zoomLevel The new zoom level for the map.
- @param animated Specify `YES` if you want the map view to animate the change
- to the new zoom level or `NO` if you want the map to display the new zoom
- level immediately.
- */
-- (void)setZoomLevel:(double)zoomLevel animated:(BOOL)animated;
-
-/**
- The heading of the map, measured in degrees clockwise from true north.
-
- The value `0` means that the top edge of the map view corresponds to true
- north. The value `90` means the top of the map is pointing due east. The value
- `180` means the top of the map points due south, and so on.
-
- Changing the value of this property updates the map view immediately. If you
- want to animate the change, use the `-setDirection:animated:` method instead.
- */
-@property (nonatomic) CLLocationDirection direction;
-
-/**
- Changes the heading of the map and optionally animates the change.
-
- Changing the heading rotates the map without changing the current center
- coordinate or zoom level.
-
- @param direction The heading of the map, measured in degrees clockwise from
- true north.
- @param animated Specify `YES` if you want the map view to animate the change
- to the new heading or `NO` if you want the map to display the new heading
- immediately.
- */
-- (void)setDirection:(CLLocationDirection)direction animated:(BOOL)animated;
-
-/**
- A camera representing the current viewpoint of the map.
- */
-@property (nonatomic, copy) MGLMapCamera *camera;
-
-/**
- Moves the viewpoint to a different location with respect to the map with an
- optional transition animation.
-
- @param camera The new viewpoint.
- @param animated Specify `YES` if you want the map view to animate the change to
- the new viewpoint or `NO` if you want the map to display the new viewpoint
- immediately.
- */
-- (void)setCamera:(MGLMapCamera *)camera animated:(BOOL)animated;
-
-/**
- Moves the viewpoint to a different location with respect to the map with an
- optional transition duration and timing function.
-
- @param camera The new viewpoint.
- @param duration The amount of time, measured in seconds, that the transition
- animation should take. Specify `0` to jump to the new viewpoint
- instantaneously.
- @param function A timing function used for the animation. Set this parameter to
- `nil` for a transition that matches most system animations. If the duration
- is `0`, this parameter is ignored.
- @param completion The block to execute after the animation finishes.
- */
-- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion;
-
- /**
- Moves the viewpoint to a different location with respect to the map with an
- optional transition duration and timing function, and optionally some additional
- padding on each side.
-
- @param camera The new viewpoint.
- @param duration The amount of time, measured in seconds, that the transition
- animation should take. Specify `0` to jump to the new viewpoint
- instantaneously.
- @param function A timing function used for the animation. Set this parameter to
- `nil` for a transition that matches most system animations. If the duration
- is `0`, this parameter is ignored.
- @param edgePadding The minimum padding (in screen points) that would be visible
- around the returned camera object if it were set as the receiver’s camera.
- @param completion The block to execute after the animation finishes.
- */
-- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function edgePadding:(NSEdgeInsets)edgePadding completionHandler:(nullable void (^)(void))completion;
-
-
-/**
- Moves the viewpoint to a different location using a transition animation that
- evokes powered flight and a default duration based on the length of the flight
- path.
-
- The transition animation seamlessly incorporates zooming and panning to help
- the user find his or her bearings even after traversing a great distance.
-
- @param camera The new viewpoint.
- @param completion The block to execute after the animation finishes.
- */
-- (void)flyToCamera:(MGLMapCamera *)camera completionHandler:(nullable void (^)(void))completion;
-
-/**
- Moves the viewpoint to a different location using a transition animation that
- evokes powered flight and an optional transition duration.
-
- The transition animation seamlessly incorporates zooming and panning to help
- the user find his or her bearings even after traversing a great distance.
-
- @param camera The new viewpoint.
- @param duration The amount of time, measured in seconds, that the transition
- animation should take. Specify `0` to jump to the new viewpoint
- instantaneously. Specify a negative value to use the default duration, which
- is based on the length of the flight path.
- @param completion The block to execute after the animation finishes.
- */
-- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration completionHandler:(nullable void (^)(void))completion;
-
-/**
- Moves the viewpoint to a different location using a transition animation that
- evokes powered flight and an optional transition duration and peak altitude.
-
- The transition animation seamlessly incorporates zooming and panning to help
- the user find his or her bearings even after traversing a great distance.
-
- @param camera The new viewpoint.
- @param duration The amount of time, measured in seconds, that the transition
- animation should take. Specify `0` to jump to the new viewpoint
- instantaneously. Specify a negative value to use the default duration, which
- is based on the length of the flight path.
- @param peakAltitude The altitude, measured in meters, at the midpoint of the
- animation. The value of this parameter is ignored if it is negative or if
- the animation transition resulting from a similar call to
- `-setCamera:animated:` would have a midpoint at a higher altitude.
- @param completion The block to execute after the animation finishes.
- */
-- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration peakAltitude:(CLLocationDistance)peakAltitude completionHandler:(nullable void (^)(void))completion;
-
-/**
- The geographic coordinate bounds visible in the receiver’s viewport.
-
- Changing the value of this property updates the receiver immediately. If you
- want to animate the change, use the `-setVisibleCoordinateBounds:animated:`
- method instead.
-
- If a longitude is less than −180 degrees or greater than 180 degrees, the
- visible bounds straddles the antimeridian or international date line. For
- example, if both Tokyo and San Francisco are visible, the visible bounds might
- extend from (35.68476, −220.24257) to (37.78428, −122.41310).
- */
-@property (nonatomic) MGLCoordinateBounds visibleCoordinateBounds;
-
-/**
- Changes the receiver’s viewport to fit the given coordinate bounds, optionally
- animating the change.
-
- To bring both sides of the antimeridian or international date line into view,
- specify some longitudes less than −180 degrees or greater than 180 degrees. For
- example, to show both Tokyo and San Francisco simultaneously, you could set the
- visible bounds to extend from (35.68476, −220.24257) to (37.78428, −122.41310).
-
- @param bounds The bounds that the viewport will show in its entirety.
- @param animated Specify `YES` to animate the change by smoothly scrolling and
- zooming or `NO` to immediately display the given bounds.
- */
-- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds animated:(BOOL)animated;
-
-/**
- Changes the receiver’s viewport to fit the given coordinate bounds with some
- additional padding on each side.
-
- To bring both sides of the antimeridian or international date line into view,
- specify some longitudes less than −180 degrees or greater than 180 degrees. For
- example, to show both Tokyo and San Francisco simultaneously, you could set the
- visible bounds to extend from (35.68476, −220.24257) to (37.78428, −122.41310).
-
- To specify a completion handler to execute after the animation finishes, use
- the `-setVisibleCoordinateBounds:edgePadding:animated:completionHandler:` method.
-
- @param bounds The bounds that the viewport will show in its entirety.
- @param insets The minimum padding (in screen points) that will be visible
- around the given coordinate bounds.
- @param animated Specify `YES` to animate the change by smoothly scrolling and
- zooming or `NO` to immediately display the given bounds.
- */
-- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(NSEdgeInsets)insets animated:(BOOL)animated;
-
-/**
- Changes the receiver’s viewport to fit the given coordinate bounds with some
- additional padding on each side, optionally calling a completion handler.
-
- To bring both sides of the antimeridian or international date line into view,
- specify some longitudes less than −180 degrees or greater than 180 degrees. For
- example, to show both Tokyo and San Francisco simultaneously, you could set the
- visible bounds to extend from (35.68476, −220.24257) to (37.78428, −122.41310).
-
- @param bounds The bounds that the viewport will show in its entirety.
- @param insets The minimum padding (in screen points) that will be visible
- around the given coordinate bounds.
- @param animated Specify `YES` to animate the change by smoothly scrolling and
- zooming or `NO` to immediately display the given bounds.
- @param completion The block executed after the animation finishes.
- */
-- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(NSEdgeInsets)insets animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion;
-
-/**
- Sets the visible region so that the map displays the specified annotations.
-
- Calling this method updates the value in the `visibleCoordinateBounds` property
- and potentially other properties to reflect the new map region. A small amount
- of padding is reserved around the edges of the map view. To specify a different
- amount of padding, use the `-showAnnotations:edgePadding:animated:` method.
-
- @param annotations The annotations that you want to be visible in the map.
- @param animated `YES` if you want the map region change to be animated, or `NO`
- if you want the map to display the new region immediately without animations.
- */
-- (void)showAnnotations:(NSArray<id <MGLAnnotation>> *)annotations animated:(BOOL)animated;
-
-/**
- Sets the visible region so that the map displays the specified annotations with
- the specified amount of padding on each side.
-
- Calling this method updates the value in the `visibleCoordinateBounds` property
- and potentially other properties to reflect the new map region.
-
- To specify a completion handler to execute after the animation finishes, use
- the `-showAnnotations:edgePadding:animated:completionHandler:` method.
-
- @param annotations The annotations that you want to be visible in the map.
- @param insets The minimum padding (in screen points) around the edges of the
- map view to keep clear of annotations.
- @param animated `YES` if you want the map region change to be animated, or `NO`
- if you want the map to display the new region immediately without animations.
- */
-- (void)showAnnotations:(NSArray<id <MGLAnnotation>> *)annotations edgePadding:(NSEdgeInsets)insets animated:(BOOL)animated;
-
-/**
- Sets the visible region so that the map displays the specified annotations with
- the specified amount of padding on each side and an optional completion
- handler.
-
- Calling this method updates the value in the `visibleCoordinateBounds` property
- and potentially other properties to reflect the new map region.
-
- @param annotations The annotations that you want to be visible in the map.
- @param insets The minimum padding (in screen points) around the edges of the
- map view to keep clear of annotations.
- @param animated `YES` if you want the map region change to be animated, or `NO`
- if you want the map to display the new region immediately without animations.
- @param completion The block executed after the animation finishes.
- */
-- (void)showAnnotations:(NSArray<id <MGLAnnotation>> *)annotations edgePadding:(NSEdgeInsets)insets animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion;
-
-/**
- Returns the camera that best fits the given coordinate bounds.
-
- @param bounds The coordinate bounds to fit to the receiver’s viewport.
- @return A camera object centered on the same location as the coordinate bounds
- with zoom level as high (close to the ground) as possible while still
- including the entire coordinate bounds. The camera object uses the current
- direction and pitch.
- */
-- (MGLMapCamera *)cameraThatFitsCoordinateBounds:(MGLCoordinateBounds)bounds;
-
-/**
- Returns the camera that best fits the given coordinate bounds with some
- additional padding on each side.
-
- @param bounds The coordinate bounds to fit to the receiver’s viewport.
- @param insets The minimum padding (in screen points) that would be visible
- around the returned camera object if it were set as the receiver’s camera.
- @return A camera object centered on the same location as the coordinate bounds
- with zoom level as high (close to the ground) as possible while still
- including the entire coordinate bounds. The camera object uses the current
- direction and pitch.
- */
-- (MGLMapCamera *)cameraThatFitsCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(NSEdgeInsets)insets;
-
-/**
- Returns the camera that best fits the given coordinate bounds with some
- additional padding on each side, matching an existing camera as much as
- possible.
-
- @param camera The camera that the return camera should adhere to. All values
- on this camera will be manipulated except for pitch and direction.
- @param bounds The coordinate bounds to fit to the receiver’s viewport.
- @param insets The minimum padding (in screen points) that would be visible
- around the returned camera object if it were set as the receiver’s camera.
- @return A camera object centered on the same location as the coordinate bounds
- with zoom level as high (close to the ground) as possible while still
- including the entire coordinate bounds. The initial camera's pitch and
- direction will be honored.
- */
-- (MGLMapCamera *)camera:(MGLMapCamera *)camera fittingCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(NSEdgeInsets)insets;
-
-/**
- Returns the camera that best fits the given shape with some additional padding
- on each side, matching an existing camera as much as possible.
-
- @param camera The camera that the return camera should adhere to. All values
- on this camera will be manipulated except for pitch and direction.
- @param shape The shape to fit to the receiver’s viewport.
- @param insets The minimum padding (in screen points) that would be visible
- around the returned camera object if it were set as the receiver’s camera.
- @return A camera object centered on the shape's center with zoom level as high
- (close to the ground) as possible while still including the entire shape.
- The initial camera's pitch and direction will be honored.
- */
-- (MGLMapCamera *)camera:(MGLMapCamera *)camera fittingShape:(MGLShape *)shape edgePadding:(NSEdgeInsets)insets;
-
-/**
- Returns the camera that best fits the given shape with some additional padding
- on each side while looking in the specified direction.
-
- @param shape The shape to fit to the receiver’s viewport.
- @param direction The direction of the viewport, measured in degrees clockwise
- from true north.
- @param insets The minimum padding (in screen points) that would be visible
- around the returned camera object if it were set as the receiver’s camera.
- @return A camera object centered on the shape's center with zoom level as high
- (close to the ground) as possible while still including the entire shape.
- The camera object uses the current pitch.
- */
-- (MGLMapCamera *)cameraThatFitsShape:(MGLShape *)shape direction:(CLLocationDirection)direction edgePadding:(NSEdgeInsets)insets;
-
-/**
- A Boolean value indicating whether the receiver automatically adjusts its
- content insets.
-
- When the value of this property is `YES`, the map view automatically updates
- its `contentInsets` property to account for any overlapping title bar or
- toolbar. To overlap with the title bar or toolbar, the containing window’s
- style mask must have `NSFullSizeContentViewWindowMask` set, and the title bar
- must not be transparent.
-
- The default value of this property is `YES`.
- */
-@property (nonatomic, assign) BOOL automaticallyAdjustsContentInsets;
-
-/**
- The distance from the edges of the map view’s frame to the edges of the map
- view’s logical viewport.
-
- When the value of this property is equal to `NSEdgeInsetsZero`, viewport
- properties such as `centerCoordinate` assume a viewport that matches the map
- view’s frame. Otherwise, those properties are inset, excluding part of the
- frame from the viewport. For instance, if the only the top edge is inset, the
- map center is effectively shifted downward.
-
- When the value of the `automaticallyAdjustsContentInsets` property is `YES`,
- the value of this property may be overridden at any time.
-
- Changing the value of this property updates the map view immediately. If you
- want to animate the change, use the `-setContentInset:animated:completionHandler:`
- method instead.
- */
-@property (nonatomic, assign) NSEdgeInsets contentInsets;
-
-/**
- Deprecated. Sets the distance from the edges of the map view’s frame to the
- edges of the map view’s logical viewport, with an optional transition animation.
-
- When the value of this property is equal to `NSEdgeInsetsZero`, viewport
- properties such as `centerCoordinate` assume a viewport that matches the map
- view’s frame. Otherwise, those properties are inset, excluding part of the
- frame from the viewport. For instance, if the only the top edge is inset, the
- map center is effectively shifted downward.
-
- When the value of the `automaticallyAdjustsContentInsets` property is `YES`,
- the value of this property may be overridden at any time.
-
- To specify a completion handler to execute after the animation finishes, use
- the `-setContentInsets:animated:completionHandler:` method.
-
- @param contentInsets The new values to inset the content by.
- @param animated Specify `YES` if you want the map view to animate the change to
- the content insets or `NO` if you want the map to inset the content
- immediately.
- */
-- (void)setContentInsets:(NSEdgeInsets)contentInsets animated:(BOOL)animated __attribute__((deprecated("Use `-setContentInsets:animated:completionHandler:` instead.")));
-
-/**
- Sets the distance from the edges of the map view’s frame to the edges of the
- map view’s logical viewport with an optional transition animation and
- completion handler.
-
- When the value of this property is equal to `NSEdgeInsetsZero`, viewport
- properties such as `centerCoordinate` assume a viewport that matches the map
- view’s frame. Otherwise, those properties are inset, excluding part of the
- frame from the viewport. For instance, if the only the top edge is inset, the
- map center is effectively shifted downward.
-
- When the value of the `automaticallyAdjustsContentInsets` property is `YES`,
- the value of this property may be overridden at any time.
-
- @param contentInsets The new values to inset the content by.
- @param animated Specify `YES` if you want the map view to animate the change to
- the content insets or `NO` if you want the map to inset the content
- immediately.
- @param completion The block executed after the animation finishes.
- */
-- (void)setContentInsets:(NSEdgeInsets)contentInsets animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion;
-
-#pragma mark Configuring How the User Interacts with the Map
-
-/**
- A Boolean value that determines whether the user may zoom the map in and out,
- changing the zoom level.
-
- When this property is set to `YES`, the default, the user may zoom the map in
- and out by pinching two fingers, by using a scroll wheel on a traditional
- mouse, or by dragging the mouse cursor up and down while holding down the Shift
- key. When the receiver has focus, the user may also zoom by pressing the up and
- down arrow keys while holding down the Option key.
-
- This property controls only user interactions with the map. If you set the
- value of this property to `NO`, you may still change the map zoom
- programmatically.
- */
-@property (nonatomic, getter=isZoomEnabled) BOOL zoomEnabled;
-
-/**
- A Boolean value that determines whether the user may scroll around the map,
- changing the center coordinate.
-
- When this property is set to `YES`, the default, the user may scroll the map by
- swiping with two fingers or dragging the mouse cursor. When the receiver has
- focus, the user may also scroll around the map by pressing the arrow keys.
-
- This property controls only user interactions with the map. If you set the
- value of this property to `NO`, you may still change the map location
- programmatically.
- */
-@property (nonatomic, getter=isScrollEnabled) BOOL scrollEnabled;
-
-/**
- A Boolean value that determines whether the user may rotate the map, changing
- the direction.
-
- When this property is set to `YES`, the default, the user may rotate the map by
- moving two fingers in a circular motion or by dragging the mouse cursor left
- and right while holding down the Option key. When the receiver has focus, the
- user may also zoom by pressing the left and right arrow keys while holding down
- the Option key.
-
- This property controls only user interactions with the map. If you set the
- value of this property to `NO`, you may still rotate the map programmatically.
- */
-@property (nonatomic, getter=isRotateEnabled) BOOL rotateEnabled;
-
-/**
- A Boolean value that determines whether the user may tilt of the map, changing
- the pitch.
-
- When this property is set to `YES`, the default, the user may rotate the map by
- dragging the mouse cursor up and down while holding down the Option key.
-
- This property controls only user interactions with the map. If you set the
- value of this property to `NO`, you may still change the pitch of the map
- programmatically.
- */
-@property (nonatomic, getter=isPitchEnabled) BOOL pitchEnabled;
-
-#pragma mark Annotating the Map
-
-/**
- The complete list of annotations associated with the receiver. (read-only)
-
- The objects in this array must adopt the `MGLAnnotation` protocol. If no
- annotations are associated with the map view, the value of this property is
- `nil`.
- */
-@property (nonatomic, readonly, nullable) NSArray<id <MGLAnnotation>> *annotations;
-
-/**
- Adds an annotation to the map view.
-
- @note `MGLMultiPolyline`, `MGLMultiPolygon`, and `MGLShapeCollection` objects
- cannot be added to the map view at this time. Nor can `MGLMultiPoint`
- objects that are not instances of `MGLPolyline` or `MGLPolygon`. Any
- multipoint, multipolyline, multipolygon, or shape collection object that is
- specified is silently ignored.
-
- @param annotation The annotation object to add to the receiver. This object
- must conform to the `MGLAnnotation` protocol. The map view retains the
- annotation object.
- */
-- (void)addAnnotation:(id <MGLAnnotation>)annotation;
-
-/**
- Adds an array of annotations to the map view.
-
- @note `MGLMultiPolyline`, `MGLMultiPolygon`, and `MGLShapeCollection` objects
- cannot be added to the map view at this time. Nor can `MGLMultiPoint`
- objects that are not instances of `MGLPolyline` or `MGLPolygon`. Any
- multipoint, multipolyline, multipolygon, or shape collection objects that
- are specified are silently ignored.
-
- @param annotations An array of annotation objects. Each object in the array
- must conform to the `MGLAnnotation` protocol. The map view retains each
- individual annotation object.
- */
-- (void)addAnnotations:(NSArray<id <MGLAnnotation>> *)annotations;
-
-/**
- The complete list of annotations associated with the receiver that are
- currently visible.
-
- The objects in this array must adopt the `MGLAnnotation` protocol. If no
- annotations are associated with the map view or if no annotations associated
- with the map view are currently visible, the value of this property is `nil`.
- */
-@property (nonatomic, readonly, nullable) NSArray<id <MGLAnnotation>> *visibleAnnotations;
-
-/**
- Removes an annotation from the map view, deselecting it if it is selected.
-
- Removing an annotation object dissociates it from the map view entirely,
- preventing it from being displayed on the map. Thus you would typically call
- this method only when you want to hide or delete a given annotation.
-
- @param annotation The annotation object to remove. This object must conform to
- the `MGLAnnotation` protocol.
- */
-- (void)removeAnnotation:(id <MGLAnnotation>)annotation;
-
-/**
- Removes an array of annotations from the map view, deselecting any selected
- annotations in the array.
-
- Removing annotation objects dissociates them from the map view entirely,
- preventing them from being displayed on the map. Thus you would typically call
- this method only when you want to hide or delete the given annotations.
-
- @param annotations The array of annotation objects to remove. Objects in the
- array must conform to the `MGLAnnotation` protocol.
- */
-- (void)removeAnnotations:(NSArray<id <MGLAnnotation>> *)annotations;
-
-/**
- Returns a reusable annotation image object associated with its identifier.
-
- For performance reasons, you should generally reuse `MGLAnnotationImage`
- objects for identical-looking annotations in your map views. Dequeueing saves
- time and memory during performance-critical operations such as scrolling.
-
- @param identifier A string identifying the annotation image to be reused. This
- string is the same one you specify when initially returning the annotation
- image object using the `-mapView:imageForAnnotation:` method.
- @return An annotation image object with the given identifier, or `nil` if no
- such object exists in the reuse queue.
- */
-- (nullable MGLAnnotationImage *)dequeueReusableAnnotationImageWithIdentifier:(NSString *)identifier;
-
-/**
- Returns the list of annotations associated with the receiver that intersect with
- the given rectangle.
-
- @param rect A rectangle expressed in the map view’s coordinate system.
- @return An array of objects that adopt the `MGLAnnotation` protocol or `nil` if
- no annotations associated with the map view are currently visible in the
- rectangle.
- */
-- (nullable NSArray<id <MGLAnnotation>> *)visibleAnnotationsInRect:(CGRect)rect;
-
-#pragma mark Managing Annotation Selections
-
-/**
- The currently selected annotations.
-
- Assigning a new array to this property selects only the first annotation in the
- array.
-
- If the annotation is of type `MGLPointAnnotation` and is offscreen, the map is
- panned so that the annotation and its callout are brought just onscreen. The
- annotation is *not* centered within the viewport.
-
- @note In versions prior to `4.0.0` if the annotation was offscreen it was not
- selected.
- */
-@property (nonatomic, copy) NSArray<id <MGLAnnotation>> *selectedAnnotations;
-
-/**
- Selects an annotation and displays a callout popover for it.
-
- If the annotation is of type `MGLPointAnnotation` and is offscreen, the map is
- panned so that the annotation and its callout are brought just onscreen. The
- annotation is *not* centered within the viewport.
-
- @param annotation The annotation object to select.
- */
-- (void)selectAnnotation:(id <MGLAnnotation>)annotation;
-
-/**
- Deselects an annotation and hides its callout popover.
-
- @param annotation The annotation object to deselect.
- */
-- (void)deselectAnnotation:(nullable id <MGLAnnotation>)annotation;
-
-/**
- A common view controller for managing a callout popover’s content view.
-
- Like any instance of `NSPopover`, an annotation callout manages its contents
- with a view controller. The annotation object is the view controller’s
- represented object. This means that you can bind controls in the view
- controller’s content view to KVO-compliant properties of the annotation object,
- such as `title` and `subtitle`.
-
- This property defines a common view controller that is used for every
- annotation’s callout view. If you set this property to `nil`, a default view
- controller will be used that manages a simple title label and subtitle label.
- If you need distinct view controllers for different annotations, the map view’s
- delegate should implement `-mapView:calloutViewControllerForAnnotation:`
- instead.
- */
-@property (nonatomic, strong, null_resettable) IBOutlet NSViewController *calloutViewController;
-
-#pragma mark Finding Annotations
-
-/**
- Returns a point annotation located at the given point.
-
- @param point A point in the view’s coordinate system.
- @return A point annotation whose annotation image coincides with the point. If
- multiple point annotations coincide with the point, the return value is the
- annotation that would be selected if the user clicks at this point.
- */
-- (id <MGLAnnotation>)annotationAtPoint:(NSPoint)point;
-
-#pragma mark Overlaying the Map
-
-/**
- The complete list of overlays associated with the receiver. (read-only)
-
- The objects in this array must adopt the `MGLOverlay` protocol. If no
- overlays are associated with the map view, the value of this property is
- empty array.
- */
-@property (nonatomic, readonly, nonnull) NSArray<id <MGLOverlay>> *overlays;
-
-/**
- Adds a single overlay to the map.
-
- To remove an overlay from a map, use the `-removeOverlay:` method.
-
- @param overlay The overlay object to add. This object must conform to the
- `MGLOverlay` protocol.
- */
-- (void)addOverlay:(id <MGLOverlay>)overlay;
-
-/**
- Adds an array of overlays to the map.
-
- To remove multiple overlays from a map, use the `-removeOverlays:` method.
-
- @param overlays An array of objects, each of which must conform to the
- `MGLOverlay` protocol.
- */
-- (void)addOverlays:(NSArray<id <MGLOverlay>> *)overlays;
-
-/**
- Removes a single overlay from the map.
-
- If the specified overlay is not currently associated with the map view, this
- method does nothing.
-
- @param overlay The overlay object to remove.
- */
-- (void)removeOverlay:(id <MGLOverlay>)overlay;
-
-/**
- Removes an array of overlays from the map.
-
- If a given overlay object is not associated with the map view, it is ignored.
-
- @param overlays An array of objects, each of which conforms to the `MGLOverlay`
- protocol.
- */
-- (void)removeOverlays:(NSArray<id <MGLOverlay>> *)overlays;
-
-#pragma mark Accessing the Underlying Map Data
-
-/**
- Returns an array of rendered map features that intersect with a given point.
-
- This method may return features from any of the map’s style layers. To restrict
- the search to a particular layer or layers, use the
- `-visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:` method. For more
- information about searching for map features, see that method’s documentation.
-
- @param point A point expressed in the map view’s coordinate system.
- @return An array of objects conforming to the `MGLFeature` protocol that
- represent features in the sources used by the current style.
- */
-- (NSArray<id <MGLFeature>> *)visibleFeaturesAtPoint:(NSPoint)point NS_SWIFT_NAME(visibleFeatures(at:));
-
-/**
- Returns an array of rendered map features that intersect with a given point,
- restricted to the given style layers.
-
- This method returns all the intersecting features from the specified layers. To
- filter the returned features, use the
- `-visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:predicate:` method. For
- more information about searching for map features, see that method’s
- documentation.
-
- @param point A point expressed in the map view’s coordinate system.
- @param styleLayerIdentifiers A set of strings that correspond to the names of
- layers defined in the current style. Only the features contained in these
- layers are included in the returned array.
- @return An array of objects conforming to the `MGLFeature` protocol that
- represent features in the sources used by the current style.
- */
-- (NSArray<id <MGLFeature>> *)visibleFeaturesAtPoint:(NSPoint)point inStyleLayersWithIdentifiers:(nullable NSSet<NSString *> *)styleLayerIdentifiers NS_SWIFT_NAME(visibleFeatures(at:styleLayerIdentifiers:));
-
-/**
- Returns an array of rendered map features that intersect with a given point,
- restricted to the given style layers and filtered by the given predicate.
-
- Each object in the returned array represents a feature rendered by the
- current style and provides access to attributes specified by the relevant map
- content sources. The returned array includes features loaded by
- `MGLShapeSource` and `MGLVectorTileSource` objects but does not include
- anything from `MGLRasterTileSource` objects, or from video or canvas sources,
- which are unsupported by this SDK.
-
- The returned features are drawn by a style layer in the current style. For
- example, suppose the current style uses the
- <a href="https://www.mapbox.com/vector-tiles/mapbox-streets/">Mapbox Streets source</a>,
- but none of the specified style layers includes features that have the `maki`
- property set to `bus`. If you pass a point corresponding to the location of a
- bus stop into this method, the bus stop feature does not appear in the
- resulting array. On the other hand, if the style does include bus stops, an
- `MGLFeature` object representing that bus stop is returned and its
- `attributes` dictionary has the `maki` key set to `bus` (along with other
- attributes). The dictionary contains only the attributes provided by the
- tile source; it does not include computed attribute values or rules about how
- the feature is rendered by the current style.
-
- The returned array is sorted by z-order, starting with the topmost rendered
- feature and ending with the bottommost rendered feature. A feature that is
- rendered multiple times due to wrapping across the antimeridian at low zoom
- levels is included only once, subject to the caveat that follows.
-
- Features come from tiled vector data or GeoJSON data that is converted to tiles
- internally, so feature geometries are clipped at tile boundaries and features
- may appear duplicated across tiles. For example, suppose the specified point
- lies along a road that spans the screen. The resulting array includes those
- parts of the road that lie within the map tile that contain the specified
- point, even if the road extends into other tiles.
-
- To find out the layer names in a particular style, view the style in
- <a href="https://www.mapbox.com/studio/">Mapbox Studio</a>.
-
- Only visible features are returned. To obtain features regardless of
- visibility, use the
- `-[MGLVectorTileSource featuresInSourceLayersWithIdentifiers:predicate:]` and
- `-[MGLShapeSource featuresMatchingPredicate:]` methods on the relevant sources.
-
- @note Layer identifiers are not guaranteed to exist across styles or different
- versions of the same style. Applications that use this API must first set
- the style URL to an explicitly versioned style using a convenience method
- like `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL”
- inspectable in Interface Builder, or a manually constructed `NSURL`. This
- approach also avoids layer identifer name changes that will occur in the
- default style’s layers over time.
-
- @param point A point expressed in the map view’s coordinate system.
- @param styleLayerIdentifiers A set of strings that correspond to the names of
- layers defined in the current style. Only the features contained in these
- layers are included in the returned array.
- @param predicate A predicate to filter the returned features.
- @return An array of objects conforming to the `MGLFeature` protocol that
- represent features in the sources used by the current style.
- */
-- (NSArray<id <MGLFeature>> *)visibleFeaturesAtPoint:(NSPoint)point inStyleLayersWithIdentifiers:(nullable NSSet<NSString *> *)styleLayerIdentifiers predicate:(nullable NSPredicate *)predicate NS_SWIFT_NAME(visibleFeatures(at:styleLayerIdentifiers:predicate:));
-
-/**
- Returns an array of rendered map features that intersect with the given
- rectangle.
-
- This method may return features from any of the map’s style layers. To restrict
- the search to a particular layer or layers, use the
- `-visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:` method. For more
- information about searching for map features, see that method’s documentation.
-
- @param rect A rectangle expressed in the map view’s coordinate system.
- @return An array of objects conforming to the `MGLFeature` protocol that
- represent features in the sources used by the current style.
- */
-- (NSArray<id <MGLFeature>> *)visibleFeaturesInRect:(NSRect)rect NS_SWIFT_NAME(visibleFeatures(in:));
-
-/**
- Returns an array of rendered map features that intersect with the given
- rectangle, restricted to the given style layers.
-
- This method returns all the intersecting features from the specified layers. To
- filter the returned features, use the
- `-visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:predicate:` method. For
- more information about searching for map features, see that method’s
- documentation.
-
- @param rect A rectangle expressed in the map view’s coordinate system.
- @param styleLayerIdentifiers A set of strings that correspond to the names of
- layers defined in the current style. Only the features contained in these
- layers are included in the returned array.
- @return An array of objects conforming to the `MGLFeature` protocol that
- represent features in the sources used by the current style.
- */
-- (NSArray<id <MGLFeature>> *)visibleFeaturesInRect:(NSRect)rect inStyleLayersWithIdentifiers:(nullable NSSet<NSString *> *)styleLayerIdentifiers NS_SWIFT_NAME(visibleFeatures(at:styleLayerIdentifiers:));
-
-/**
- Returns an array of rendered map features that intersect with the given
- rectangle, restricted to the given style layers and filtered by the given
- predicate.
-
- Each object in the returned array represents a feature rendered by the
- current style and provides access to attributes specified by the relevant map
- content sources. The returned array includes features loaded by
- `MGLShapeSource` and `MGLVectorTileSource` objects but does not include
- anything from `MGLRasterTileSource` objects, or from video or canvas sources,
- which are unsupported by this SDK.
-
- The returned features are drawn by a style layer in the current style. For
- example, suppose the current style uses the
- <a href="https://www.mapbox.com/vector-tiles/mapbox-streets/">Mapbox Streets source</a>,
- but none of the specified style layers includes features that have the `maki`
- property set to `bus`. If you pass a rectangle containing the location of a bus
- stop into this method, the bus stop feature does not appear in the resulting
- array. On the other hand, if the style does include bus stops, an `MGLFeature`
- object representing that bus stop is returned and its `attributes` dictionary
- has the `maki` key set to `bus` (along with other attributes). The dictionary
- contains only the attributes provided by the tile source; it does not include
- computed attribute values or rules about how the feature is rendered by the
- current style.
-
- The returned array is sorted by z-order, starting with the topmost rendered
- feature and ending with the bottommost rendered feature. A feature that is
- rendered multiple times due to wrapping across the antimeridian at low zoom
- levels is included only once, subject to the caveat that follows.
-
- Features come from tiled vector data or GeoJSON data that is converted to tiles
- internally, so feature geometries are clipped at tile boundaries and features
- may appear duplicated across tiles. For example, suppose the specified
- rectangle intersects with a road that spans the screen. The resulting array
- includes those parts of the road that lie within the map tiles covering the
- specified rectangle, even if the road extends into other tiles. The portion of
- the road within each map tile is included individually.
-
- To find out the layer names in a particular style, view the style in
- <a href="https://www.mapbox.com/studio/">Mapbox Studio</a>.
-
- Only visible features are returned. To obtain features regardless of
- visibility, use the
- `-[MGLVectorTileSource featuresInSourceLayersWithIdentifiers:predicate:]` and
- `-[MGLShapeSource featuresMatchingPredicate:]` methods on the relevant sources.
-
- @note Layer identifiers are not guaranteed to exist across styles or different
- versions of the same style. Applications that use this API must first set
- the style URL to an explicitly versioned style using a convenience method
- like `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL”
- inspectable in Interface Builder, or a manually constructed `NSURL`. This
- approach also avoids layer identifer name changes that will occur in the
- default style’s layers over time.
-
- @param rect A rectangle expressed in the map view’s coordinate system.
- @param styleLayerIdentifiers A set of strings that correspond to the names of
- layers defined in the current style. Only the features contained in these
- layers are included in the returned array.
- @param predicate A predicate to filter the returned features.
- @return An array of objects conforming to the `MGLFeature` protocol that
- represent features in the sources used by the current style.
- */
-- (NSArray<id <MGLFeature>> *)visibleFeaturesInRect:(NSRect)rect inStyleLayersWithIdentifiers:(nullable NSSet<NSString *> *)styleLayerIdentifiers predicate:(nullable NSPredicate *)predicate NS_SWIFT_NAME(visibleFeatures(in:styleLayerIdentifiers:predicate:));
-
-#pragma mark Converting Geographic Coordinates
-
-/**
- Converts a geographic coordinate to a point in the given view’s coordinate
- system.
-
- @param coordinate The geographic coordinate to convert.
- @param view The view in whose coordinate system the returned point should be
- expressed. If this parameter is `nil`, the returned point is expressed in
- the window’s coordinate system. If `view` is not `nil`, it must belong to
- the same window as the map view.
- @return The point (in the appropriate view or window coordinate system)
- corresponding to the given geographic coordinate.
- */
-- (NSPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(nullable NSView *)view;
-
-/**
- Converts a point in the given view’s coordinate system to a geographic
- coordinate.
-
- @param point The point to convert.
- @param view The view in whose coordinate system the point is expressed.
- @return The geographic coordinate at the given point.
- */
-- (CLLocationCoordinate2D)convertPoint:(NSPoint)point toCoordinateFromView:(nullable NSView *)view;
-
-/**
- Converts a geographic bounding box to a rectangle in the given view’s
- coordinate system.
-
- To bring both sides of the antimeridian or international date line into view,
- specify some longitudes less than −180 degrees or greater than 180 degrees. For
- example, to show both Tokyo and San Francisco simultaneously, you could set the
- visible bounds to extend from (35.68476, −220.24257) to (37.78428, −122.41310).
-
- @param bounds The geographic bounding box to convert.
- @param view The view in whose coordinate system the returned rectangle should
- be expressed. If this parameter is `nil`, the returned rectangle is
- expressed in the window’s coordinate system. If `view` is not `nil`, it must
- belong to the same window as the map view.
- */
-- (NSRect)convertCoordinateBounds:(MGLCoordinateBounds)bounds toRectToView:(nullable NSView *)view;
-
-/**
- Converts a rectangle in the given view’s coordinate system to a geographic
- bounding box.
-
- If a longitude is less than −180 degrees or greater than 180 degrees, the
- bounding box straddles the antimeridian or international date line.
-
- @param rect The rectangle to convert.
- @param view The view in whose coordinate system the rectangle is expressed.
- @return The geographic bounding box coextensive with the given rectangle.
- */
-- (MGLCoordinateBounds)convertRect:(NSRect)rect toCoordinateBoundsFromView:(nullable NSView *)view;
-
-/**
- Returns the distance spanned by one point in the map view’s coordinate system
- at the given latitude and current zoom level.
-
- The distance between points decreases as the latitude approaches the poles.
- This relationship parallels the relationship between longitudinal coordinates
- at different latitudes.
-
- @param latitude The latitude of the geographic coordinate represented by the
- point.
- @return The distance in meters spanned by a single point.
- */
-- (CLLocationDistance)metersPerPointAtLatitude:(CLLocationDegrees)latitude;
-
-#pragma mark Giving Feedback to Improve the Map
-
-/**
- Opens one or more webpages in the default Web browser in which the user can
- provide feedback about the map data.
-
- You should add a menu item to the Help menu of your application that invokes
- this method. Title it “Improve This Map” or similar. Set its target to the
- first responder and its action to `giveFeedback:`.
-
- This map view searches the current style’s sources for webpages to open.
- Specifically, each source’s tile set has an `attribution` property containing
- HTML code; if an <code>&lt;a></code> tag (link) within that code has an
- <code>class</code> attribute set to <code>mapbox-improve-map</code>, its
- <code>href</code> attribute defines the URL to open. Such links are omitted
- from the attribution view.
- */
-- (IBAction)giveFeedback:(id)sender;
-
-#pragma mark Debugging the Map
-
-/**
- The options that determine which debugging aids are shown on the map.
-
- These options are all disabled by default and should remain disabled in
- released software for performance and aesthetic reasons.
- */
-@property (nonatomic) MGLMapDebugMaskOptions debugMask;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm
deleted file mode 100644
index aec9cea0bc..0000000000
--- a/platform/macos/src/MGLMapView.mm
+++ /dev/null
@@ -1,3081 +0,0 @@
-#import "MGLMapView_Private.h"
-
-#import "MGLAttributionButton.h"
-#import "MGLCompassCell.h"
-#import "MGLStyle.h"
-#import "MGLRendererFrontend.h"
-#import "MGLRendererConfiguration.h"
-
-#import "MGLAnnotationImage_Private.h"
-#import "MGLAttributionInfo_Private.h"
-#import "MGLFeature_Private.h"
-#import "MGLFoundation_Private.h"
-#import "MGLGeometry_Private.h"
-#import "MGLMultiPoint_Private.h"
-#import "MGLOfflineStorage_Private.h"
-#import "MGLStyle_Private.h"
-#import "MGLShape_Private.h"
-
-#import "MGLAccountManager.h"
-#import "MGLMapCamera.h"
-#import "MGLPolygon.h"
-#import "MGLPolyline.h"
-#import "MGLAnnotationImage.h"
-#import "MGLMapViewDelegate.h"
-#import "MGLImageSource.h"
-
-#import <mbgl/map/map.hpp>
-#import <mbgl/map/map_options.hpp>
-#import <mbgl/style/style.hpp>
-#import <mbgl/annotation/annotation.hpp>
-#import <mbgl/map/camera.hpp>
-#import <mbgl/storage/reachability.h>
-#import <mbgl/style/image.hpp>
-#import <mbgl/renderer/renderer.hpp>
-#import <mbgl/storage/network_status.hpp>
-#import <mbgl/storage/resource_options.hpp>
-#import <mbgl/math/wrap.hpp>
-#import <mbgl/util/constants.hpp>
-#import <mbgl/util/chrono.hpp>
-#import <mbgl/util/exception.hpp>
-#import <mbgl/util/run_loop.hpp>
-#import <mbgl/util/string.hpp>
-#import <mbgl/util/projection.hpp>
-
-#import <map>
-#import <unordered_map>
-#import <unordered_set>
-
-#import "MGLMapView+Impl.h"
-#import "NSBundle+MGLAdditions.h"
-#import "NSDate+MGLAdditions.h"
-#import "NSProcessInfo+MGLAdditions.h"
-#import "NSException+MGLAdditions.h"
-#import "NSString+MGLAdditions.h"
-#import "NSURL+MGLAdditions.h"
-#import "NSColor+MGLAdditions.h"
-#import "NSImage+MGLAdditions.h"
-#import "NSPredicate+MGLPrivateAdditions.h"
-#import "MGLLoggingConfiguration_Private.h"
-#import "MGLNetworkIntegrationManager.h"
-
-class MGLAnnotationContext;
-
-/// Distance from the edge of the view to ornament views (logo, attribution, etc.).
-const CGFloat MGLOrnamentPadding = 12;
-
-/// Alpha value of the ornament views (logo, attribution, etc.).
-const CGFloat MGLOrnamentOpacity = 0.9;
-
-/// Default duration for programmatic animations.
-const NSTimeInterval MGLAnimationDuration = 0.3;
-
-/// Distance in points that a single press of the panning keyboard shortcut pans the map by.
-const CGFloat MGLKeyPanningIncrement = 150;
-
-/// Degrees that a single press of the rotation keyboard shortcut rotates the map by.
-const CLLocationDegrees MGLKeyRotationIncrement = 25;
-
-/// Key for the user default that, when true, causes the map view to zoom in and out on scroll wheel events.
-NSString * const MGLScrollWheelZoomsMapViewDefaultKey = @"MGLScrollWheelZoomsMapView";
-
-/// Reuse identifier and file name of the default point annotation image.
-static NSString * const MGLDefaultStyleMarkerSymbolName = @"default_marker";
-
-/// Prefix that denotes a sprite installed by MGLMapView, to avoid collisions
-/// with style-defined sprites.
-static NSString * const MGLAnnotationSpritePrefix = @"com.mapbox.sprites.";
-
-/// Slop area around the hit testing point, allowing for imprecise annotation selection.
-const CGFloat MGLAnnotationImagePaddingForHitTest = 4;
-
-/// Distance from the callout’s anchor point to the annotation it points to.
-const CGFloat MGLAnnotationImagePaddingForCallout = 4;
-
-/// Padding to edge of view that an offscreen annotation must have when being brought onscreen (by being selected)
-const NSEdgeInsets MGLMapViewOffscreenAnnotationPadding = NSEdgeInsetsMake(-30.0f, -30.0f, -30.0f, -30.0f);
-
-/// Unique identifier representing a single annotation in mbgl.
-typedef uint64_t MGLAnnotationTag;
-
-/// An indication that the requested annotation was not found or is nonexistent.
-enum { MGLAnnotationTagNotFound = UINT64_MAX };
-
-/// Mapping from an annotation tag to metadata about that annotation, including
-/// the annotation itself.
-typedef std::unordered_map<MGLAnnotationTag, MGLAnnotationContext> MGLAnnotationTagContextMap;
-
-/// Mapping from an annotation object to an annotation tag.
-typedef std::map<id<MGLAnnotation>, MGLAnnotationTag> MGLAnnotationObjectTagMap;
-
-/// Returns an NSImage for the default marker image.
-NSImage *MGLDefaultMarkerImage() {
- NSString *path = [[NSBundle mgl_frameworkBundle] pathForResource:MGLDefaultStyleMarkerSymbolName
- ofType:@"pdf"];
- return [[NSImage alloc] initWithContentsOfFile:path];
-}
-
-/// Converts a media timing function into a unit bezier object usable in mbgl.
-mbgl::util::UnitBezier MGLUnitBezierForMediaTimingFunction(CAMediaTimingFunction *function) {
- if (!function) {
- function = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
- }
- float p1[2], p2[2];
- [function getControlPointAtIndex:0 values:p1];
- [function getControlPointAtIndex:1 values:p2];
- return { p1[0], p1[1], p2[0], p2[1] };
-}
-
-/// Lightweight container for metadata about an annotation, including the annotation itself.
-class MGLAnnotationContext {
-public:
- id <MGLAnnotation> annotation;
- /// The annotation’s image’s reuse identifier.
- NSString *imageReuseIdentifier;
-};
-
-@interface MGLMapView () <NSPopoverDelegate, MGLMultiPointDelegate, NSGestureRecognizerDelegate>
-
-@property (nonatomic, readwrite) NSSegmentedControl *zoomControls;
-@property (nonatomic, readwrite) NSSlider *compass;
-@property (nonatomic, readwrite) NSImageView *logoView;
-@property (nonatomic, readwrite) NSView *attributionView;
-
-@property (nonatomic, readwrite) MGLStyle *style;
-
-/// Mapping from reusable identifiers to annotation images.
-@property (nonatomic) NSMutableDictionary<NSString *, MGLAnnotationImage *> *annotationImagesByIdentifier;
-/// Currently shown popover representing the selected annotation.
-@property (nonatomic) NSPopover *calloutForSelectedAnnotation;
-
-@property (nonatomic, readwrite, getter=isDormant) BOOL dormant;
-
-@end
-
-@implementation MGLMapView {
- /// Cross-platform map view controller.
- mbgl::Map *_mbglMap;
- std::unique_ptr<MGLMapViewImpl> _mbglView;
- std::unique_ptr<MGLRenderFrontend> _rendererFrontend;
-
- NSPanGestureRecognizer *_panGestureRecognizer;
- NSMagnificationGestureRecognizer *_magnificationGestureRecognizer;
- NSRotationGestureRecognizer *_rotationGestureRecognizer;
- NSClickGestureRecognizer *_singleClickRecognizer;
- double _zoomAtBeginningOfGesture;
- CLLocationDirection _directionAtBeginningOfGesture;
- CGFloat _pitchAtBeginningOfGesture;
- BOOL _didHideCursorDuringGesture;
-
- MGLAnnotationTagContextMap _annotationContextsByAnnotationTag;
- MGLAnnotationObjectTagMap _annotationTagsByAnnotation;
- MGLAnnotationTag _selectedAnnotationTag;
- MGLAnnotationTag _lastSelectedAnnotationTag;
- /// Size of the rectangle formed by unioning the maximum slop area around every annotation image.
- NSSize _unionedAnnotationImageSize;
- std::vector<MGLAnnotationTag> _annotationsNearbyLastClick;
- /// True if any annotations that have tooltips have been installed.
- BOOL _wantsToolTipRects;
- /// True if any annotation images that have custom cursors have been installed.
- BOOL _wantsCursorRects;
- /// True if a willChange notification has been issued for shape annotation layers and a didChange notification is pending.
- BOOL _isChangingAnnotationLayers;
-
- // Cached checks for delegate method implementations that may be called from
- // MGLMultiPointDelegate methods.
-
- BOOL _delegateHasAlphasForShapeAnnotations;
- BOOL _delegateHasStrokeColorsForShapeAnnotations;
- BOOL _delegateHasFillColorsForShapeAnnotations;
- BOOL _delegateHasLineWidthsForShapeAnnotations;
-
- /// True if the current process is the Interface Builder designable
- /// renderer. When drawing the designable, the map is paused, so any call to
- /// it may hang the process.
- BOOL _isTargetingInterfaceBuilder;
- CLLocationDegrees _pendingLatitude;
- CLLocationDegrees _pendingLongitude;
-
- /// True if the view is currently printing itself.
- BOOL _isPrinting;
-
- /// reachability instance
- MGLReachability *_reachability;
-}
-
-#pragma mark Lifecycle
-
-+ (void)initialize {
- if (self == [MGLMapView class]) {
- [[NSUserDefaults standardUserDefaults] registerDefaults:@{
- MGLScrollWheelZoomsMapViewDefaultKey: @NO,
- }];
- }
-}
-
-- (instancetype)initWithFrame:(NSRect)frameRect {
- if (self = [super initWithFrame:frameRect]) {
- MGLLogInfo(@"Starting %@ initialization.", NSStringFromClass([self class]));
- MGLLogDebug(@"Initializing frame: %@", NSStringFromRect(frameRect));
- [self commonInit];
- self.styleURL = nil;
- MGLLogInfo(@"Finalizing %@ initialization.", NSStringFromClass([self class]));
- }
- return self;
-}
-
-- (instancetype)initWithFrame:(NSRect)frame styleURL:(nullable NSURL *)styleURL {
- if (self = [super initWithFrame:frame]) {
- MGLLogInfo(@"Starting %@ initialization.", NSStringFromClass([self class]));
- MGLLogDebug(@"Initializing frame: %@ styleURL: %@", NSStringFromRect(frame), styleURL);
- [self commonInit];
- self.styleURL = styleURL;
- MGLLogInfo(@"Finalizing %@ initialization.", NSStringFromClass([self class]));
- }
- return self;
-}
-
-- (instancetype)initWithCoder:(nonnull NSCoder *)decoder {
- if (self = [super initWithCoder:decoder]) {
- MGLLogInfo(@"Starting %@ initialization.", NSStringFromClass([self class]));
- [self commonInit];
- MGLLogInfo(@"Finalizing %@ initialization.", NSStringFromClass([self class]));
- }
- return self;
-}
-
-- (void)awakeFromNib {
- [super awakeFromNib];
-
- // If the Style URL inspectable was not set, make sure to go through
- // -setStyleURL: to load the default style.
- if (_mbglMap->getStyle().getURL().empty()) {
- self.styleURL = nil;
- }
-}
-
-+ (NSArray *)restorableStateKeyPaths {
- return @[@"camera", @"debugMask"];
-}
-
-- (void)commonInit {
- MGLNativeNetworkManager.sharedManager.delegate = MGLNetworkIntegrationManager.sharedManager;
- _isTargetingInterfaceBuilder = NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent;
-
- // Set up cross-platform controllers and resources.
- _mbglView = MGLMapViewImpl::Create(self);
-
- // Delete the pre-offline ambient cache at
- // ~/Library/Caches/com.mapbox.MapboxGL/cache.db.
- NSURL *cachesDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSCachesDirectory
- inDomain:NSUserDomainMask
- appropriateForURL:nil
- create:NO
- error:nil];
- cachesDirectoryURL = [cachesDirectoryURL URLByAppendingPathComponent:@"com.mapbox.MapboxGL"];
- NSURL *legacyCacheURL = [cachesDirectoryURL URLByAppendingPathComponent:@"cache.db"];
- [[NSFileManager defaultManager] removeItemAtURL:legacyCacheURL error:NULL];
-
- MGLRendererConfiguration *config = [MGLRendererConfiguration currentConfiguration];
-
- auto renderer = std::make_unique<mbgl::Renderer>(_mbglView->getRendererBackend(), config.scaleFactor, config.localFontFamilyName);
- BOOL enableCrossSourceCollisions = !config.perSourceCollisions;
- _rendererFrontend = std::make_unique<MGLRenderFrontend>(std::move(renderer), self, _mbglView->getRendererBackend(), true);
-
- mbgl::MapOptions mapOptions;
- mapOptions.withMapMode(mbgl::MapMode::Continuous)
- .withSize(self.size)
- .withPixelRatio(config.scaleFactor)
- .withConstrainMode(mbgl::ConstrainMode::None)
- .withViewportMode(mbgl::ViewportMode::Default)
- .withCrossSourceCollisions(enableCrossSourceCollisions);
-
- mbgl::ResourceOptions resourceOptions;
- resourceOptions.withCachePath([[MGLOfflineStorage sharedOfflineStorage] mbglCachePath])
- .withAssetPath([NSBundle mainBundle].resourceURL.path.UTF8String);
-
- _mbglMap = new mbgl::Map(*_rendererFrontend, *_mbglView, mapOptions, resourceOptions);
-
- // Notify map object when network reachability status changes.
- _reachability = [MGLReachability reachabilityForInternetConnection];
- _reachability.reachableBlock = ^(MGLReachability *) {
- mbgl::NetworkStatus::Reachable();
- };
- [_reachability startNotifier];
-
- // Install ornaments and gesture recognizers.
- [self installZoomControls];
- [self installCompass];
- [self installLogoView];
- [self installAttributionView];
- [self installGestureRecognizers];
-
- // Set up annotation management and selection state.
- _annotationImagesByIdentifier = [NSMutableDictionary dictionary];
- _annotationContextsByAnnotationTag = {};
- _annotationTagsByAnnotation = {};
- _selectedAnnotationTag = MGLAnnotationTagNotFound;
- _lastSelectedAnnotationTag = MGLAnnotationTagNotFound;
- _annotationsNearbyLastClick = {};
-
- // Jump to Null Island initially.
- self.automaticallyAdjustsContentInsets = YES;
- mbgl::CameraOptions options;
- options.center = mbgl::LatLng(0, 0);
- options.padding = MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets);
- options.zoom = *_mbglMap->getBounds().minZoom;
- _mbglMap->jumpTo(options);
- _pendingLatitude = NAN;
- _pendingLongitude = NAN;
-}
-
-- (mbgl::Size)size {
- // check for minimum texture size supported by OpenGL ES 2.0
- //
- CGSize size = CGSizeMake(MAX(self.bounds.size.width, 64), MAX(self.bounds.size.height, 64));
- return { static_cast<uint32_t>(size.width),
- static_cast<uint32_t>(size.height) };
-}
-
-- (mbgl::Size)framebufferSize {
- NSRect bounds = [self convertRectToBacking:self.bounds];
- return { static_cast<uint32_t>(bounds.size.width), static_cast<uint32_t>(bounds.size.height) };
-}
-
-/// Adds zoom controls to the lower-right corner.
-- (void)installZoomControls {
- _zoomControls = [[NSSegmentedControl alloc] initWithFrame:NSZeroRect];
- _zoomControls.wantsLayer = YES;
- _zoomControls.layer.opacity = MGLOrnamentOpacity;
- [(NSSegmentedCell *)_zoomControls.cell setTrackingMode:NSSegmentSwitchTrackingMomentary];
- _zoomControls.continuous = YES;
- _zoomControls.segmentCount = 2;
- [_zoomControls setLabel:NSLocalizedStringWithDefaultValue(@"ZOOM_OUT_LABEL", nil, nil, @"−", @"Label of Zoom Out button; U+2212 MINUS SIGN") forSegment:0];
- [(NSSegmentedCell *)_zoomControls.cell setTag:0 forSegment:0];
- [(NSSegmentedCell *)_zoomControls.cell setToolTip:NSLocalizedStringWithDefaultValue(@"ZOOM_OUT_TOOLTIP", nil, nil, @"Zoom Out", @"Tooltip of Zoom Out button") forSegment:0];
- [_zoomControls setLabel:NSLocalizedStringWithDefaultValue(@"ZOOM_IN_LABEL", nil, nil, @"+", @"Label of Zoom In button") forSegment:1];
- [(NSSegmentedCell *)_zoomControls.cell setTag:1 forSegment:1];
- [(NSSegmentedCell *)_zoomControls.cell setToolTip:NSLocalizedStringWithDefaultValue(@"ZOOM_IN_TOOLTIP", nil, nil, @"Zoom In", @"Tooltip of Zoom In button") forSegment:1];
- _zoomControls.target = self;
- _zoomControls.action = @selector(zoomInOrOut:);
- _zoomControls.controlSize = NSRegularControlSize;
- [_zoomControls sizeToFit];
- _zoomControls.translatesAutoresizingMaskIntoConstraints = NO;
- [self addSubview:_zoomControls];
-}
-
-/// Adds a rudimentary compass control to the lower-right corner.
-- (void)installCompass {
- _compass = [[NSSlider alloc] initWithFrame:NSZeroRect];
- _compass.wantsLayer = YES;
- _compass.layer.opacity = MGLOrnamentOpacity;
- _compass.cell = [[MGLCompassCell alloc] init];
- _compass.continuous = YES;
- _compass.target = self;
- _compass.action = @selector(rotate:);
- [_compass sizeToFit];
- _compass.translatesAutoresizingMaskIntoConstraints = NO;
- [self addSubview:_compass];
-}
-
-/// Adds a Mapbox logo to the lower-left corner.
-- (void)installLogoView {
- _logoView = [[NSImageView alloc] initWithFrame:NSZeroRect];
- _logoView.wantsLayer = YES;
- NSImage *logoImage = [[NSImage alloc] initWithContentsOfFile:
- [[NSBundle mgl_frameworkBundle] pathForResource:@"mapbox" ofType:@"pdf"]];
- // Account for the image’s built-in padding when aligning other controls to the logo.
- logoImage.alignmentRect = NSOffsetRect(logoImage.alignmentRect, 0, 3);
- _logoView.image = logoImage;
- _logoView.translatesAutoresizingMaskIntoConstraints = NO;
- _logoView.accessibilityTitle = NSLocalizedStringWithDefaultValue(@"MAP_A11Y_TITLE", nil, nil, @"Mapbox", @"Accessibility title");
- [self addSubview:_logoView];
-}
-
-/// Adds legally required map attribution to the lower-left corner.
-- (void)installAttributionView {
- [_attributionView removeFromSuperview];
- _attributionView = [[NSView alloc] initWithFrame:NSZeroRect];
- _attributionView.wantsLayer = YES;
-
- // Make the background and foreground translucent to be unobtrusive.
- _attributionView.layer.opacity = 0.6;
-
- // Blur the background to prevent text underneath the view from running into
- // the text in the view, rendering it illegible.
- CIFilter *attributionBlurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
- [attributionBlurFilter setDefaults];
-
- // Brighten the background. This is similar to applying a translucent white
- // background on the view, but the effect is a bit more subtle and works
- // well with the blur above.
- CIFilter *attributionColorFilter = [CIFilter filterWithName:@"CIColorControls"];
- [attributionColorFilter setDefaults];
- [attributionColorFilter setValue:@(0.1) forKey:kCIInputBrightnessKey];
-
- // Apply the background effects and a standard button corner radius.
- _attributionView.backgroundFilters = @[attributionColorFilter, attributionBlurFilter];
- _attributionView.layer.cornerRadius = 4;
-
- _attributionView.translatesAutoresizingMaskIntoConstraints = NO;
- [self addSubview:_attributionView];
- [self updateAttributionView];
-}
-
-/// Adds gesture recognizers for manipulating the viewport and selecting annotations.
-- (void)installGestureRecognizers {
- _scrollEnabled = YES;
- _zoomEnabled = YES;
- _rotateEnabled = YES;
- _pitchEnabled = YES;
-
- _panGestureRecognizer = [[NSPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
- _panGestureRecognizer.delaysKeyEvents = YES;
- [self addGestureRecognizer:_panGestureRecognizer];
-
- _singleClickRecognizer = [[NSClickGestureRecognizer alloc] initWithTarget:self action:@selector(handleClickGesture:)];
- _singleClickRecognizer.delaysPrimaryMouseButtonEvents = NO;
- _singleClickRecognizer.delegate = self;
- [self addGestureRecognizer:_singleClickRecognizer];
-
- NSClickGestureRecognizer *rightClickGestureRecognizer = [[NSClickGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightClickGesture:)];
- rightClickGestureRecognizer.buttonMask = 0x2;
- [self addGestureRecognizer:rightClickGestureRecognizer];
-
- NSClickGestureRecognizer *doubleClickGestureRecognizer = [[NSClickGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleClickGesture:)];
- doubleClickGestureRecognizer.numberOfClicksRequired = 2;
- doubleClickGestureRecognizer.delaysPrimaryMouseButtonEvents = NO;
- [self addGestureRecognizer:doubleClickGestureRecognizer];
-
- _magnificationGestureRecognizer = [[NSMagnificationGestureRecognizer alloc] initWithTarget:self action:@selector(handleMagnificationGesture:)];
- [self addGestureRecognizer:_magnificationGestureRecognizer];
-
- _rotationGestureRecognizer = [[NSRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotationGesture:)];
- [self addGestureRecognizer:_rotationGestureRecognizer];
-}
-
-/// Updates the attribution view to reflect the sources used. For now, this is
-/// hard-coded to the standard Mapbox and OpenStreetMap attribution.
-- (void)updateAttributionView {
- NSView *attributionView = self.attributionView;
- for (NSView *button in attributionView.subviews) {
- [button removeConstraints:button.constraints];
- }
- attributionView.subviews = @[];
- [attributionView removeConstraints:attributionView.constraints];
-
- // Make the whole string mini by default.
- // Force links to be black, because the default blue is distracting.
- CGFloat miniSize = [NSFont systemFontSizeForControlSize:NSMiniControlSize];
- NSArray *attributionInfos = [self.style attributionInfosWithFontSize:miniSize linkColor:[NSColor blackColor]];
- for (MGLAttributionInfo *info in attributionInfos) {
- // Feedback links are added to the Help menu.
- if (info.feedbackLink) {
- continue;
- }
-
- // For each attribution, add a borderless button that responds to clicks
- // and feels like a hyperlink.
- NSButton *button = [[MGLAttributionButton alloc] initWithAttributionInfo:info];
- button.controlSize = NSMiniControlSize;
- button.translatesAutoresizingMaskIntoConstraints = NO;
-
- // Set the new button flush with the buttom of the container and to the
- // right of the previous button, with standard spacing. If there is no
- // previous button, align to the container instead.
- NSView *previousView = attributionView.subviews.lastObject;
- [attributionView addSubview:button];
- [attributionView addConstraint:
- [NSLayoutConstraint constraintWithItem:button
- attribute:NSLayoutAttributeBottom
- relatedBy:NSLayoutRelationEqual
- toItem:attributionView
- attribute:NSLayoutAttributeBottom
- multiplier:1
- constant:0]];
- [attributionView addConstraint:
- [NSLayoutConstraint constraintWithItem:button
- attribute:NSLayoutAttributeLeading
- relatedBy:NSLayoutRelationEqual
- toItem:previousView ? previousView : attributionView
- attribute:previousView ? NSLayoutAttributeTrailing : NSLayoutAttributeLeading
- multiplier:1
- constant:8]];
- [attributionView addConstraint:
- [NSLayoutConstraint constraintWithItem:button
- attribute:NSLayoutAttributeTop
- relatedBy:NSLayoutRelationEqual
- toItem:attributionView
- attribute:NSLayoutAttributeTop
- multiplier:1
- constant:0]];
- }
-
- if (attributionInfos.count) {
- [attributionView addConstraint:
- [NSLayoutConstraint constraintWithItem:attributionView
- attribute:NSLayoutAttributeTrailing
- relatedBy:NSLayoutRelationEqual
- toItem:attributionView.subviews.lastObject
- attribute:NSLayoutAttributeTrailing
- multiplier:1
- constant:8]];
- }
-}
-
-- (void)dealloc {
-
- [_reachability stopNotifier];
-
-
- [self.window removeObserver:self forKeyPath:@"contentLayoutRect"];
- [self.window removeObserver:self forKeyPath:@"titlebarAppearsTransparent"];
-
- // Close any annotation callout immediately.
- [self.calloutForSelectedAnnotation close];
- self.calloutForSelectedAnnotation = nil;
-
- // Removing the annotations unregisters any outstanding KVO observers.
- [self removeAnnotations:self.annotations];
-
- if (_mbglMap) {
- delete _mbglMap;
- _mbglMap = nullptr;
- }
- _mbglView.reset();
-}
-
-- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(__unused NSDictionary *)change context:(void *)context {
- if ([keyPath isEqualToString:@"contentLayoutRect"] ||
- [keyPath isEqualToString:@"titlebarAppearsTransparent"]) {
- [self adjustContentInsets];
- } else if ([keyPath isEqualToString:@"coordinate"] &&
- [object conformsToProtocol:@protocol(MGLAnnotation)] &&
- ![object isKindOfClass:[MGLMultiPoint class]]) {
- id <MGLAnnotation> annotation = object;
- MGLAnnotationTag annotationTag = (MGLAnnotationTag)(NSUInteger)context;
- // We can get here because a subclass registered itself as an observer
- // of the coordinate key path of a non-multipoint annotation but failed
- // to handle the change. This check deters us from treating the
- // subclass’s context as an annotation tag. If the context happens to
- // match a valid annotation tag, the annotation will be unnecessarily
- // but safely updated.
- if (annotation == [self annotationWithTag:annotationTag]) {
- const mbgl::Point<double> point = MGLPointFromLocationCoordinate2D(annotation.coordinate);
- MGLAnnotationImage *annotationImage = [self imageOfAnnotationWithTag:annotationTag];
- _mbglMap->updateAnnotation(annotationTag, mbgl::SymbolAnnotation { point, annotationImage.styleIconIdentifier.UTF8String ?: "" });
- [self updateAnnotationCallouts];
- }
- } else if ([keyPath isEqualToString:@"coordinates"] &&
- [object isKindOfClass:[MGLMultiPoint class]]) {
- MGLMultiPoint *annotation = object;
- MGLAnnotationTag annotationTag = (MGLAnnotationTag)(NSUInteger)context;
- // We can get here because a subclass registered itself as an observer
- // of the coordinates key path of a multipoint annotation but failed
- // to handle the change. This check deters us from treating the
- // subclass’s context as an annotation tag. If the context happens to
- // match a valid annotation tag, the annotation will be unnecessarily
- // but safely updated.
- if (annotation == [self annotationWithTag:annotationTag]) {
- _mbglMap->updateAnnotation(annotationTag, [annotation annotationObjectWithDelegate:self]);
- [self updateAnnotationCallouts];
- }
- }
-}
-
-+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {
- return [key isEqualToString:@"annotations"] ? YES : [super automaticallyNotifiesObserversForKey:key];
-}
-
-- (void)setDelegate:(id<MGLMapViewDelegate>)delegate {
- _delegate = delegate;
-
- // Cache checks for delegate method implementations that may be called in a
- // hot loop, namely the annotation style methods.
- _delegateHasAlphasForShapeAnnotations = [_delegate respondsToSelector:@selector(mapView:alphaForShapeAnnotation:)];
- _delegateHasStrokeColorsForShapeAnnotations = [_delegate respondsToSelector:@selector(mapView:strokeColorForShapeAnnotation:)];
- _delegateHasFillColorsForShapeAnnotations = [_delegate respondsToSelector:@selector(mapView:fillColorForPolygonAnnotation:)];
- _delegateHasLineWidthsForShapeAnnotations = [_delegate respondsToSelector:@selector(mapView:lineWidthForPolylineAnnotation:)];
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wundeclared-selector"
- if ([self.delegate respondsToSelector:@selector(mapView:regionWillChangeAnimated:)]) {
- NSLog(@"-mapView:regionWillChangeAnimated: is not supported by the macOS SDK, but %@ implements it anyways. "
- @"Please implement -[%@ mapView:cameraWillChangeAnimated:] instead.",
- NSStringFromClass([delegate class]), NSStringFromClass([delegate class]));
- }
- if ([self.delegate respondsToSelector:@selector(mapViewRegionIsChanging:)]) {
- NSLog(@"-mapViewRegionIsChanging: is not supported by the macOS SDK, but %@ implements it anyways. "
- @"Please implement -[%@ mapViewCameraIsChanging:] instead.",
- NSStringFromClass([delegate class]), NSStringFromClass([delegate class]));
- }
- if ([self.delegate respondsToSelector:@selector(mapView:regionDidChangeAnimated:)]) {
- NSLog(@"-mapView:regionDidChangeAnimated: is not supported by the macOS SDK, but %@ implements it anyways. "
- @"Please implement -[%@ mapView:cameraDidChangeAnimated:] instead.",
- NSStringFromClass([delegate class]), NSStringFromClass([delegate class]));
- }
-#pragma clang diagnostic pop
-}
-
-#pragma mark Style
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingStyle {
- return [NSSet setWithObject:@"styleURL"];
-}
-
-- (nonnull NSURL *)styleURL {
- NSString *styleURLString = @(_mbglMap->getStyle().getURL().c_str()).mgl_stringOrNilIfEmpty;
- return styleURLString ? [NSURL URLWithString:styleURLString] : [MGLStyle streetsStyleURLWithVersion:MGLStyleDefaultVersion];
-}
-
-- (void)setStyleURL:(nullable NSURL *)styleURL {
- if (_isTargetingInterfaceBuilder) {
- return;
- }
-
- // Default to Streets.
- if (!styleURL) {
- styleURL = [MGLStyle streetsStyleURLWithVersion:MGLStyleDefaultVersion];
- }
- MGLLogDebug(@"Setting styleURL: %@", styleURL);
- // An access token is required to load any default style, including Streets.
- if (![MGLAccountManager accessToken] && [styleURL.scheme isEqualToString:@"mapbox"]) {
- NSLog(@"Cannot set the style URL to %@ because no access token has been specified.", styleURL);
- return;
- }
-
- styleURL = styleURL.mgl_URLByStandardizingScheme;
- self.style = nil;
- _mbglMap->getStyle().loadURL(styleURL.absoluteString.UTF8String);
-}
-
-- (IBAction)reloadStyle:(__unused id)sender {
- MGLLogInfo(@"Reloading style.");
- NSURL *styleURL = self.styleURL;
- _mbglMap->getStyle().loadURL("");
- self.styleURL = styleURL;
-}
-
-- (void)setPrefetchesTiles:(BOOL)prefetchesTiles
-{
- _mbglMap->setPrefetchZoomDelta(prefetchesTiles ? mbgl::util::DEFAULT_PREFETCH_ZOOM_DELTA : 0);
-}
-
-- (mbgl::Map *)mbglMap {
- return _mbglMap;
-}
-
-- (mbgl::Renderer *)renderer {
- return _rendererFrontend->getRenderer();
-}
-
-#pragma mark View hierarchy and drawing
-
-- (void)viewWillMoveToWindow:(NSWindow *)newWindow {
- [self deselectAnnotation:self.selectedAnnotation];
- if (!self.dormant && !newWindow) {
- self.dormant = YES;
- }
-
- [self.window removeObserver:self forKeyPath:@"contentLayoutRect"];
- [self.window removeObserver:self forKeyPath:@"titlebarAppearsTransparent"];
-}
-
-- (void)viewDidMoveToWindow {
- NSWindow *window = self.window;
- if (self.dormant && window) {
- self.dormant = NO;
- }
-
- if (window && _mbglMap->getMapOptions().constrainMode() == mbgl::ConstrainMode::None) {
- _mbglMap->setConstrainMode(mbgl::ConstrainMode::HeightOnly);
- }
-
- [window addObserver:self
- forKeyPath:@"contentLayoutRect"
- options:NSKeyValueObservingOptionInitial
- context:NULL];
- [window addObserver:self
- forKeyPath:@"titlebarAppearsTransparent"
- options:NSKeyValueObservingOptionInitial
- context:NULL];
-}
-
-- (BOOL)wantsLayer {
- return YES;
-}
-
-- (BOOL)wantsBestResolutionOpenGLSurface {
- // Use an OpenGL layer, except when drawing the designable, which is just
- // ordinary Cocoa.
- return !_isTargetingInterfaceBuilder;
-}
-
-- (CGLContextObj)context {
- return _mbglView->getCGLContextObj();
-}
-
-- (void)setFrame:(NSRect)frame {
- super.frame = frame;
- if (!_isTargetingInterfaceBuilder) {
- _mbglMap->setSize(self.size);
- }
-}
-
-- (void)updateConstraints {
- // Place the zoom controls at the lower-right corner of the view.
- [self addConstraint:
- [NSLayoutConstraint constraintWithItem:self
- attribute:NSLayoutAttributeBottom
- relatedBy:NSLayoutRelationEqual
- toItem:_zoomControls
- attribute:NSLayoutAttributeBottom
- multiplier:1
- constant:MGLOrnamentPadding]];
- [self addConstraint:
- [NSLayoutConstraint constraintWithItem:self
- attribute:NSLayoutAttributeTrailing
- relatedBy:NSLayoutRelationEqual
- toItem:_zoomControls
- attribute:NSLayoutAttributeTrailing
- multiplier:1
- constant:MGLOrnamentPadding]];
-
- // Center the compass above the zoom controls, assuming that the compass is
- // narrower than the zoom controls.
- [self addConstraint:
- [NSLayoutConstraint constraintWithItem:_compass
- attribute:NSLayoutAttributeCenterX
- relatedBy:NSLayoutRelationEqual
- toItem:_zoomControls
- attribute:NSLayoutAttributeCenterX
- multiplier:1
- constant:0]];
- [self addConstraint:
- [NSLayoutConstraint constraintWithItem:_zoomControls
- attribute:NSLayoutAttributeTop
- relatedBy:NSLayoutRelationEqual
- toItem:_compass
- attribute:NSLayoutAttributeBottom
- multiplier:1
- constant:8]];
-
- // Place the logo view in the lower-left corner of the view, accounting for
- // the logo’s alignment rect.
- [self addConstraint:
- [NSLayoutConstraint constraintWithItem:self
- attribute:NSLayoutAttributeBottom
- relatedBy:NSLayoutRelationEqual
- toItem:_logoView
- attribute:NSLayoutAttributeBottom
- multiplier:1
- constant:MGLOrnamentPadding - _logoView.image.alignmentRect.origin.y]];
- [self addConstraint:
- [NSLayoutConstraint constraintWithItem:_logoView
- attribute:NSLayoutAttributeLeading
- relatedBy:NSLayoutRelationEqual
- toItem:self
- attribute:NSLayoutAttributeLeading
- multiplier:1
- constant:MGLOrnamentPadding - _logoView.image.alignmentRect.origin.x]];
-
- // Place the attribution view to the right of the logo view and size it to
- // fit the buttons inside.
- [self addConstraint:[NSLayoutConstraint constraintWithItem:_logoView
- attribute:NSLayoutAttributeBaseline
- relatedBy:NSLayoutRelationEqual
- toItem:_attributionView
- attribute:NSLayoutAttributeBaseline
- multiplier:1
- constant:_logoView.image.alignmentRect.origin.y]];
- [self addConstraint:[NSLayoutConstraint constraintWithItem:_attributionView
- attribute:NSLayoutAttributeLeading
- relatedBy:NSLayoutRelationEqual
- toItem:_logoView
- attribute:NSLayoutAttributeTrailing
- multiplier:1
- constant:8]];
-
- [super updateConstraints];
-}
-
-- (void)renderSync {
- if (!self.dormant && _rendererFrontend) {
- _rendererFrontend->render();
-
- if (_isPrinting) {
- _isPrinting = NO;
- NSImage *image = [[NSImage alloc] initWithMGLPremultipliedImage:_mbglView->readStillImage()];
- [self performSelector:@selector(printWithImage:) withObject:image afterDelay:0];
- }
-
-// [self updateUserLocationAnnotationView];
- }
-}
-
-- (BOOL)isTargetingInterfaceBuilder {
- return _isTargetingInterfaceBuilder;
-}
-
-- (void)setNeedsRerender {
- MGLAssertIsMainThread();
-
- [self.layer setNeedsDisplay];
-}
-
-- (void)cameraWillChangeAnimated:(BOOL)animated {
- if (!_mbglMap) {
- return;
- }
-
- if ([self.delegate respondsToSelector:@selector(mapView:cameraWillChangeAnimated:)]) {
- [self.delegate mapView:self cameraWillChangeAnimated:animated];
- }
-}
-
-- (void)cameraIsChanging {
- if (!_mbglMap) {
- return;
- }
-
- // Update a minimum of UI that needs to stay attached to the map
- // while animating.
- [self updateCompass];
- [self updateAnnotationCallouts];
-
- if ([self.delegate respondsToSelector:@selector(mapViewCameraIsChanging:)]) {
- [self.delegate mapViewCameraIsChanging:self];
- }
-}
-
-- (void)cameraDidChangeAnimated:(BOOL)animated {
- if (!_mbglMap) {
- return;
- }
-
- // Update all UI at the end of an animation or atomic change to the
- // viewport. More expensive updates can happen here, but care should
- // still be taken to minimize the work done here because scroll
- // gesture recognition and momentum scrolling is performed as a
- // series of atomic changes, not an animation.
- [self updateZoomControls];
- [self updateCompass];
- [self updateAnnotationCallouts];
- [self updateAnnotationTrackingAreas];
-
- if ([self.delegate respondsToSelector:@selector(mapView:cameraDidChangeAnimated:)]) {
- [self.delegate mapView:self cameraDidChangeAnimated:animated];
- }
-}
-
-- (void)mapViewWillStartLoadingMap {
- if (!_mbglMap) {
- return;
- }
-
- if ([self.delegate respondsToSelector:@selector(mapViewWillStartLoadingMap:)]) {
- [self.delegate mapViewWillStartLoadingMap:self];
- }
-}
-
-- (void)mapViewDidFinishLoadingMap {
- if (!_mbglMap) {
- return;
- }
-
- [self.style willChangeValueForKey:@"sources"];
- [self.style didChangeValueForKey:@"sources"];
- [self.style willChangeValueForKey:@"layers"];
- [self.style didChangeValueForKey:@"layers"];
- if ([self.delegate respondsToSelector:@selector(mapViewDidFinishLoadingMap:)]) {
- [self.delegate mapViewDidFinishLoadingMap:self];
- }
-}
-
-- (void)mapViewDidFailLoadingMapWithError:(NSError *)error {
- if (!_mbglMap) {
- return;
- }
-
- if ([self.delegate respondsToSelector:@selector(mapViewDidFailLoadingMap:withError:)]) {
- [self.delegate mapViewDidFailLoadingMap:self withError:error];
- }
-}
-
-- (void)mapViewWillStartRenderingFrame {
- if (!_mbglMap) {
- return;
- }
-
- if ([self.delegate respondsToSelector:@selector(mapViewWillStartRenderingFrame:)]) {
- [self.delegate mapViewWillStartRenderingFrame:self];
- }
-}
-
-- (void)mapViewDidFinishRenderingFrameFullyRendered:(BOOL)fullyRendered {
- if (!_mbglMap) {
- return;
- }
-
- if (_isChangingAnnotationLayers) {
- _isChangingAnnotationLayers = NO;
- [self.style didChangeValueForKey:@"layers"];
- }
- if ([self.delegate respondsToSelector:@selector(mapViewDidFinishRenderingFrame:fullyRendered:)]) {
- [self.delegate mapViewDidFinishRenderingFrame:self fullyRendered:fullyRendered];
- }
-}
-
-- (void)mapViewWillStartRenderingMap {
- if (!_mbglMap) {
- return;
- }
-
- if ([self.delegate respondsToSelector:@selector(mapViewWillStartRenderingMap:)]) {
- [self.delegate mapViewWillStartRenderingMap:self];
- }
-}
-
-- (void)mapViewDidFinishRenderingMapFullyRendered:(BOOL)fullyRendered {
- if (!_mbglMap) {
- return;
- }
-
- if ([self.delegate respondsToSelector:@selector(mapViewDidFinishRenderingMap:fullyRendered:)]) {
- [self.delegate mapViewDidFinishRenderingMap:self fullyRendered:fullyRendered];
- }
-}
-
-- (void)mapViewDidBecomeIdle {
- if (!_mbglMap) {
- return;
- }
-
- if ([self.delegate respondsToSelector:@selector(mapViewDidBecomeIdle:)]) {
- [self.delegate mapViewDidBecomeIdle:self];
- }
-}
-
-- (void)mapViewDidFinishLoadingStyle {
- if (!_mbglMap) {
- return;
- }
-
- self.style = [[MGLStyle alloc] initWithRawStyle:&_mbglMap->getStyle() mapView:self];
- if ([self.delegate respondsToSelector:@selector(mapView:didFinishLoadingStyle:)])
- {
- [self.delegate mapView:self didFinishLoadingStyle:self.style];
- }
-}
-
-- (void)sourceDidChange:(MGLSource *)source {
- if (!_mbglMap) {
- return;
- }
- // Attribution only applies to tiled sources
- if ([source isKindOfClass:[MGLTileSource class]]) {
- [self installAttributionView];
- }
- self.needsUpdateConstraints = YES;
- self.needsDisplay = YES;
-}
-
-- (BOOL)shouldRemoveStyleImage:(NSString *)imageName {
- if ([self.delegate respondsToSelector:@selector(mapView:shouldRemoveStyleImage:)]) {
- return [self.delegate mapView:self shouldRemoveStyleImage:imageName];
- }
-
- return YES;
-}
-
-#pragma mark Printing
-
-- (void)print:(__unused id)sender {
- _isPrinting = YES;
- [self setNeedsRerender];
-}
-
-- (void)printWithImage:(NSImage *)image {
- NSImageView *imageView = [[NSImageView alloc] initWithFrame:self.bounds];
- imageView.image = image;
-
- NSPrintOperation *op = [NSPrintOperation printOperationWithView:imageView];
- [op runOperation];
-}
-
-#pragma mark Viewport
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingCenterCoordinate {
- return [NSSet setWithObjects:@"latitude", @"longitude", @"camera", nil];
-}
-
-- (CLLocationCoordinate2D)centerCoordinate {
- mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets);
- return MGLLocationCoordinate2DFromLatLng(*_mbglMap->getCameraOptions(padding).center);
-}
-
-- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate {
- MGLLogDebug(@"Setting centerCoordinate: %@", MGLStringFromCLLocationCoordinate2D(centerCoordinate));
- [self setCenterCoordinate:centerCoordinate animated:NO];
-}
-
-- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate animated:(BOOL)animated {
- [self setCenterCoordinate:centerCoordinate animated:animated completionHandler:nil];
-}
-
-- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion {
- MGLLogDebug(@"Setting centerCoordinate: %@ animated: %@", MGLStringFromCLLocationCoordinate2D(centerCoordinate), MGLStringFromBOOL(animated));
- mbgl::AnimationOptions animationOptions = MGLDurationFromTimeInterval(animated ? MGLAnimationDuration : 0);
- animationOptions.transitionFinishFn = ^() {
- [self didChangeValueForKey:@"centerCoordinate"];
- if (completion) {
- dispatch_async(dispatch_get_main_queue(), ^{
- completion();
- });
- }
- };
-
- [self willChangeValueForKey:@"centerCoordinate"];
- _mbglMap->easeTo(mbgl::CameraOptions()
- .withCenter(MGLLatLngFromLocationCoordinate2D(centerCoordinate))
- .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets)),
- animationOptions);
-}
-
-- (void)offsetCenterCoordinateBy:(NSPoint)delta animated:(BOOL)animated {
- [self willChangeValueForKey:@"centerCoordinate"];
- _mbglMap->cancelTransitions();
- MGLMapCamera *oldCamera = self.camera;
- _mbglMap->moveBy({ delta.x, delta.y },
- MGLDurationFromTimeInterval(animated ? MGLAnimationDuration : 0));
- if ([self.delegate respondsToSelector:@selector(mapView:shouldChangeFromCamera:toCamera:)]
- && ![self.delegate mapView:self shouldChangeFromCamera:oldCamera toCamera:self.camera]) {
- self.camera = oldCamera;
- }
- [self didChangeValueForKey:@"centerCoordinate"];
-}
-
-- (CLLocationDegrees)pendingLatitude {
- return _pendingLatitude;
-}
-
-- (void)setPendingLatitude:(CLLocationDegrees)pendingLatitude {
- _pendingLatitude = pendingLatitude;
-}
-
-- (CLLocationDegrees)pendingLongitude {
- return _pendingLongitude;
-}
-
-- (void)setPendingLongitude:(CLLocationDegrees)pendingLongitude {
- _pendingLongitude = pendingLongitude;
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingZoomLevel {
- return [NSSet setWithObject:@"camera"];
-}
-
-- (double)zoomLevel {
- mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets);
- return *_mbglMap->getCameraOptions(padding).zoom;
-}
-
-- (void)setZoomLevel:(double)zoomLevel {
- MGLLogDebug(@"Setting zoomLevel: %f", zoomLevel);
- [self setZoomLevel:zoomLevel animated:NO];
-}
-
-- (void)setZoomLevel:(double)zoomLevel animated:(BOOL)animated {
- MGLLogDebug(@"Setting zoomLevel: %f animated: %@", zoomLevel, MGLStringFromBOOL(animated));
- [self willChangeValueForKey:@"zoomLevel"];
- _mbglMap->easeTo(mbgl::CameraOptions()
- .withZoom(zoomLevel)
- .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets)),
- MGLDurationFromTimeInterval(animated ? MGLAnimationDuration : 0));
- [self didChangeValueForKey:@"zoomLevel"];
-}
-
-- (void)setZoomLevel:(double)zoomLevel atPoint:(NSPoint)point animated:(BOOL)animated {
- [self willChangeValueForKey:@"centerCoordinate"];
- [self willChangeValueForKey:@"zoomLevel"];
- MGLMapCamera *oldCamera = self.camera;
- mbgl::ScreenCoordinate center(point.x, self.bounds.size.height - point.y);
- _mbglMap->easeTo(mbgl::CameraOptions()
- .withZoom(zoomLevel)
- .withAnchor(center),
- MGLDurationFromTimeInterval(animated ? MGLAnimationDuration : 0));
- if ([self.delegate respondsToSelector:@selector(mapView:shouldChangeFromCamera:toCamera:)]
- && ![self.delegate mapView:self shouldChangeFromCamera:oldCamera toCamera:self.camera]) {
- self.camera = oldCamera;
- }
- [self didChangeValueForKey:@"zoomLevel"];
- [self didChangeValueForKey:@"centerCoordinate"];
-}
-
-- (void)setMinimumZoomLevel:(double)minimumZoomLevel
-{
- MGLLogDebug(@"Setting minimumZoomLevel: %f", minimumZoomLevel);
- _mbglMap->setBounds(mbgl::BoundOptions().withMinZoom(minimumZoomLevel));
-}
-
-- (void)setMaximumZoomLevel:(double)maximumZoomLevel
-{
- MGLLogDebug(@"Setting maximumZoomLevel: %f", maximumZoomLevel);
- _mbglMap->setBounds(mbgl::BoundOptions().withMaxZoom(maximumZoomLevel));
-}
-
-- (double)maximumZoomLevel {
- return *_mbglMap->getBounds().maxZoom;
-}
-
-- (double)minimumZoomLevel {
- return *_mbglMap->getBounds().minZoom;
-}
-
-/// Respond to a click on the zoom control.
-- (IBAction)zoomInOrOut:(NSSegmentedControl *)sender {
- switch (sender.selectedSegment) {
- case 0:
- // Zoom out.
- [self moveToEndOfParagraph:sender];
- break;
- case 1:
- // Zoom in.
- [self moveToBeginningOfParagraph:sender];
- break;
- default:
- break;
- }
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingDirection {
- return [NSSet setWithObject:@"camera"];
-}
-
-- (CLLocationDirection)direction {
- return mbgl::util::wrap(*_mbglMap->getCameraOptions().bearing, 0., 360.);
-}
-
-- (void)setDirection:(CLLocationDirection)direction {
- MGLLogDebug(@"Setting direction: %f", direction);
- [self setDirection:direction animated:NO];
-}
-
-- (void)setDirection:(CLLocationDirection)direction animated:(BOOL)animated {
- MGLLogDebug(@"Setting direction: %f animated: %@", direction, MGLStringFromBOOL(animated));
- [self willChangeValueForKey:@"direction"];
- _mbglMap->easeTo(mbgl::CameraOptions()
- .withBearing(direction)
- .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets)),
- MGLDurationFromTimeInterval(animated ? MGLAnimationDuration : 0));
- [self didChangeValueForKey:@"direction"];
-}
-
-- (void)offsetDirectionBy:(CLLocationDegrees)delta animated:(BOOL)animated {
- [self setDirection:*_mbglMap->getCameraOptions().bearing + delta animated:animated];
-}
-
-+ (NSSet<NSString *> *)keyPathsForValuesAffectingCamera {
- return [NSSet setWithObjects:@"latitude", @"longitude", @"centerCoordinate", @"zoomLevel", @"direction", nil];
-}
-
-- (MGLMapCamera *)camera {
- mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets);
- return [self cameraForCameraOptions:_mbglMap->getCameraOptions(padding)];
-}
-
-- (void)setCamera:(MGLMapCamera *)camera {
- MGLLogDebug(@"Setting camera: %@", camera);
- [self setCamera:camera animated:NO];
-}
-
-- (void)setCamera:(MGLMapCamera *)camera animated:(BOOL)animated {
- MGLLogDebug(@"Setting camera: %@ animated: %@", camera, MGLStringFromBOOL(animated));
- [self setCamera:camera withDuration:animated ? MGLAnimationDuration : 0 animationTimingFunction:nil completionHandler:NULL];
-}
-
-- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion {
- MGLLogDebug(@"Setting camera: %@ duration: %f animationTimingFunction: %@", camera, duration, function);
- [self setCamera:camera withDuration:duration animationTimingFunction:function edgePadding:NSEdgeInsetsZero completionHandler:completion];
-}
-
-- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function edgePadding:(NSEdgeInsets)edgePadding completionHandler:(nullable void (^)(void))completion {
- edgePadding = MGLEdgeInsetsInsetEdgeInset(edgePadding, self.contentInsets);
- mbgl::AnimationOptions animationOptions;
- if (duration > 0) {
- animationOptions.duration.emplace(MGLDurationFromTimeInterval(duration));
- animationOptions.easing.emplace(MGLUnitBezierForMediaTimingFunction(function));
- }
- if (completion) {
- animationOptions.transitionFinishFn = [completion]() {
- // Must run asynchronously after the transition is completely over.
- // Otherwise, a call to -setCamera: within the completion handler
- // would reenter the completion handler’s caller.
- dispatch_async(dispatch_get_main_queue(), ^{
- completion();
- });
- };
- }
-
- if ([self.camera isEqualToMapCamera:camera]) {
- if (completion) {
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- completion();
- });
- }
- return;
- }
-
- [self willChangeValueForKey:@"camera"];
- _mbglMap->cancelTransitions();
- mbgl::CameraOptions cameraOptions = [self cameraOptionsObjectForAnimatingToCamera:camera edgePadding:edgePadding];
- _mbglMap->easeTo(cameraOptions, animationOptions);
- [self didChangeValueForKey:@"camera"];
-}
-
-- (void)flyToCamera:(MGLMapCamera *)camera completionHandler:(nullable void (^)(void))completion {
- MGLLogDebug(@"Setting flyToCamera: %@ completionHandler: %@", camera, completion);
- [self flyToCamera:camera withDuration:-1 completionHandler:completion];
-}
-
-- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration completionHandler:(nullable void (^)(void))completion {
- MGLLogDebug(@"Setting flyToCamera: %@ withDuration: %f completionHandler: %@", camera, duration, completion);
- [self flyToCamera:camera withDuration:duration peakAltitude:-1 completionHandler:completion];
-}
-
-- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration peakAltitude:(CLLocationDistance)peakAltitude completionHandler:(nullable void (^)(void))completion {
- MGLLogDebug(@"Setting flyToCamera: %@ withDuration: %f peakAltitude: %f completionHandler: %@", camera, duration, peakAltitude, completion);
- mbgl::AnimationOptions animationOptions;
- if (duration >= 0) {
- animationOptions.duration = MGLDurationFromTimeInterval(duration);
- }
- if (peakAltitude >= 0) {
- CLLocationDegrees peakLatitude = (self.centerCoordinate.latitude + camera.centerCoordinate.latitude) / 2;
- CLLocationDegrees peakPitch = (self.camera.pitch + camera.pitch) / 2;
- animationOptions.minZoom = MGLZoomLevelForAltitude(peakAltitude, peakPitch,
- peakLatitude, self.frame.size);
- }
- if (completion) {
- animationOptions.transitionFinishFn = [completion]() {
- // Must run asynchronously after the transition is completely over.
- // Otherwise, a call to -setCamera: within the completion handler
- // would reenter the completion handler’s caller.
- dispatch_async(dispatch_get_main_queue(), ^{
- completion();
- });
- };
- }
-
- if ([self.camera isEqualToMapCamera:camera]) {
- if (completion) {
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- completion();
- });
- }
- return;
- }
-
- [self willChangeValueForKey:@"camera"];
- _mbglMap->cancelTransitions();
- mbgl::CameraOptions cameraOptions = [self cameraOptionsObjectForAnimatingToCamera:camera edgePadding:self.contentInsets];
- _mbglMap->flyTo(cameraOptions, animationOptions);
- [self didChangeValueForKey:@"camera"];
-}
-
-/// Returns a CameraOptions object that specifies parameters for animating to
-/// the given camera.
-- (mbgl::CameraOptions)cameraOptionsObjectForAnimatingToCamera:(MGLMapCamera *)camera edgePadding:(NSEdgeInsets) edgePadding {
- mbgl::CameraOptions options;
- options.center = MGLLatLngFromLocationCoordinate2D(camera.centerCoordinate);
- options.padding = MGLEdgeInsetsFromNSEdgeInsets(edgePadding);
- options.zoom = MGLZoomLevelForAltitude(camera.altitude, camera.pitch,
- camera.centerCoordinate.latitude,
- self.frame.size);
- if (camera.heading >= 0) {
- options.bearing = camera.heading;
- }
- if (camera.pitch >= 0) {
- options.pitch = camera.pitch;
- }
- return options;
-}
-
-+ (NSSet *)keyPathsForValuesAffectingVisibleCoordinateBounds {
- return [NSSet setWithObjects:@"centerCoordinate", @"zoomLevel", @"direction", @"bounds", nil];
-}
-
-- (MGLCoordinateBounds)visibleCoordinateBounds {
- return [self convertRect:self.bounds toCoordinateBoundsFromView:self];
-}
-
-- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds {
- MGLLogDebug(@"Setting visibleCoordinateBounds: %@", MGLStringFromCoordinateBounds(bounds));
- [self setVisibleCoordinateBounds:bounds animated:NO];
-}
-
-- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds animated:(BOOL)animated {
- MGLLogDebug(@"Setting visibleCoordinateBounds: %@ animated: %@", MGLStringFromCoordinateBounds(bounds), MGLStringFromBOOL(animated));
- [self setVisibleCoordinateBounds:bounds edgePadding:NSEdgeInsetsZero animated:animated];
-}
-
-- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(NSEdgeInsets)insets animated:(BOOL)animated {
- [self setVisibleCoordinateBounds:bounds edgePadding:insets animated:animated completionHandler:nil];
-}
-
-- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(NSEdgeInsets)insets animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion {
- _mbglMap->cancelTransitions();
-
- mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(insets);
- padding += MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets);
- mbgl::CameraOptions cameraOptions = _mbglMap->cameraForLatLngBounds(MGLLatLngBoundsFromCoordinateBounds(bounds), padding);
- mbgl::AnimationOptions animationOptions;
- if (animated) {
- animationOptions.duration = MGLDurationFromTimeInterval(MGLAnimationDuration);
- }
-
- MGLMapCamera *camera = [self cameraForCameraOptions:cameraOptions];
- if ([self.camera isEqualToMapCamera:camera]) {
- completion();
- return;
- }
-
- [self willChangeValueForKey:@"visibleCoordinateBounds"];
- animationOptions.transitionFinishFn = ^() {
- [self didChangeValueForKey:@"visibleCoordinateBounds"];
- if (completion) {
- dispatch_async(dispatch_get_main_queue(), ^{
- completion();
- });
- }
- };
- _mbglMap->easeTo(cameraOptions, animationOptions);
-}
-
-- (MGLMapCamera *)cameraThatFitsCoordinateBounds:(MGLCoordinateBounds)bounds {
- return [self cameraThatFitsCoordinateBounds:bounds edgePadding:NSEdgeInsetsZero];
-}
-
-- (MGLMapCamera *)cameraThatFitsCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(NSEdgeInsets)insets {
- mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(insets);
- padding += MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets);
- mbgl::CameraOptions cameraOptions = _mbglMap->cameraForLatLngBounds(MGLLatLngBoundsFromCoordinateBounds(bounds), padding);
- return [self cameraForCameraOptions:cameraOptions];
-}
-
-- (MGLMapCamera *)camera:(MGLMapCamera *)camera fittingCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(NSEdgeInsets)insets
-{
- mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(insets);
- padding += MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets);
-
- MGLMapCamera *currentCamera = self.camera;
- CGFloat pitch = camera.pitch < 0 ? currentCamera.pitch : camera.pitch;
- CLLocationDirection direction = camera.heading < 0 ? currentCamera.heading : camera.heading;
-
- mbgl::CameraOptions cameraOptions = _mbglMap->cameraForLatLngBounds(MGLLatLngBoundsFromCoordinateBounds(bounds), padding, direction, pitch);
- return [self cameraForCameraOptions:cameraOptions];
-}
-
-- (MGLMapCamera *)camera:(MGLMapCamera *)camera fittingShape:(MGLShape *)shape edgePadding:(NSEdgeInsets)insets {
- mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(insets);
- padding += MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets);
-
- MGLMapCamera *currentCamera = self.camera;
- CGFloat pitch = camera.pitch < 0 ? currentCamera.pitch : camera.pitch;
- CLLocationDirection direction = camera.heading < 0 ? currentCamera.heading : camera.heading;
-
- mbgl::CameraOptions cameraOptions = _mbglMap->cameraForGeometry([shape geometryObject], padding, direction, pitch);
-
- return [self cameraForCameraOptions: cameraOptions];
-}
-
-- (MGLMapCamera *)cameraThatFitsShape:(MGLShape *)shape direction:(CLLocationDirection)direction edgePadding:(NSEdgeInsets)insets {
- mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(insets);
- padding += MGLEdgeInsetsFromNSEdgeInsets(self.contentInsets);
-
- mbgl::CameraOptions cameraOptions = _mbglMap->cameraForGeometry([shape geometryObject], padding, direction);
-
- return [self cameraForCameraOptions:cameraOptions];
-}
-
-- (MGLMapCamera *)cameraForCameraOptions:(const mbgl::CameraOptions &)cameraOptions {
- mbgl::CameraOptions mapCamera = _mbglMap->getCameraOptions();
- CLLocationCoordinate2D centerCoordinate = MGLLocationCoordinate2DFromLatLng(cameraOptions.center ? *cameraOptions.center : *mapCamera.center);
- double zoomLevel = cameraOptions.zoom ? *cameraOptions.zoom : self.zoomLevel;
- CLLocationDirection direction = cameraOptions.bearing ? mbgl::util::wrap(*cameraOptions.bearing, 0., 360.) : self.direction;
- CGFloat pitch = cameraOptions.pitch ? *cameraOptions.pitch : *mapCamera.pitch;
- CLLocationDistance altitude = MGLAltitudeForZoomLevel(zoomLevel, pitch,
- centerCoordinate.latitude,
- self.frame.size);
- return [MGLMapCamera cameraLookingAtCenterCoordinate:centerCoordinate
- altitude:altitude
- pitch:pitch
- heading:direction];
-}
-
-- (void)setAutomaticallyAdjustsContentInsets:(BOOL)automaticallyAdjustsContentInsets {
- _automaticallyAdjustsContentInsets = automaticallyAdjustsContentInsets;
- [self adjustContentInsets];
-}
-
-/// Updates `contentInsets` to reflect the current window geometry.
-- (void)adjustContentInsets {
- if (!_automaticallyAdjustsContentInsets) {
- return;
- }
-
- NSEdgeInsets contentInsets = self.contentInsets;
- if ((self.window.styleMask & NSFullSizeContentViewWindowMask)
- && !self.window.titlebarAppearsTransparent) {
- NSRect contentLayoutRect = [self convertRect:self.window.contentLayoutRect fromView:nil];
- if (NSMaxX(contentLayoutRect) > 0 && NSMaxY(contentLayoutRect) > 0) {
- contentInsets = NSEdgeInsetsMake(NSHeight(self.bounds) - NSMaxY(contentLayoutRect),
- MAX(NSMinX(contentLayoutRect), 0),
- MAX(NSMinY(contentLayoutRect), 0),
- NSWidth(self.bounds) - NSMaxX(contentLayoutRect));
- }
- } else {
- contentInsets = NSEdgeInsetsZero;
- }
-
- self.contentInsets = contentInsets;
-}
-
-- (void)setContentInsets:(NSEdgeInsets)contentInsets {
- [self setContentInsets:contentInsets animated:NO completionHandler:nil];
-}
-
-- (void)setContentInsets:(NSEdgeInsets)contentInsets animated:(BOOL)animated {
- [self setContentInsets:contentInsets animated:animated completionHandler:nil];
-}
-
-- (void)setContentInsets:(NSEdgeInsets)contentInsets animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion {
- if (NSEdgeInsetsEqual(contentInsets, self.contentInsets)) {
- if (completion) {
- completion();
- }
- return;
- }
- MGLLogDebug(@"Setting contentInset: %@ animated:", MGLStringFromNSEdgeInsets(contentInsets), MGLStringFromBOOL(animated));
- // After adjusting the content insets, move the center coordinate from the
- // old frame of reference to the new one represented by the newly set
- // content insets.
- CLLocationCoordinate2D oldCenter = self.centerCoordinate;
- _contentInsets = contentInsets;
- [self setCenterCoordinate:oldCenter animated:animated completionHandler:completion];
-}
-
-#pragma mark Mouse events and gestures
-
-- (BOOL)acceptsFirstResponder {
- return YES;
-}
-
-/// Drag to pan, plus drag to zoom, rotate, and tilt when a modifier key is held
-/// down.
-- (void)handlePanGesture:(NSPanGestureRecognizer *)gestureRecognizer {
- NSPoint delta = [gestureRecognizer translationInView:self];
- NSPoint endPoint = [gestureRecognizer locationInView:self];
- NSPoint startPoint = NSMakePoint(endPoint.x - delta.x, endPoint.y - delta.y);
-
- NSEventModifierFlags flags = [NSApp currentEvent].modifierFlags;
- if (gestureRecognizer.state == NSGestureRecognizerStateBegan) {
- [self.window invalidateCursorRectsForView:self];
- _mbglMap->setGestureInProgress(true);
-
- if (![self isPanningWithGesture]) {
- // Hide the cursor except when panning.
- CGDisplayHideCursor(kCGDirectMainDisplay);
- _didHideCursorDuringGesture = YES;
- }
- } else if (gestureRecognizer.state == NSGestureRecognizerStateEnded
- || gestureRecognizer.state == NSGestureRecognizerStateCancelled) {
- _mbglMap->setGestureInProgress(false);
- [self.window invalidateCursorRectsForView:self];
-
- if (_didHideCursorDuringGesture) {
- _didHideCursorDuringGesture = NO;
- // Move the cursor back to the start point and show it again, creating
- // the illusion that it has stayed in place during the entire gesture.
- CGPoint cursorPoint = [self convertPoint:startPoint toView:nil];
- cursorPoint = [self.window convertRectToScreen:{ cursorPoint, NSZeroSize }].origin;
- cursorPoint.y = self.window.screen.frame.size.height - cursorPoint.y;
- CGDisplayMoveCursorToPoint(kCGDirectMainDisplay, cursorPoint);
- CGDisplayShowCursor(kCGDirectMainDisplay);
- }
- }
-
- if (flags & NSShiftKeyMask) {
- // Shift-drag to zoom.
- if (!self.zoomEnabled) {
- return;
- }
-
- _mbglMap->cancelTransitions();
-
- if (gestureRecognizer.state == NSGestureRecognizerStateBegan) {
- _zoomAtBeginningOfGesture = [self zoomLevel];
- } else if (gestureRecognizer.state == NSGestureRecognizerStateChanged) {
- CGFloat newZoomLevel = _zoomAtBeginningOfGesture - delta.y / 75;
- [self setZoomLevel:newZoomLevel atPoint:startPoint animated:NO];
- }
- } else if (flags & NSAlternateKeyMask) {
- // Option-drag to rotate and/or tilt.
- _mbglMap->cancelTransitions();
-
- if (gestureRecognizer.state == NSGestureRecognizerStateBegan) {
- _directionAtBeginningOfGesture = self.direction;
- _pitchAtBeginningOfGesture = *_mbglMap->getCameraOptions().pitch;
- } else if (gestureRecognizer.state == NSGestureRecognizerStateChanged) {
- MGLMapCamera *oldCamera = self.camera;
- BOOL didChangeCamera = NO;
- mbgl::ScreenCoordinate center(startPoint.x, self.bounds.size.height - startPoint.y);
- if (self.rotateEnabled) {
- CLLocationDirection newDirection = _directionAtBeginningOfGesture - delta.x / 10;
- [self willChangeValueForKey:@"direction"];
- _mbglMap->jumpTo(mbgl::CameraOptions().withBearing(newDirection).withAnchor(center));
- didChangeCamera = YES;
- [self didChangeValueForKey:@"direction"];
- }
- if (self.pitchEnabled) {
- _mbglMap->jumpTo(mbgl::CameraOptions().withPitch(_pitchAtBeginningOfGesture + delta.y / 5).withAnchor(center));
- didChangeCamera = YES;
- }
-
- if (didChangeCamera
- && [self.delegate respondsToSelector:@selector(mapView:shouldChangeFromCamera:toCamera:)]
- && ![self.delegate mapView:self shouldChangeFromCamera:oldCamera toCamera:self.camera]) {
- self.camera = oldCamera;
- }
- }
- } else if (self.scrollEnabled) {
- // Otherwise, drag to pan.
- _mbglMap->cancelTransitions();
-
- if (gestureRecognizer.state == NSGestureRecognizerStateChanged) {
- delta.y *= -1;
- [self offsetCenterCoordinateBy:delta animated:NO];
- [gestureRecognizer setTranslation:NSZeroPoint inView:nil];
- }
- }
-}
-
-/// Returns whether the user is panning using a gesture.
-- (BOOL)isPanningWithGesture {
- NSGestureRecognizerState state = _panGestureRecognizer.state;
- NSEventModifierFlags flags = [NSApp currentEvent].modifierFlags;
- return ((state == NSGestureRecognizerStateBegan || state == NSGestureRecognizerStateChanged)
- && !(flags & NSShiftKeyMask || flags & NSAlternateKeyMask));
-}
-
-/// Pinch to zoom.
-- (void)handleMagnificationGesture:(NSMagnificationGestureRecognizer *)gestureRecognizer {
- if (!self.zoomEnabled) {
- return;
- }
-
- _mbglMap->cancelTransitions();
-
- if (gestureRecognizer.state == NSGestureRecognizerStateBegan) {
- _mbglMap->setGestureInProgress(true);
- _zoomAtBeginningOfGesture = [self zoomLevel];
- } else if (gestureRecognizer.state == NSGestureRecognizerStateChanged) {
- NSPoint zoomInPoint = [gestureRecognizer locationInView:self];
- mbgl::ScreenCoordinate center(zoomInPoint.x, self.bounds.size.height - zoomInPoint.y);
- if (gestureRecognizer.magnification > -1) {
- [self willChangeValueForKey:@"zoomLevel"];
- [self willChangeValueForKey:@"centerCoordinate"];
- MGLMapCamera *oldCamera = self.camera;
- _mbglMap->jumpTo(mbgl::CameraOptions()
- .withZoom(_zoomAtBeginningOfGesture + log2(1 + gestureRecognizer.magnification))
- .withAnchor(center));
- if ([self.delegate respondsToSelector:@selector(mapView:shouldChangeFromCamera:toCamera:)]
- && ![self.delegate mapView:self shouldChangeFromCamera:oldCamera toCamera:self.camera]) {
- self.camera = oldCamera;
- }
- [self didChangeValueForKey:@"centerCoordinate"];
- [self didChangeValueForKey:@"zoomLevel"];
- }
- } else if (gestureRecognizer.state == NSGestureRecognizerStateEnded
- || gestureRecognizer.state == NSGestureRecognizerStateCancelled) {
- _mbglMap->setGestureInProgress(false);
- }
-}
-
-/// Click or tap to select an annotation.
-- (void)handleClickGesture:(NSClickGestureRecognizer *)gestureRecognizer {
- if (gestureRecognizer.state != NSGestureRecognizerStateEnded
- || [self subviewContainingGesture:gestureRecognizer]) {
- return;
- }
-
- NSPoint gesturePoint = [gestureRecognizer locationInView:self];
- MGLAnnotationTag hitAnnotationTag = [self annotationTagAtPoint:gesturePoint persistingResults:YES];
- if (hitAnnotationTag != MGLAnnotationTagNotFound) {
- if (hitAnnotationTag != _selectedAnnotationTag) {
- id <MGLAnnotation> annotation = [self annotationWithTag:hitAnnotationTag];
- NSAssert(annotation, @"Cannot select nonexistent annotation with tag %llu", hitAnnotationTag);
- [self selectAnnotation:annotation atPoint:gesturePoint];
- }
- } else {
- [self deselectAnnotation:self.selectedAnnotation];
- }
-}
-
-/// Right-click to show the context menu.
-- (void)handleRightClickGesture:(NSClickGestureRecognizer *)gestureRecognizer {
- NSMenu *menu = [self menuForEvent:[NSApp currentEvent]];
- if (menu) {
- [NSMenu popUpContextMenu:menu withEvent:[NSApp currentEvent] forView:self];
- }
-}
-
-/// Double-click or double-tap to zoom in.
-- (void)handleDoubleClickGesture:(NSClickGestureRecognizer *)gestureRecognizer {
- if (!self.zoomEnabled || gestureRecognizer.state != NSGestureRecognizerStateEnded
- || [self subviewContainingGesture:gestureRecognizer]) {
- return;
- }
-
- _mbglMap->cancelTransitions();
-
- NSPoint gesturePoint = [gestureRecognizer locationInView:self];
- [self setZoomLevel:round(self.zoomLevel) + 1 atPoint:gesturePoint animated:YES];
-}
-
-- (void)smartMagnifyWithEvent:(NSEvent *)event {
- if (!self.zoomEnabled) {
- return;
- }
-
- _mbglMap->cancelTransitions();
-
- // Tap with two fingers (“right-click”) to zoom out on mice but not trackpads.
- NSPoint gesturePoint = [self convertPoint:event.locationInWindow fromView:nil];
- [self setZoomLevel:round(self.zoomLevel) - 1 atPoint:gesturePoint animated:YES];
-}
-
-/// Rotate fingers to rotate.
-- (void)handleRotationGesture:(NSRotationGestureRecognizer *)gestureRecognizer {
- if (!self.rotateEnabled) {
- return;
- }
-
- _mbglMap->cancelTransitions();
-
- if (gestureRecognizer.state == NSGestureRecognizerStateBegan) {
- _mbglMap->setGestureInProgress(true);
- _directionAtBeginningOfGesture = self.direction;
- } else if (gestureRecognizer.state == NSGestureRecognizerStateChanged) {
- MGLMapCamera *oldCamera = self.camera;
-
- NSPoint rotationPoint = [gestureRecognizer locationInView:self];
- mbgl::ScreenCoordinate anchor(rotationPoint.x, self.bounds.size.height - rotationPoint.y);
- _mbglMap->jumpTo(mbgl::CameraOptions()
- .withBearing(_directionAtBeginningOfGesture + gestureRecognizer.rotationInDegrees)
- .withAnchor(anchor));
-
- if ([self.delegate respondsToSelector:@selector(mapView:shouldChangeFromCamera:toCamera:)]
- && ![self.delegate mapView:self shouldChangeFromCamera:oldCamera toCamera:self.camera]) {
- self.camera = oldCamera;
- }
- } else if (gestureRecognizer.state == NSGestureRecognizerStateEnded
- || gestureRecognizer.state == NSGestureRecognizerStateCancelled) {
- _mbglMap->setGestureInProgress(false);
- }
-}
-
-- (BOOL)wantsScrollEventsForSwipeTrackingOnAxis:(__unused NSEventGestureAxis)axis {
- // Track both horizontal and vertical swipes in -scrollWheel:.
- return YES;
-}
-
-- (void)scrollWheel:(NSEvent *)event {
- // https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKitOlderNotes/#10_7Dragging
- BOOL isScrollWheel = event.phase == NSEventPhaseNone && event.momentumPhase == NSEventPhaseNone && !event.hasPreciseScrollingDeltas;
- if (isScrollWheel || [[NSUserDefaults standardUserDefaults] boolForKey:MGLScrollWheelZoomsMapViewDefaultKey]) {
- // A traditional, vertical scroll wheel zooms instead of panning.
- if (self.zoomEnabled) {
- const double delta =
- event.scrollingDeltaY / ([event hasPreciseScrollingDeltas] ? 100 : 10);
- if (delta != 0) {
- double scale = 2.0 / (1.0 + std::exp(-std::abs(delta)));
-
- // Zooming out.
- if (delta < 0) {
- scale = 1.0 / scale;
- }
-
- NSPoint gesturePoint = [self convertPoint:event.locationInWindow fromView:nil];
- [self setZoomLevel:self.zoomLevel + log2(scale) atPoint:gesturePoint animated:NO];
- }
- }
- } else if (self.scrollEnabled
- && _magnificationGestureRecognizer.state == NSGestureRecognizerStatePossible
- && _rotationGestureRecognizer.state == NSGestureRecognizerStatePossible) {
- // Scroll to pan.
- _mbglMap->cancelTransitions();
-
- CGFloat x = event.scrollingDeltaX;
- CGFloat y = event.scrollingDeltaY;
- if (x || y) {
- [self offsetCenterCoordinateBy:NSMakePoint(x, y) animated:NO];
- }
-
- // Drift pan.
- if (event.momentumPhase != NSEventPhaseNone) {
- [self offsetCenterCoordinateBy:NSMakePoint(x, y) animated:NO];
- }
- }
-}
-
-/// Returns the subview that the gesture is located in.
-- (NSView *)subviewContainingGesture:(NSGestureRecognizer *)gestureRecognizer {
- if (NSPointInRect([gestureRecognizer locationInView:self.compass], self.compass.bounds)) {
- return self.compass;
- }
- if (NSPointInRect([gestureRecognizer locationInView:self.zoomControls], self.zoomControls.bounds)) {
- return self.zoomControls;
- }
- if (NSPointInRect([gestureRecognizer locationInView:self.attributionView], self.attributionView.bounds)) {
- return self.attributionView;
- }
- return nil;
-}
-
-#pragma mark NSGestureRecognizerDelegate methods
-- (BOOL)gestureRecognizer:(NSGestureRecognizer *)gestureRecognizer shouldAttemptToRecognizeWithEvent:(NSEvent *)event {
- if (gestureRecognizer == _singleClickRecognizer) {
- if (!self.selectedAnnotation) {
- NSPoint gesturePoint = [self convertPoint:[event locationInWindow] fromView:nil];
- MGLAnnotationTag hitAnnotationTag = [self annotationTagAtPoint:gesturePoint persistingResults:NO];
- if (hitAnnotationTag == MGLAnnotationTagNotFound) {
- return NO;
- }
- }
- }
- return YES;
-}
-
-#pragma mark Keyboard events
-
-- (void)keyDown:(NSEvent *)event {
- // This is the recommended way to handle arrow key presses, causing
- // methods like -moveUp: and -moveToBeginningOfParagraph: to be called
- // for various standard keybindings.
- [self interpretKeyEvents:@[event]];
-}
-
-// The following action methods are declared in NSResponder.h.
-
-- (void)insertTab:(id)sender {
- if (self.window.firstResponder == self) {
- [self.window selectNextKeyView:self];
- }
-}
-
-- (void)insertBacktab:(id)sender {
- if (self.window.firstResponder == self) {
- [self.window selectPreviousKeyView:self];
- }
-}
-
-- (void)insertText:(NSString *)insertString {
- switch (insertString.length == 1 ? [insertString characterAtIndex:0] : 0) {
- case '-':
- [self moveToEndOfParagraph:nil];
- break;
-
- case '+':
- case '=':
- [self moveToBeginningOfParagraph:nil];
- break;
-
- default:
- [super insertText:insertString];
- break;
- }
-}
-
-- (IBAction)moveUp:(__unused id)sender {
- [self offsetCenterCoordinateBy:NSMakePoint(0, MGLKeyPanningIncrement) animated:YES];
-}
-
-- (IBAction)moveDown:(__unused id)sender {
- [self offsetCenterCoordinateBy:NSMakePoint(0, -MGLKeyPanningIncrement) animated:YES];
-}
-
-- (IBAction)moveLeft:(__unused id)sender {
- [self offsetCenterCoordinateBy:NSMakePoint(MGLKeyPanningIncrement, 0) animated:YES];
-}
-
-- (IBAction)moveRight:(__unused id)sender {
- [self offsetCenterCoordinateBy:NSMakePoint(-MGLKeyPanningIncrement, 0) animated:YES];
-}
-
-- (IBAction)moveToBeginningOfParagraph:(__unused id)sender {
- if (self.zoomEnabled) {
- [self setZoomLevel:round(self.zoomLevel) + 1 animated:YES];
- }
-}
-
-- (IBAction)moveToEndOfParagraph:(__unused id)sender {
- if (self.zoomEnabled) {
- [self setZoomLevel:round(self.zoomLevel) - 1 animated:YES];
- }
-}
-
-- (IBAction)moveWordLeft:(__unused id)sender {
- if (self.rotateEnabled) {
- [self offsetDirectionBy:MGLKeyRotationIncrement animated:YES];
- }
-}
-
-- (IBAction)moveWordRight:(__unused id)sender {
- if (self.rotateEnabled) {
- [self offsetDirectionBy:-MGLKeyRotationIncrement animated:YES];
- }
-}
-
-- (void)setZoomEnabled:(BOOL)zoomEnabled {
- _zoomEnabled = zoomEnabled;
- _zoomControls.enabled = zoomEnabled;
- _zoomControls.hidden = !zoomEnabled;
-}
-
-- (void)setRotateEnabled:(BOOL)rotateEnabled {
- _rotateEnabled = rotateEnabled;
- _compass.enabled = rotateEnabled;
- _compass.hidden = !rotateEnabled;
-}
-
-#pragma mark Ornaments
-
-/// Updates the zoom controls’ enabled state based on the current zoom level.
-- (void)updateZoomControls {
- [_zoomControls setEnabled:self.zoomLevel > self.minimumZoomLevel forSegment:0];
- [_zoomControls setEnabled:self.zoomLevel < self.maximumZoomLevel forSegment:1];
-}
-
-/// Updates the compass to point in the same direction as the map.
-- (void)updateCompass {
- // The circular slider control goes counterclockwise, whereas our map
- // measures its direction clockwise.
- _compass.doubleValue = -self.direction;
-}
-
-- (IBAction)rotate:(NSSlider *)sender {
- [self setDirection:-sender.doubleValue animated:YES];
-}
-
-- (IBAction)giveFeedback:(id)sender {
- MGLMapCamera *camera = self.camera;
- double zoomLevel = self.zoomLevel;
- NSMutableArray *urls = [NSMutableArray array];
- for (MGLAttributionInfo *info in [self.style attributionInfosWithFontSize:0 linkColor:nil]) {
- NSURL *url = [info feedbackURLForStyleURL:self.styleURL
- atCenterCoordinate:camera.centerCoordinate
- zoomLevel:zoomLevel
- direction:camera.heading
- pitch:camera.pitch];
- if (url) {
- [urls addObject:url];
- }
- }
- [[NSWorkspace sharedWorkspace] openURLs:urls
- withAppBundleIdentifier:nil
- options:0
- additionalEventParamDescriptor:nil
- launchIdentifiers:nil];
-}
-
-#pragma mark Annotations
-
-- (nullable NSArray<id <MGLAnnotation>> *)annotations {
- if (_annotationContextsByAnnotationTag.empty()) {
- return nil;
- }
-
- // Map all the annotation tags to the annotations themselves.
- std::vector<id <MGLAnnotation>> annotations;
- std::transform(_annotationContextsByAnnotationTag.begin(),
- _annotationContextsByAnnotationTag.end(),
- std::back_inserter(annotations),
- ^ id <MGLAnnotation> (const std::pair<MGLAnnotationTag, MGLAnnotationContext> &pair) {
- return pair.second.annotation;
- });
- return [NSArray arrayWithObjects:&annotations[0] count:annotations.size()];
-}
-
-- (nullable NSArray<id <MGLAnnotation>> *)visibleAnnotations
-{
- return [self visibleAnnotationsInRect:self.bounds];
-}
-
-- (nullable NSArray<id <MGLAnnotation>> *)visibleAnnotationsInRect:(CGRect)rect
-{
- if (_annotationContextsByAnnotationTag.empty())
- {
- return nil;
- }
-
- std::vector<MGLAnnotationTag> annotationTags = [self annotationTagsInRect:rect];
- std::vector<MGLAnnotationTag> shapeAnnotationTags = [self shapeAnnotationTagsInRect:rect];
-
- if (shapeAnnotationTags.size()) {
- annotationTags.insert(annotationTags.end(), shapeAnnotationTags.begin(), shapeAnnotationTags.end());
- }
-
- if (annotationTags.size())
- {
- NSMutableArray *annotations = [NSMutableArray arrayWithCapacity:annotationTags.size()];
-
- for (auto const& annotationTag: annotationTags)
- {
- if (!_annotationContextsByAnnotationTag.count(annotationTag) ||
- annotationTag == MGLAnnotationTagNotFound)
- {
- continue;
- }
-
- MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag.at(annotationTag);
- NSAssert(annotationContext.annotation, @"Missing annotation for tag %llu.", annotationTag);
- if (annotationContext.annotation)
- {
- [annotations addObject:annotationContext.annotation];
- }
- }
-
- return [annotations copy];
- }
-
- return nil;
-}
-
-/// Returns the annotation assigned the given tag. Cheap.
-- (id <MGLAnnotation>)annotationWithTag:(MGLAnnotationTag)tag {
- if ( ! _annotationContextsByAnnotationTag.count(tag) ||
- tag == MGLAnnotationTagNotFound) {
- return nil;
- }
-
- MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(tag);
- return annotationContext.annotation;
-}
-
-/// Returns the annotation tag assigned to the given annotation.
-- (MGLAnnotationTag)annotationTagForAnnotation:(id <MGLAnnotation>)annotation {
- if (!annotation || _annotationTagsByAnnotation.count(annotation) == 0) {
- return MGLAnnotationTagNotFound;
- }
-
- return _annotationTagsByAnnotation.at(annotation);
-}
-
-- (void)addAnnotation:(id <MGLAnnotation>)annotation {
- if (annotation) {
- [self addAnnotations:@[annotation]];
- }
-}
-
-- (void)addAnnotations:(NSArray<id <MGLAnnotation>> *)annotations {
- if (!annotations) {
- return;
- }
-
- [self willChangeValueForKey:@"annotations"];
-
- BOOL delegateHasImagesForAnnotations = [self.delegate respondsToSelector:@selector(mapView:imageForAnnotation:)];
-
- for (id <MGLAnnotation> annotation in annotations) {
- NSAssert([annotation conformsToProtocol:@protocol(MGLAnnotation)], @"Annotation does not conform to MGLAnnotation");
-
- // adding the same annotation object twice is a no-op
- if (_annotationTagsByAnnotation.count(annotation) != 0) {
- continue;
- }
-
- if ([annotation isKindOfClass:[MGLMultiPoint class]]) {
- // The multipoint knows how to style itself (with the map view’s help).
- MGLMultiPoint *multiPoint = (MGLMultiPoint *)annotation;
- if (!multiPoint.pointCount) {
- continue;
- }
-
- _isChangingAnnotationLayers = YES;
- MGLAnnotationTag annotationTag = _mbglMap->addAnnotation([multiPoint annotationObjectWithDelegate:self]);
- MGLAnnotationContext context;
- context.annotation = annotation;
- _annotationContextsByAnnotationTag[annotationTag] = context;
- _annotationTagsByAnnotation[annotation] = annotationTag;
-
- [(NSObject *)annotation addObserver:self forKeyPath:@"coordinates" options:0 context:(void *)(NSUInteger)annotationTag];
- } else if (![annotation isKindOfClass:[MGLMultiPolyline class]]
- && ![annotation isKindOfClass:[MGLMultiPolygon class]]
- && ![annotation isKindOfClass:[MGLShapeCollection class]]
- && ![annotation isKindOfClass:[MGLPointCollection class]]) {
- MGLAnnotationImage *annotationImage = nil;
- if (delegateHasImagesForAnnotations) {
- annotationImage = [self.delegate mapView:self imageForAnnotation:annotation];
- }
- if (!annotationImage) {
- annotationImage = [self dequeueReusableAnnotationImageWithIdentifier:MGLDefaultStyleMarkerSymbolName];
- }
- if (!annotationImage) {
- annotationImage = self.defaultAnnotationImage;
- }
-
- NSString *symbolName = annotationImage.styleIconIdentifier;
- if (!symbolName) {
- symbolName = [MGLAnnotationSpritePrefix stringByAppendingString:annotationImage.reuseIdentifier];
- annotationImage.styleIconIdentifier = symbolName;
- }
-
- if (!self.annotationImagesByIdentifier[annotationImage.reuseIdentifier]) {
- self.annotationImagesByIdentifier[annotationImage.reuseIdentifier] = annotationImage;
- [self installAnnotationImage:annotationImage];
- }
-
- MGLAnnotationTag annotationTag = _mbglMap->addAnnotation(mbgl::SymbolAnnotation {
- MGLPointFromLocationCoordinate2D(annotation.coordinate),
- symbolName.UTF8String ?: ""
- });
-
- MGLAnnotationContext context;
- context.annotation = annotation;
- context.imageReuseIdentifier = annotationImage.reuseIdentifier;
- _annotationContextsByAnnotationTag[annotationTag] = context;
- _annotationTagsByAnnotation[annotation] = annotationTag;
-
- if ([annotation isKindOfClass:[NSObject class]]) {
- NSAssert(![annotation isKindOfClass:[MGLMultiPoint class]], @"Point annotation should not be MGLMultiPoint.");
- [(NSObject *)annotation addObserver:self forKeyPath:@"coordinate" options:0 context:(void *)(NSUInteger)annotationTag];
- }
-
- // Opt into potentially expensive tooltip tracking areas.
- if ([annotation respondsToSelector:@selector(toolTip)] && annotation.toolTip.length) {
- _wantsToolTipRects = YES;
- }
- }
- }
-
- [self didChangeValueForKey:@"annotations"];
- if (_isChangingAnnotationLayers) {
- [self.style willChangeValueForKey:@"layers"];
- }
-
- [self updateAnnotationTrackingAreas];
-}
-
-/// Initializes and returns a default annotation image that depicts a round pin
-/// rising from the center, with a shadow slightly below center. The alignment
-/// rect therefore excludes the bottom half.
-- (MGLAnnotationImage *)defaultAnnotationImage {
- NSImage *image = MGLDefaultMarkerImage();
- NSRect alignmentRect = image.alignmentRect;
- alignmentRect.origin.y = NSMidY(alignmentRect);
- alignmentRect.size.height /= 2;
- image.alignmentRect = alignmentRect;
- return [MGLAnnotationImage annotationImageWithImage:image
- reuseIdentifier:MGLDefaultStyleMarkerSymbolName];
-}
-
-/// Sends the raw pixel data of the annotation image’s image to mbgl and
-/// calculates state needed for hit testing later.
-- (void)installAnnotationImage:(MGLAnnotationImage *)annotationImage {
- NSString *iconIdentifier = annotationImage.styleIconIdentifier;
- self.annotationImagesByIdentifier[annotationImage.reuseIdentifier] = annotationImage;
-
- NSImage *image = annotationImage.image;
- NSSize size = image.size;
- if (size.width == 0 || size.height == 0 || !image.valid) {
- // Can’t create an empty sprite. An image that hasn’t loaded is also useless.
- return;
- }
-
- _mbglMap->addAnnotationImage([annotationImage.image mgl_styleImageWithIdentifier:iconIdentifier]);
-
- // Create a slop area with a “radius” equal to the annotation image’s entire
- // size, allowing the eventual click to be on any point within this image.
- // Union this slop area with any existing slop areas.
- _unionedAnnotationImageSize = NSMakeSize(MAX(_unionedAnnotationImageSize.width, size.width),
- MAX(_unionedAnnotationImageSize.height, size.height));
-
- // Opt into potentially expensive cursor tracking areas.
- if (annotationImage.cursor) {
- _wantsCursorRects = YES;
- }
-}
-
-- (void)removeAnnotation:(id <MGLAnnotation>)annotation {
- if (annotation) {
- [self removeAnnotations:@[annotation]];
- }
-}
-
-- (void)removeAnnotations:(NSArray<id <MGLAnnotation>> *)annotations {
- if (!annotations) {
- return;
- }
-
- [self willChangeValueForKey:@"annotations"];
-
- for (id <MGLAnnotation> annotation in annotations) {
- NSAssert([annotation conformsToProtocol:@protocol(MGLAnnotation)], @"Annotation does not conform to MGLAnnotation");
-
- MGLAnnotationTag annotationTag = [self annotationTagForAnnotation:annotation];
- NSAssert(annotationTag != MGLAnnotationTagNotFound, @"No ID for annotation %@", annotation);
-
- if (annotationTag == _selectedAnnotationTag) {
- [self deselectAnnotation:annotation];
- }
- if (annotationTag == _lastSelectedAnnotationTag) {
- _lastSelectedAnnotationTag = MGLAnnotationTagNotFound;
- }
-
- _annotationContextsByAnnotationTag.erase(annotationTag);
- _annotationTagsByAnnotation.erase(annotation);
-
- if ([annotation isKindOfClass:[NSObject class]] &&
- ![annotation isKindOfClass:[MGLMultiPoint class]]) {
- [(NSObject *)annotation removeObserver:self forKeyPath:@"coordinate" context:(void *)(NSUInteger)annotationTag];
- } else if ([annotation isKindOfClass:[MGLMultiPoint class]]) {
- [(NSObject *)annotation removeObserver:self forKeyPath:@"coordinates" context:(void *)(NSUInteger)annotationTag];
- }
-
- _isChangingAnnotationLayers = YES;
- _mbglMap->removeAnnotation(annotationTag);
- }
-
- [self didChangeValueForKey:@"annotations"];
- if (_isChangingAnnotationLayers) {
- [self.style willChangeValueForKey:@"layers"];
- }
-
- [self updateAnnotationTrackingAreas];
-}
-
-- (nullable MGLAnnotationImage *)dequeueReusableAnnotationImageWithIdentifier:(NSString *)identifier {
- return self.annotationImagesByIdentifier[identifier];
-}
-
-- (id <MGLAnnotation>)annotationAtPoint:(NSPoint)point {
- return [self annotationWithTag:[self annotationTagAtPoint:point persistingResults:NO]];
-}
-
-/**
- Returns the tag of the annotation at the given point in the view.
-
- This is more involved than it sounds: if multiple point annotations overlap
- near the point, this method cycles through them so that each of them is
- accessible to the user at some point.
-
- @param persist True to remember the cycleable set of annotations, so that a
- different annotation is returned the next time this method is called
- with the same point. Setting this parameter to false is useful for
- asking “what if?”
- */
-- (MGLAnnotationTag)annotationTagAtPoint:(NSPoint)point persistingResults:(BOOL)persist {
- // Look for any annotation near the click. An annotation is “near” if the
- // distance between its center and the click is less than the maximum height
- // or width of an installed annotation image.
- NSRect queryRect = NSInsetRect({ point, NSZeroSize },
- -_unionedAnnotationImageSize.width / 2,
- -_unionedAnnotationImageSize.height / 2);
- queryRect = NSInsetRect(queryRect, -MGLAnnotationImagePaddingForHitTest,
- -MGLAnnotationImagePaddingForHitTest);
- std::vector<MGLAnnotationTag> nearbyAnnotations = [self annotationTagsInRect:queryRect];
- std::vector<MGLAnnotationTag> nearbyShapeAnnotations = [self shapeAnnotationTagsInRect:queryRect];
-
- if (nearbyShapeAnnotations.size()) {
- nearbyAnnotations.insert(nearbyAnnotations.end(), nearbyShapeAnnotations.begin(), nearbyShapeAnnotations.end());
- }
-
- if (nearbyAnnotations.size()) {
- // Assume that the user is fat-fingering an annotation.
- NSRect hitRect = NSInsetRect({ point, NSZeroSize },
- -MGLAnnotationImagePaddingForHitTest,
- -MGLAnnotationImagePaddingForHitTest);
-
- // Filter out any annotation whose image is unselectable or for which
- // hit testing fails.
- auto end = std::remove_if(nearbyAnnotations.begin(), nearbyAnnotations.end(), [&](const MGLAnnotationTag annotationTag) {
- id <MGLAnnotation> annotation = [self annotationWithTag:annotationTag];
- NSAssert(annotation, @"Unknown annotation found nearby click");
- if (!annotation) {
- return true;
- }
-
- if ([annotation isKindOfClass:[MGLMultiPoint class]])
- {
- if ([self.delegate respondsToSelector:@selector(mapView:shapeAnnotationIsEnabled:)]) {
- return !!(![self.delegate mapView:self shapeAnnotationIsEnabled:(MGLMultiPoint *)annotation]);
- } else {
- return false;
- }
- }
-
- MGLAnnotationImage *annotationImage = [self imageOfAnnotationWithTag:annotationTag];
- if (!annotationImage.selectable) {
- return true;
- }
-
- // Filter out the annotation if the fattened finger didn’t land on a
- // translucent or opaque pixel in the image.
- NSRect annotationRect = [self frameOfImage:annotationImage.image
- centeredAtCoordinate:annotation.coordinate];
- return !!![annotationImage.image hitTestRect:hitRect withImageDestinationRect:annotationRect
- context:nil hints:nil flipped:NO];
- });
- nearbyAnnotations.resize(std::distance(nearbyAnnotations.begin(), end));
- }
-
- MGLAnnotationTag hitAnnotationTag = MGLAnnotationTagNotFound;
- if (nearbyAnnotations.size()) {
- // The first selection in the cycle should be the one nearest to the
- // tap. Also the annotation tags need to be stable in order to compare them with
- // the remembered tags _annotationsNearbyLastClick.
- CLLocationCoordinate2D currentCoordinate = [self convertPoint:point toCoordinateFromView:self];
- std::sort(nearbyAnnotations.begin(), nearbyAnnotations.end(), [&](const MGLAnnotationTag tagA, const MGLAnnotationTag tagB) {
- CLLocationCoordinate2D coordinateA = [[self annotationWithTag:tagA] coordinate];
- CLLocationCoordinate2D coordinateB = [[self annotationWithTag:tagB] coordinate];
- CLLocationDegrees deltaA = hypot(coordinateA.latitude - currentCoordinate.latitude,
- coordinateA.longitude - currentCoordinate.longitude);
- CLLocationDegrees deltaB = hypot(coordinateB.latitude - currentCoordinate.latitude,
- coordinateB.longitude - currentCoordinate.longitude);
- return deltaA < deltaB;
- });
-
- if (nearbyAnnotations == _annotationsNearbyLastClick) {
- // The last time we persisted a set of annotations, we had the same
- // set of annotations as we do now. Cycle through them.
- if (_lastSelectedAnnotationTag == MGLAnnotationTagNotFound
- || _lastSelectedAnnotationTag == nearbyAnnotations.back()) {
- // Either no annotation is selected or the last annotation in
- // the set was selected. Wrap around to the first annotation in
- // the set.
- hitAnnotationTag = nearbyAnnotations.front();
- } else {
- auto result = std::find(nearbyAnnotations.begin(),
- nearbyAnnotations.end(),
- _lastSelectedAnnotationTag);
- if (result == nearbyAnnotations.end()) {
- // An annotation from this set hasn’t been selected before.
- // Select the first (nearest) one.
- hitAnnotationTag = nearbyAnnotations.front();
- } else {
- // Step to the next annotation in the set.
- auto distance = std::distance(nearbyAnnotations.begin(), result);
- hitAnnotationTag = nearbyAnnotations[distance + 1];
- }
- }
- } else {
- // Remember the nearby annotations for the next time this method is
- // called.
- if (persist) {
- _annotationsNearbyLastClick = nearbyAnnotations;
- }
-
- // Choose the first nearby annotation.
- if (nearbyAnnotations.size()) {
- hitAnnotationTag = nearbyAnnotations.front();
- }
- }
- }
-
- return hitAnnotationTag;
-}
-
-/// Returns the tags of the annotations coincident with the given rectangle.
-- (std::vector<MGLAnnotationTag>)annotationTagsInRect:(NSRect)rect {
- // Cocoa origin is at the lower-left corner.
- return self.renderer->queryPointAnnotations({
- { NSMinX(rect), NSHeight(self.bounds) - NSMaxY(rect) },
- { NSMaxX(rect), NSHeight(self.bounds) - NSMinY(rect) },
- });
-}
-
-- (std::vector<MGLAnnotationTag>)shapeAnnotationTagsInRect:(NSRect)rect {
- // Cocoa origin is at the lower-left corner.
- return _rendererFrontend->getRenderer()->queryShapeAnnotations({
- { NSMinX(rect), NSHeight(self.bounds) - NSMaxY(rect) },
- { NSMaxX(rect), NSHeight(self.bounds) - NSMinY(rect) },
- });
-}
-
-- (id <MGLAnnotation>)selectedAnnotation {
- if ( ! _annotationContextsByAnnotationTag.count(_selectedAnnotationTag) ||
- _selectedAnnotationTag == MGLAnnotationTagNotFound) {
- return nil;
- }
-
- MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(_selectedAnnotationTag);
- return annotationContext.annotation;
-}
-
-- (void)setSelectedAnnotation:(id <MGLAnnotation>)annotation {
- MGLLogDebug(@"Selecting annotation: %@", annotation);
- [self willChangeValueForKey:@"selectedAnnotations"];
- _selectedAnnotationTag = [self annotationTagForAnnotation:annotation];
- if (_selectedAnnotationTag != MGLAnnotationTagNotFound) {
- _lastSelectedAnnotationTag = _selectedAnnotationTag;
- }
- [self didChangeValueForKey:@"selectedAnnotations"];
-}
-
-- (NSArray<id <MGLAnnotation>> *)selectedAnnotations {
- id <MGLAnnotation> selectedAnnotation = self.selectedAnnotation;
- return selectedAnnotation ? @[selectedAnnotation] : @[];
-}
-
-- (void)setSelectedAnnotations:(NSArray<id <MGLAnnotation>> *)selectedAnnotations {
- MGLLogDebug(@"Selecting: %lu annotations", selectedAnnotations.count);
- if (!selectedAnnotations.count) {
- return;
- }
-
- id <MGLAnnotation> firstAnnotation = selectedAnnotations[0];
- NSAssert([firstAnnotation conformsToProtocol:@protocol(MGLAnnotation)], @"Annotation does not conform to MGLAnnotation");
- if ([firstAnnotation isKindOfClass:[MGLMultiPoint class]]) {
- return;
- }
-
- [self selectAnnotation:firstAnnotation];
-}
-
-- (BOOL)isMovingAnnotationIntoViewSupportedForAnnotation:(id<MGLAnnotation>)annotation animated:(BOOL)animated {
- // Consider delegating
- return [annotation isKindOfClass:[MGLPointAnnotation class]];
-}
-
-- (void)selectAnnotation:(id <MGLAnnotation>)annotation
-{
- MGLLogDebug(@"Selecting annotation: %@", annotation);
- [self selectAnnotation:annotation atPoint:NSZeroPoint];
-}
-
-- (void)selectAnnotation:(id <MGLAnnotation>)annotation atPoint:(NSPoint)gesturePoint
-{
- MGLLogDebug(@"Selecting annotation: %@ atPoint: %@", annotation, NSStringFromPoint(gesturePoint));
- [self selectAnnotation:annotation atPoint:gesturePoint moveIntoView:YES animateSelection:YES];
-}
-
-- (void)selectAnnotation:(id <MGLAnnotation>)annotation atPoint:(NSPoint)gesturePoint moveIntoView:(BOOL)moveIntoView animateSelection:(BOOL)animateSelection
-{
- MGLLogDebug(@"Selecting annotation: %@ atPoint: %@ moveIntoView: %@ animateSelection: %@", annotation, NSStringFromPoint(gesturePoint), MGLStringFromBOOL(moveIntoView), MGLStringFromBOOL(animateSelection));
- id <MGLAnnotation> selectedAnnotation = self.selectedAnnotation;
- if (annotation == selectedAnnotation) {
- return;
- }
-
- // Deselect the annotation before reselecting it.
- [self deselectAnnotation:selectedAnnotation];
-
- // Add the annotation to the map if it hasn’t been added yet.
- MGLAnnotationTag annotationTag = [self annotationTagForAnnotation:annotation];
- if (annotationTag == MGLAnnotationTagNotFound) {
- [self addAnnotation:annotation];
- }
-
- if (moveIntoView) {
- moveIntoView = [self isMovingAnnotationIntoViewSupportedForAnnotation:annotation animated:animateSelection];
- }
-
- // The annotation's anchor will bounce to the current click.
- NSRect positioningRect = [self positioningRectForCalloutForAnnotationWithTag:annotationTag];
-
- // Check for invalid (zero) positioning rect
- if (NSEqualRects(positioningRect, NSZeroRect)) {
- CLLocationCoordinate2D origin = annotation.coordinate;
- positioningRect.origin = [self convertCoordinate:origin toPointToView:self];
- }
-
- BOOL shouldShowCallout = ([annotation respondsToSelector:@selector(title)]
- && annotation.title
- && !self.calloutForSelectedAnnotation.shown
- && [self.delegate respondsToSelector:@selector(mapView:annotationCanShowCallout:)]
- && [self.delegate mapView:self annotationCanShowCallout:annotation]);
-
- if (NSIsEmptyRect(NSIntersectionRect(positioningRect, self.bounds))) {
- if (!moveIntoView && !NSEqualPoints(gesturePoint, NSZeroPoint)) {
- positioningRect = CGRectMake(gesturePoint.x, gesturePoint.y, positioningRect.size.width, positioningRect.size.height);
- }
- }
- // Onscreen or partially on-screen
- else if (!shouldShowCallout) {
- moveIntoView = NO;
- }
-
- self.selectedAnnotation = annotation;
-
- // For the callout to be shown, the annotation must have a title, its
- // callout must not already be shown, and the annotation must be able to
- // show a callout according to the delegate.
- if (shouldShowCallout) {
- NSPopover *callout = [self calloutForAnnotation:annotation];
-
- // Hang the callout off the right edge of the annotation image’s
- // alignment rect, or off the left edge in a right-to-left UI.
- callout.delegate = self;
- self.calloutForSelectedAnnotation = callout;
-
- NSRectEdge edge = (self.userInterfaceLayoutDirection == NSUserInterfaceLayoutDirectionRightToLeft
- ? NSMinXEdge
- : NSMaxXEdge);
-
- // The following will do nothing if the positioning rect is not on-screen. See
- // `-[MGLMapView updateAnnotationCallouts]` for presenting the callout when the selected
- // annotation comes back on-screen.
- [callout showRelativeToRect:positioningRect ofView:self preferredEdge:edge];
- }
-
- if (moveIntoView)
- {
- moveIntoView = NO;
-
- NSRect (^edgeInsetsInsetRect)(NSRect, NSEdgeInsets) = ^(NSRect rect, NSEdgeInsets insets) {
- return NSMakeRect(rect.origin.x + insets.left,
- rect.origin.y + insets.bottom,
- rect.size.width - insets.left - insets.right,
- rect.size.height - insets.top - insets.bottom);
- };
-
- // Add padding around the positioning rect (in essence an inset from the edge of the viewport
- NSRect expandedPositioningRect = positioningRect;
-
- if (shouldShowCallout) {
- // If we have a callout, expand this rect to include a buffer
- expandedPositioningRect = edgeInsetsInsetRect(positioningRect, MGLMapViewOffscreenAnnotationPadding);
- }
-
- // Used for callout positioning, and moving offscreen annotations onscreen.
- CGRect constrainedRect = edgeInsetsInsetRect(self.bounds, self.contentInsets);
- CGRect bounds = constrainedRect;
-
- // Any one of these cases should trigger a move onscreen
- CGFloat minX = CGRectGetMinX(expandedPositioningRect);
-
- if (minX < CGRectGetMinX(bounds)) {
- constrainedRect.origin.x = minX;
- moveIntoView = YES;
- }
- else {
- CGFloat maxX = CGRectGetMaxX(expandedPositioningRect);
-
- if (maxX > CGRectGetMaxX(bounds)) {
- constrainedRect.origin.x = maxX - CGRectGetWidth(constrainedRect);
- moveIntoView = YES;
- }
- }
-
- CGFloat minY = CGRectGetMinY(expandedPositioningRect);
-
- if (minY < CGRectGetMinY(bounds)) {
- constrainedRect.origin.y = minY;
- moveIntoView = YES;
- }
- else {
- CGFloat maxY = CGRectGetMaxY(expandedPositioningRect);
-
- if (maxY > CGRectGetMaxY(bounds)) {
- constrainedRect.origin.y = maxY - CGRectGetHeight(constrainedRect);
- moveIntoView = YES;
- }
- }
-
- if (moveIntoView)
- {
- CGPoint center = CGPointMake(CGRectGetMidX(constrainedRect), CGRectGetMidY(constrainedRect));
- CLLocationCoordinate2D centerCoord = [self convertPoint:center toCoordinateFromView:self];
- [self setCenterCoordinate:centerCoord animated:animateSelection];
- }
- }
-}
-
-- (void)showAnnotations:(NSArray<id <MGLAnnotation>> *)annotations animated:(BOOL)animated {
- MGLLogDebug(@"Showing: %lu annotations animated: %@", annotations.count, MGLStringFromBOOL(animated));
- CGFloat maximumPadding = 100;
- CGFloat yPadding = (NSHeight(self.bounds) / 5 <= maximumPadding) ? (NSHeight(self.bounds) / 5) : maximumPadding;
- CGFloat xPadding = (NSWidth(self.bounds) / 5 <= maximumPadding) ? (NSWidth(self.bounds) / 5) : maximumPadding;
-
- NSEdgeInsets edgeInsets = NSEdgeInsetsMake(yPadding, xPadding, yPadding, xPadding);
-
- [self showAnnotations:annotations edgePadding:edgeInsets animated:animated];
-}
-
-- (void)showAnnotations:(NSArray<id <MGLAnnotation>> *)annotations edgePadding:(NSEdgeInsets)insets animated:(BOOL)animated {
- [self showAnnotations:annotations edgePadding:insets animated:animated completionHandler:nil];
-}
-
-- (void)showAnnotations:(NSArray<id <MGLAnnotation>> *)annotations edgePadding:(NSEdgeInsets)insets animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion {
- if (!annotations.count) {
- if (completion) {
- completion();
- }
- return;
- }
-
- mbgl::LatLngBounds bounds = mbgl::LatLngBounds::empty();
-
- for (id <MGLAnnotation> annotation in annotations) {
- if ([annotation conformsToProtocol:@protocol(MGLOverlay)]) {
- bounds.extend(MGLLatLngBoundsFromCoordinateBounds(((id <MGLOverlay>)annotation).overlayBounds));
- } else {
- bounds.extend(MGLLatLngFromLocationCoordinate2D(annotation.coordinate));
- }
- }
-
- [self setVisibleCoordinateBounds:MGLCoordinateBoundsFromLatLngBounds(bounds)
- edgePadding:insets
- animated:animated
- completionHandler:completion];
-}
-
-/// Returns a popover detailing the annotation.
-- (NSPopover *)calloutForAnnotation:(id <MGLAnnotation>)annotation {
- NSPopover *callout = [[NSPopover alloc] init];
- callout.behavior = NSPopoverBehaviorTransient;
-
- NSViewController *viewController;
- if ([self.delegate respondsToSelector:@selector(mapView:calloutViewControllerForAnnotation:)]) {
- NSViewController *viewControllerFromDelegate = [self.delegate mapView:self
- calloutViewControllerForAnnotation:annotation];
- if (viewControllerFromDelegate) {
- viewController = viewControllerFromDelegate;
- }
- }
- if (!viewController) {
- viewController = self.calloutViewController;
- }
- NSAssert(viewController, @"Unable to load MGLAnnotationCallout view controller");
- // The popover’s view controller can bind to KVO-compliant key paths of the
- // annotation.
- viewController.representedObject = annotation;
- callout.contentViewController = viewController;
-
- return callout;
-}
-
-- (NSViewController *)calloutViewController {
- // Lazily load a default view controller.
- if (!_calloutViewController) {
- _calloutViewController = [[NSViewController alloc] initWithNibName:@"MGLAnnotationCallout"
- bundle:[NSBundle mgl_frameworkBundle]];
- }
- return _calloutViewController;
-}
-
-/// Returns the rectangle that represents the annotation image of the annotation
-/// with the given tag. This rectangle is fitted to the image’s alignment rect
-/// and is appropriate for positioning a popover.
-- (NSRect)positioningRectForCalloutForAnnotationWithTag:(MGLAnnotationTag)annotationTag {
- id <MGLAnnotation> annotation = [self annotationWithTag:annotationTag];
- if (!annotation) {
- return NSZeroRect;
- }
- if ([annotation isKindOfClass:[MGLMultiPoint class]]) {
- CLLocationCoordinate2D origin = annotation.coordinate;
- CGPoint originPoint = [self convertCoordinate:origin toPointToView:self];
- return CGRectMake(originPoint.x, originPoint.y, MGLAnnotationImagePaddingForHitTest, MGLAnnotationImagePaddingForHitTest);
-
- }
-
- NSImage *image = [self imageOfAnnotationWithTag:annotationTag].image;
- if (!image) {
- image = [self dequeueReusableAnnotationImageWithIdentifier:MGLDefaultStyleMarkerSymbolName].image;
- }
- if (!image) {
- return NSZeroRect;
- }
-
- NSRect positioningRect = [self frameOfImage:image centeredAtCoordinate:annotation.coordinate];
- positioningRect = NSOffsetRect(image.alignmentRect, positioningRect.origin.x, positioningRect.origin.y);
- return NSInsetRect(positioningRect, -MGLAnnotationImagePaddingForCallout,
- -MGLAnnotationImagePaddingForCallout);
-}
-
-/// Returns the rectangle relative to the viewport that represents the given
-/// image centered at the given coordinate.
-- (NSRect)frameOfImage:(NSImage *)image centeredAtCoordinate:(CLLocationCoordinate2D)coordinate {
- NSPoint calloutAnchorPoint = [self convertCoordinate:coordinate toPointToView:self];
- return NSInsetRect({ calloutAnchorPoint, NSZeroSize }, -image.size.width / 2, -image.size.height / 2);
-}
-
-/// Returns the annotation image assigned to the annotation with the given tag.
-- (MGLAnnotationImage *)imageOfAnnotationWithTag:(MGLAnnotationTag)annotationTag {
- if (annotationTag == MGLAnnotationTagNotFound
- || _annotationContextsByAnnotationTag.count(annotationTag) == 0) {
- return nil;
- }
-
- NSString *customSymbol = _annotationContextsByAnnotationTag.at(annotationTag).imageReuseIdentifier;
- NSString *symbolName = customSymbol.length ? customSymbol : MGLDefaultStyleMarkerSymbolName;
-
- return [self dequeueReusableAnnotationImageWithIdentifier:symbolName];
-}
-
-- (void)deselectAnnotation:(id <MGLAnnotation>)annotation {
- if (!annotation || self.selectedAnnotation != annotation) {
- return;
- }
-
- // Close the callout popover gracefully.
- NSPopover *callout = self.calloutForSelectedAnnotation;
- [callout performClose:self];
-
- self.selectedAnnotation = nil;
-}
-
-/// Move the annotation callout to point to the selected annotation at its
-/// current position.
-- (void)updateAnnotationCallouts {
- NSPopover *callout = self.calloutForSelectedAnnotation;
- if (callout) {
- NSRect rect = [self positioningRectForCalloutForAnnotationWithTag:_selectedAnnotationTag];
-
- NSAssert(!NSEqualRects(rect, NSZeroRect), @"Positioning rect should be non-zero");
-
- if (!NSIsEmptyRect(NSIntersectionRect(rect, self.bounds))) {
-
- // It's possible that the current callout hasn't been presented (since the original
- // positioningRect was offscreen). We can check that the callout has a valid window
- // This results in the callout being presented just as the annotation comes on screen
- // which matches MapKit, but (currently) not iOS.
- if (!callout.contentViewController.view.window) {
- NSRectEdge edge = (self.userInterfaceLayoutDirection == NSUserInterfaceLayoutDirectionRightToLeft
- ? NSMinXEdge
- : NSMaxXEdge);
- // Re-present the callout
- [callout showRelativeToRect:rect ofView:self preferredEdge:edge];
- }
- else {
- callout.positioningRect = rect;
- }
- }
- }
-}
-
-#pragma mark MGLMultiPointDelegate methods
-
-- (double)alphaForShapeAnnotation:(MGLShape *)annotation {
- if (_delegateHasAlphasForShapeAnnotations) {
- return [self.delegate mapView:self alphaForShapeAnnotation:annotation];
- }
- return 1.0;
-}
-
-- (mbgl::Color)strokeColorForShapeAnnotation:(MGLShape *)annotation {
- NSColor *color = (_delegateHasStrokeColorsForShapeAnnotations
- ? [self.delegate mapView:self strokeColorForShapeAnnotation:annotation]
- : [NSColor selectedMenuItemColor]);
- return color.mgl_color;
-}
-
-- (mbgl::Color)fillColorForPolygonAnnotation:(MGLPolygon *)annotation {
- NSColor *color = (_delegateHasFillColorsForShapeAnnotations
- ? [self.delegate mapView:self fillColorForPolygonAnnotation:annotation]
- : [NSColor selectedMenuItemColor]);
- return color.mgl_color;
-}
-
-- (CGFloat)lineWidthForPolylineAnnotation:(MGLPolyline *)annotation {
- if (_delegateHasLineWidthsForShapeAnnotations) {
- return [self.delegate mapView:self lineWidthForPolylineAnnotation:(MGLPolyline *)annotation];
- }
- return 3.0;
-}
-
-#pragma mark MGLPopoverDelegate methods
-
-- (void)popoverDidShow:(__unused NSNotification *)notification {
- id <MGLAnnotation> annotation = self.selectedAnnotation;
- if (annotation && [self.delegate respondsToSelector:@selector(mapView:didSelectAnnotation:)]) {
- [self.delegate mapView:self didSelectAnnotation:annotation];
- }
-}
-
-- (void)popoverDidClose:(__unused NSNotification *)notification {
- // Deselect the closed popover, in case the popover was closed due to user
- // action.
- id <MGLAnnotation> annotation = self.calloutForSelectedAnnotation.contentViewController.representedObject;
- self.calloutForSelectedAnnotation = nil;
- self.selectedAnnotation = nil;
-
- if ([self.delegate respondsToSelector:@selector(mapView:didDeselectAnnotation:)]) {
- [self.delegate mapView:self didDeselectAnnotation:annotation];
- }
-}
-
-#pragma mark Overlays
-
-- (nonnull NSArray<id <MGLOverlay>> *)overlays
-{
- if (self.annotations == nil) { return @[]; }
-
- NSMutableArray<id <MGLOverlay>> *mutableOverlays = [NSMutableArray array];
-
- [self.annotations enumerateObjectsUsingBlock:^(id<MGLAnnotation> _Nonnull annotation, NSUInteger idx, BOOL * _Nonnull stop) {
- if ([annotation conformsToProtocol:@protocol(MGLOverlay)])
- {
- [mutableOverlays addObject:(id<MGLOverlay>)annotation];
- }
- }];
-
- return [NSArray arrayWithArray:mutableOverlays];
-}
-
-- (void)addOverlay:(id <MGLOverlay>)overlay {
- MGLLogDebug(@"Adding overlay: %@", overlay);
- [self addOverlays:@[overlay]];
-}
-
-- (void)addOverlays:(NSArray<id <MGLOverlay>> *)overlays
-{
- MGLLogDebug(@"Adding: %lu overlays", overlays.count);
-#if DEBUG
- for (id <MGLOverlay> overlay in overlays) {
- NSAssert([overlay conformsToProtocol:@protocol(MGLOverlay)], @"Overlay does not conform to MGLOverlay");
- }
-#endif
- [self addAnnotations:overlays];
-}
-
-- (void)removeOverlay:(id <MGLOverlay>)overlay {
- MGLLogDebug(@"Removing overlay: %@", overlay);
- [self removeOverlays:@[overlay]];
-}
-
-- (void)removeOverlays:(NSArray<id <MGLOverlay>> *)overlays {
- MGLLogDebug(@"Removing: %lu overlays", overlays.count);
-#if DEBUG
- for (id <MGLOverlay> overlay in overlays) {
- NSAssert([overlay conformsToProtocol:@protocol(MGLOverlay)], @"Overlay does not conform to MGLOverlay");
- }
-#endif
- [self removeAnnotations:overlays];
-}
-
-#pragma mark Tooltips and cursors
-
-- (void)updateAnnotationTrackingAreas {
- if (_wantsToolTipRects) {
- [self removeAllToolTips];
- std::vector<MGLAnnotationTag> annotationTags = [self annotationTagsInRect:self.bounds];
- for (MGLAnnotationTag annotationTag : annotationTags) {
- MGLAnnotationImage *annotationImage = [self imageOfAnnotationWithTag:annotationTag];
- id <MGLAnnotation> annotation = [self annotationWithTag:annotationTag];
- if ([annotation respondsToSelector:@selector(toolTip)] && annotation.toolTip.length) {
- // Add a tooltip tracking area over the annotation image’s
- // frame, accounting for the image’s alignment rect.
- NSImage *image = annotationImage.image;
- NSRect annotationRect = [self frameOfImage:image
- centeredAtCoordinate:annotation.coordinate];
- annotationRect = NSOffsetRect(image.alignmentRect, annotationRect.origin.x, annotationRect.origin.y);
- if (!NSIsEmptyRect(annotationRect)) {
- [self addToolTipRect:annotationRect owner:self userData:(void *)(NSUInteger)annotationTag];
- }
- }
- // Opt into potentially expensive cursor tracking areas.
- if (annotationImage.cursor) {
- _wantsCursorRects = YES;
- }
- }
- }
-
- // Blow away any cursor tracking areas and rebuild them. That’s the
- // potentially expensive part.
- if (_wantsCursorRects) {
- [self.window invalidateCursorRectsForView:self];
- }
-}
-
-- (NSString *)view:(__unused NSView *)view stringForToolTip:(__unused NSToolTipTag)tag point:(__unused NSPoint)point userData:(void *)data {
- NSAssert((NSUInteger)data < MGLAnnotationTagNotFound, @"Invalid annotation tag in tooltip rect user data.");
- MGLAnnotationTag annotationTag = (MGLAnnotationTag)MIN((NSUInteger)data, MGLAnnotationTagNotFound);
- id <MGLAnnotation> annotation = [self annotationWithTag:annotationTag];
- return annotation.toolTip;
-}
-
-- (void)resetCursorRects {
- // Drag to pan has a grabbing hand cursor.
- if ([self isPanningWithGesture]) {
- [self addCursorRect:self.bounds cursor:[NSCursor closedHandCursor]];
- return;
- }
-
- // The rest of this method can be expensive, so bail if no annotations have
- // ever had custom cursors.
- if (!_wantsCursorRects) {
- return;
- }
-
- std::vector<MGLAnnotationTag> annotationTags = [self annotationTagsInRect:self.bounds];
- for (MGLAnnotationTag annotationTag : annotationTags) {
- id <MGLAnnotation> annotation = [self annotationWithTag:annotationTag];
- MGLAnnotationImage *annotationImage = [self imageOfAnnotationWithTag:annotationTag];
- if (annotationImage.cursor) {
- // Add a cursor tracking area over the annotation image, respecting
- // the image’s alignment rect.
- NSImage *image = annotationImage.image;
- NSRect annotationRect = [self frameOfImage:image
- centeredAtCoordinate:annotation.coordinate];
- annotationRect = NSOffsetRect(image.alignmentRect, annotationRect.origin.x, annotationRect.origin.y);
- [self addCursorRect:annotationRect cursor:annotationImage.cursor];
- }
- }
-}
-
-#pragma mark Data
-
-- (NSArray<id <MGLFeature>> *)visibleFeaturesAtPoint:(NSPoint)point {
- MGLLogDebug(@"Querying visibleFeaturesAtPoint: %@", NSStringFromPoint(point));
- return [self visibleFeaturesAtPoint:point inStyleLayersWithIdentifiers:nil];
-}
-
-- (NSArray<id <MGLFeature>> *)visibleFeaturesAtPoint:(CGPoint)point inStyleLayersWithIdentifiers:(NSSet<NSString *> *)styleLayerIdentifiers {
- MGLLogDebug(@"Querying visibleFeaturesAtPoint: %@ inStyleLayersWithIdentifiers: %@", NSStringFromPoint(point), styleLayerIdentifiers);
- return [self visibleFeaturesAtPoint:point inStyleLayersWithIdentifiers:styleLayerIdentifiers predicate:nil];
-}
-
-- (NSArray<id <MGLFeature>> *)visibleFeaturesAtPoint:(NSPoint)point inStyleLayersWithIdentifiers:(NSSet<NSString *> *)styleLayerIdentifiers predicate:(NSPredicate *)predicate {
- MGLLogDebug(@"Querying visibleFeaturesAtPoint: %@ inStyleLayersWithIdentifiers: %@ predicate: %@", NSStringFromPoint(point), styleLayerIdentifiers, predicate);
- // Cocoa origin is at the lower-left corner.
- mbgl::ScreenCoordinate screenCoordinate = { point.x, NSHeight(self.bounds) - point.y };
-
- mbgl::optional<std::vector<std::string>> optionalLayerIDs;
- if (styleLayerIdentifiers) {
- __block std::vector<std::string> layerIDs;
- layerIDs.reserve(styleLayerIdentifiers.count);
- [styleLayerIdentifiers enumerateObjectsUsingBlock:^(NSString * _Nonnull identifier, BOOL * _Nonnull stop) {
- layerIDs.push_back(identifier.UTF8String);
- }];
- optionalLayerIDs = layerIDs;
- }
-
- mbgl::optional<mbgl::style::Filter> optionalFilter;
- if (predicate) {
- optionalFilter = predicate.mgl_filter;
- }
-
- std::vector<mbgl::Feature> features = _rendererFrontend->getRenderer()->queryRenderedFeatures(screenCoordinate, { optionalLayerIDs, optionalFilter });
- return MGLFeaturesFromMBGLFeatures(features);
-}
-
-- (NSArray<id <MGLFeature>> *)visibleFeaturesInRect:(NSRect)rect {
- MGLLogDebug(@"Querying visibleFeaturesInRect: %@", NSStringFromRect(rect));
- return [self visibleFeaturesInRect:rect inStyleLayersWithIdentifiers:nil];
-}
-
-- (NSArray<id <MGLFeature>> *)visibleFeaturesInRect:(CGRect)rect inStyleLayersWithIdentifiers:(NSSet<NSString *> *)styleLayerIdentifiers {
- MGLLogDebug(@"Querying visibleFeaturesInRect: %@ inStyleLayersWithIdentifiers: %@", NSStringFromRect(rect), styleLayerIdentifiers);
- return [self visibleFeaturesInRect:rect inStyleLayersWithIdentifiers:styleLayerIdentifiers predicate:nil];
-}
-
-- (NSArray<id <MGLFeature>> *)visibleFeaturesInRect:(NSRect)rect inStyleLayersWithIdentifiers:(NSSet<NSString *> *)styleLayerIdentifiers predicate:(NSPredicate *)predicate {
- MGLLogDebug(@"Querying visibleFeaturesInRect: %@ inStyleLayersWithIdentifiers: %@ predicate: %@", NSStringFromRect(rect), styleLayerIdentifiers, predicate);
- // Cocoa origin is at the lower-left corner.
- mbgl::ScreenBox screenBox = {
- { NSMinX(rect), NSHeight(self.bounds) - NSMaxY(rect) },
- { NSMaxX(rect), NSHeight(self.bounds) - NSMinY(rect) },
- };
-
- mbgl::optional<std::vector<std::string>> optionalLayerIDs;
- if (styleLayerIdentifiers) {
- __block std::vector<std::string> layerIDs;
- layerIDs.reserve(styleLayerIdentifiers.count);
- [styleLayerIdentifiers enumerateObjectsUsingBlock:^(NSString * _Nonnull identifier, BOOL * _Nonnull stop) {
- layerIDs.push_back(identifier.UTF8String);
- }];
- optionalLayerIDs = layerIDs;
- }
-
- mbgl::optional<mbgl::style::Filter> optionalFilter;
- if (predicate) {
- optionalFilter = predicate.mgl_filter;
- }
-
- std::vector<mbgl::Feature> features = _rendererFrontend->getRenderer()->queryRenderedFeatures(screenBox, { optionalLayerIDs, optionalFilter });
- return MGLFeaturesFromMBGLFeatures(features);
-}
-
-#pragma mark User interface validation
-
-- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
- if (menuItem.action == @selector(giveFeedback:)) {
- return YES;
- }
- return NO;
-}
-
-#pragma mark Interface Builder methods
-
-- (void)prepareForInterfaceBuilder {
- [super prepareForInterfaceBuilder];
-
- // Color the background a glorious Mapbox teal.
- self.layer.borderColor = [NSColor colorWithRed:59/255.
- green:178/255.
- blue:208/255.
- alpha:0.8].CGColor;
- self.layer.borderWidth = 2;
- self.layer.backgroundColor = [NSColor colorWithRed:59/255.
- green:178/255.
- blue:208/255.
- alpha:0.6].CGColor;
-
- // Place a playful marker right smack dab in the middle.
- self.layer.contents = MGLDefaultMarkerImage();
- self.layer.contentsGravity = kCAGravityCenter;
- self.layer.contentsScale = [NSScreen mainScreen].backingScaleFactor;
-}
-
-#pragma mark Geometric methods
-
-- (NSPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(nullable NSView *)view {
- if (!CLLocationCoordinate2DIsValid(coordinate)) {
- return NSMakePoint(NAN, NAN);
- }
- return [self convertLatLng:MGLLatLngFromLocationCoordinate2D(coordinate) toPointToView:view];
-}
-
-/// Converts a geographic coordinate to a point in the view’s coordinate system.
-- (NSPoint)convertLatLng:(mbgl::LatLng)latLng toPointToView:(nullable NSView *)view {
- mbgl::ScreenCoordinate pixel = _mbglMap->pixelForLatLng(latLng);
- // Cocoa origin is at the lower-left corner.
- pixel.y = NSHeight(self.bounds) - pixel.y;
- return [self convertPoint:NSMakePoint(pixel.x, pixel.y) toView:view];
-}
-
-- (CLLocationCoordinate2D)convertPoint:(NSPoint)point toCoordinateFromView:(nullable NSView *)view {
- return MGLLocationCoordinate2DFromLatLng([self convertPoint:point toLatLngFromView:view]);
-}
-
-/// Converts a point in the view’s coordinate system to a geographic coordinate.
-- (mbgl::LatLng)convertPoint:(NSPoint)point toLatLngFromView:(nullable NSView *)view {
- NSPoint convertedPoint = [self convertPoint:point fromView:view];
- return _mbglMap->latLngForPixel({
- convertedPoint.x,
- // mbgl origin is at the top-left corner.
- NSHeight(self.bounds) - convertedPoint.y,
- }).wrapped();
-}
-
-- (NSRect)convertCoordinateBounds:(MGLCoordinateBounds)bounds toRectToView:(nullable NSView *)view {
- return [self convertLatLngBounds:MGLLatLngBoundsFromCoordinateBounds(bounds) toRectToView:view];
-}
-
-/// Converts a geographic bounding box to a rectangle in the view’s coordinate
-/// system.
-- (NSRect)convertLatLngBounds:(mbgl::LatLngBounds)bounds toRectToView:(nullable NSView *)view {
- auto northwest = bounds.northwest();
- auto northeast = bounds.northeast();
- auto southwest = bounds.southwest();
- auto southeast = bounds.southeast();
-
- auto center = [self convertPoint:{ NSMidX(view.bounds), NSMidY(view.bounds) } toLatLngFromView:view];
-
- // Extend bounds to account for the antimeridian
- northwest.unwrapForShortestPath(center);
- northeast.unwrapForShortestPath(center);
- southwest.unwrapForShortestPath(center);
- southeast.unwrapForShortestPath(center);
-
- auto correctedLatLngBounds = mbgl::LatLngBounds::empty();
- correctedLatLngBounds.extend(northwest);
- correctedLatLngBounds.extend(northeast);
- correctedLatLngBounds.extend(southwest);
- correctedLatLngBounds.extend(southeast);
-
- NSRect rect = { [self convertLatLng:correctedLatLngBounds.southwest() toPointToView:view], CGSizeZero };
- rect = MGLExtendRect(rect, [self convertLatLng:correctedLatLngBounds.northeast() toPointToView:view]);
- return rect;
-}
-
-- (MGLCoordinateBounds)convertRect:(NSRect)rect toCoordinateBoundsFromView:(nullable NSView *)view {
- return MGLCoordinateBoundsFromLatLngBounds([self convertRect:rect toLatLngBoundsFromView:view]);
-}
-
-/// Converts a rectangle in the given view’s coordinate system to a geographic
-/// bounding box.
-- (mbgl::LatLngBounds)convertRect:(NSRect)rect toLatLngBoundsFromView:(nullable NSView *)view {
- auto bounds = mbgl::LatLngBounds::empty();
- auto bottomLeft = [self convertPoint:{ NSMinX(rect), NSMinY(rect) } toLatLngFromView:view];
- auto bottomRight = [self convertPoint:{ NSMaxX(rect), NSMinY(rect) } toLatLngFromView:view];
- auto topRight = [self convertPoint:{ NSMaxX(rect), NSMaxY(rect) } toLatLngFromView:view];
- auto topLeft = [self convertPoint:{ NSMinX(rect), NSMaxY(rect) } toLatLngFromView:view];
-
- // If the bounds straddles the antimeridian, unwrap it so that one side
- // extends beyond ±180° longitude.
- auto center = [self convertPoint:{ NSMidX(rect), NSMidY(rect) } toLatLngFromView:view];
- bottomLeft.unwrapForShortestPath(center);
- bottomRight.unwrapForShortestPath(center);
- topRight.unwrapForShortestPath(center);
- topLeft.unwrapForShortestPath(center);
-
- bounds.extend(bottomLeft);
- bounds.extend(bottomRight);
- bounds.extend(topRight);
- bounds.extend(topLeft);
-
- return bounds;
-}
-
-- (CLLocationDistance)metersPerPointAtLatitude:(CLLocationDegrees)latitude {
- return mbgl::Projection::getMetersPerPixelAtLatitude(latitude, self.zoomLevel);
-}
-
-#pragma mark Debugging
-
-- (MGLMapDebugMaskOptions)debugMask {
- mbgl::MapDebugOptions options = _mbglMap->getDebug();
- MGLMapDebugMaskOptions mask = 0;
- if (options & mbgl::MapDebugOptions::TileBorders) {
- mask |= MGLMapDebugTileBoundariesMask;
- }
- if (options & mbgl::MapDebugOptions::ParseStatus) {
- mask |= MGLMapDebugTileInfoMask;
- }
- if (options & mbgl::MapDebugOptions::Timestamps) {
- mask |= MGLMapDebugTimestampsMask;
- }
- if (options & mbgl::MapDebugOptions::Collision) {
- mask |= MGLMapDebugCollisionBoxesMask;
- }
- if (options & mbgl::MapDebugOptions::Overdraw) {
- mask |= MGLMapDebugOverdrawVisualizationMask;
- }
- if (options & mbgl::MapDebugOptions::StencilClip) {
- mask |= MGLMapDebugStencilBufferMask;
- }
- if (options & mbgl::MapDebugOptions::DepthBuffer) {
- mask |= MGLMapDebugDepthBufferMask;
- }
- return mask;
-}
-
-- (void)setDebugMask:(MGLMapDebugMaskOptions)debugMask {
- mbgl::MapDebugOptions options = mbgl::MapDebugOptions::NoDebug;
- if (debugMask & MGLMapDebugTileBoundariesMask) {
- options |= mbgl::MapDebugOptions::TileBorders;
- }
- if (debugMask & MGLMapDebugTileInfoMask) {
- options |= mbgl::MapDebugOptions::ParseStatus;
- }
- if (debugMask & MGLMapDebugTimestampsMask) {
- options |= mbgl::MapDebugOptions::Timestamps;
- }
- if (debugMask & MGLMapDebugCollisionBoxesMask) {
- options |= mbgl::MapDebugOptions::Collision;
- }
- if (debugMask & MGLMapDebugOverdrawVisualizationMask) {
- options |= mbgl::MapDebugOptions::Overdraw;
- }
- if (debugMask & MGLMapDebugStencilBufferMask) {
- options |= mbgl::MapDebugOptions::StencilClip;
- }
- if (debugMask & MGLMapDebugDepthBufferMask) {
- options |= mbgl::MapDebugOptions::DepthBuffer;
- }
- _mbglMap->setDebug(options);
-}
-
-@end
diff --git a/platform/macos/src/MGLMapViewDelegate.h b/platform/macos/src/MGLMapViewDelegate.h
deleted file mode 100644
index 098164cd75..0000000000
--- a/platform/macos/src/MGLMapViewDelegate.h
+++ /dev/null
@@ -1,352 +0,0 @@
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class MGLMapView;
-@class MGLAnnotationImage;
-@class MGLPolygon;
-@class MGLPolyline;
-@class MGLShape;
-
-/**
- The `MGLMapViewDelegate` protocol defines a set of optional methods that you
- can use to receive messages from an `MGLMapView` instance. Because many map
- operations require the `MGLMapView` class to load data asynchronously, the map
- view calls these methods to notify your application when specific operations
- complete. The map view also uses these methods to request information about
- annotations displayed on the map, such as the styles and interaction modes to
- apply to individual annotations.
- */
-@protocol MGLMapViewDelegate <NSObject>
-
-@optional
-
-#pragma mark Responding to Map Viewpoint Changes
-
-/**
- Tells the delegate that the viewpoint depicted by the map view is about to
- change.
-
- This method is called whenever the currently displayed map camera will start
- changing for any reason.
-
- @param mapView The map view whose viewpoint will change.
- @param animated Whether the change will cause an animated effect on the map.
- */
-- (void)mapView:(MGLMapView *)mapView cameraWillChangeAnimated:(BOOL)animated;
-
-/**
- Tells the delegate that the viewpoint depicted by the map view is changing.
-
- This method is called as the currently displayed map camera changes as part of
- an animation, whether due to a user gesture or due to a call to a method such
- as `-[MGLMapView setCamera:animated:]`. This method can be called before
- `-mapViewDidFinishLoadingMap:` is called.
-
- During the animation, this method may be called many times to report updates
- to the viewpoint. Therefore, your implementation of this method should be as
- lightweight as possible to avoid affecting performance.
-
- @param mapView The map view whose viewpoint is changing.
- */
-- (void)mapViewCameraIsChanging:(MGLMapView *)mapView;
-
-/**
- Tells the delegate that the viewpoint depicted by the map view has finished
- changing.
-
- This method is called whenever the currently displayed map camera has finished
- changing, after any calls to `-mapViewRegionIsChanging:` due to animation.
- This method can be called before `-mapViewDidFinishLoadingMap:` is
- called.
-
- @param mapView The map view whose viewpoint has changed.
- @param animated Whether the change caused an animated effect on the map.
- */
-- (void)mapView:(MGLMapView *)mapView cameraDidChangeAnimated:(BOOL)animated;
-
-/**
- Asks the delegate whether the map view should be allowed to change from the
- existing camera to the new camera in response to a user gesture.
-
- This method is called as soon as the user gesture is recognized. It is not
- called in response to a programmatic camera change, such as by setting the
- `centerCoordinate` property or calling `-flyToCamera:completionHandler:`.
-
- This method is called many times during gesturing, so you should avoid performing
- complex or performance-intensive tasks in your implementation.
-
- @param mapView The map view that the user is manipulating.
- @param oldCamera The camera representing the viewpoint at the moment the
- gesture is recognized. If this method returns `NO`, the map view’s camera
- continues to be this camera.
- @param newCamera The expected camera after the gesture completes. If this
- method returns `YES`, this camera becomes the map view’s camera.
- @return A Boolean value indicating whether the map view should stay at
- `oldCamera` or change to `newCamera`.
- */
-- (BOOL)mapView:(MGLMapView *)mapView shouldChangeFromCamera:(MGLMapCamera *)oldCamera toCamera:(MGLMapCamera *)newCamera;
-
-#pragma mark Loading the Map
-
-/**
- Tells the delegate that the map view will begin to load.
-
- This method is called whenever the map view starts loading, including when a
- new style has been set and the map must reload.
-
- @param mapView The map view that is starting to load.
- */
-- (void)mapViewWillStartLoadingMap:(MGLMapView *)mapView;
-
-/**
- Tells the delegate that the map view has finished loading.
-
- This method is called whenever the map view finishes loading, either after the
- initial load or after a style change has forced a reload.
-
- @param mapView The map view that has finished loading.
- */
-- (void)mapViewDidFinishLoadingMap:(MGLMapView *)mapView;
-
-/**
- Tells the delegate that the map view was unable to load data needed for
- displaying the map.
-
- This method may be called for a variety of reasons, including a network
- connection failure or a failure to fetch the style from the server. You can use
- the given error message to notify the user that map data is unavailable.
-
- @param mapView The map view that is unable to load the data.
- @param error The reason the data could not be loaded.
- */
-- (void)mapViewDidFailLoadingMap:(MGLMapView *)mapView withError:(NSError *)error;
-
-- (void)mapViewWillStartRenderingMap:(MGLMapView *)mapView;
-- (void)mapViewDidFinishRenderingMap:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered;
-
-/**
- Tells the delegate that the map view is about to redraw.
-
- This method is called any time the map view needs to redraw due to a change in
- the viewpoint or style property transition. This method may be called very
- frequently, even moreso than `-mapViewRegionIsChanging:`. Therefore, your
- implementation of this method should be as lightweight as possible to avoid
- affecting performance.
-
- @param mapView The map view that is about to redraw.
- */
-- (void)mapViewWillStartRenderingFrame:(MGLMapView *)mapView;
-
-/**
- Tells the delegate that the map view has just redrawn.
-
- This method is called any time the map view needs to redraw due to a change in
- the viewpoint or style property transition. This method may be called very
- frequently, even moreso than `-mapViewRegionIsChanging:`. Therefore, your
- implementation of this method should be as lightweight as possible to avoid
- affecting performance.
-
- @param mapView The map view that has just redrawn.
- */
-- (void)mapViewDidFinishRenderingFrame:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered;
-
-/**
- Tells the delegate that the map view is entering an idle state, and no more
- drawing will be necessary until new data is loaded or there is some interaction
- with the map.
-
- - No camera transitions are in progress
- - All currently requested tiles have loaded
- - All fade/transition animations have completed
-
- @param mapView The map view that has just entered the idle state.
- */
-- (void)mapViewDidBecomeIdle:(MGLMapView *)mapView;
-
-/**
- Tells the delegate that the map has just finished loading a style.
-
- This method is called during the initialization of the map view and after any
- subsequent loading of a new style. This method is called between the
- `-mapViewWillStartRenderingMap:` and `-mapViewDidFinishRenderingMap:` delegate
- methods. Changes to sources or layers of the current style do not cause this
- method to be called.
-
- This method is the earliest opportunity to modify the layout or appearance of
- the current style before the map view is displayed to the user.
-
- @param mapView The map view that has just loaded a style.
- @param style The style that was loaded.
- */
-- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style;
-
-- (nullable NSImage *)mapView:(MGLMapView *)mapView didFailToLoadImage:(NSString *)imageName;
-
-/**
- Asks the delegate whether the map view should evict cached images.
-
- This method is called in two scenarios: when the cumulative size of unused images
- exceeds the cache size or when the last tile that includes the image is removed from
- memory.
-
- @param mapView The map view that is evicting the image.
- @param imageName The image name that is going to be removed.
- @return A Boolean value indicating whether the map view should evict
- the cached image.
- */
-- (BOOL)mapView:(MGLMapView *)mapView shouldRemoveStyleImage:(NSString *)imageName;
-
-#pragma mark Managing the Appearance of Annotations
-
-/**
- Returns an annotation image object to mark the given point annotation object on
- the map.
-
- @param mapView The map view that requested the annotation image.
- @param annotation The object representing the annotation that is about to be
- displayed.
- @return The image object to display for the given annotation or `nil` if you
- want to display the default marker image.
- */
-- (nullable MGLAnnotationImage *)mapView:(MGLMapView *)mapView imageForAnnotation:(id <MGLAnnotation>)annotation;
-
-/**
- Returns the alpha value to use when rendering a shape annotation.
-
- A value of 0.0 results in a completely transparent shape. A value of 1.0, the
- default, results in a completely opaque shape.
-
- This method sets the opacity of an entire shape, inclusive of its stroke and
- fill. To independently set the values for stroke or fill, specify an alpha
- component in the color returned by `-mapView:strokeColorForShapeAnnotation:` or
- `-mapView:fillColorForPolygonAnnotation:`.
-
- @param mapView The map view rendering the shape annotation.
- @param annotation The annotation being rendered.
- @return An alpha value between 0 and 1.0.
- */
-- (CGFloat)mapView:(MGLMapView *)mapView alphaForShapeAnnotation:(MGLShape *)annotation;
-
-/**
- Returns the color to use when rendering the outline of a shape annotation.
-
- The default stroke color is the selected menu item color. If a pattern color is
- specified, the result is undefined.
-
- Opacity may be set by specifying an alpha component. The default alpha value is
- `1.0` and results in a completely opaque stroke.
-
- @param mapView The map view rendering the shape annotation.
- @param annotation The annotation being rendered.
- @return A color to use for the shape outline.
- */
-- (NSColor *)mapView:(MGLMapView *)mapView strokeColorForShapeAnnotation:(MGLShape *)annotation;
-
-/**
- Returns the color to use when rendering the fill of a polygon annotation.
-
- The default fill color is the selected menu item color. If a pattern color is
- specified, the result is undefined.
-
- Opacity may be set by specifying an alpha component. The default alpha value is
- `1.0` and results in a completely opaque shape.
-
- @param mapView The map view rendering the polygon annotation.
- @param annotation The annotation being rendered.
- @return The polygon’s interior fill color.
- */
-- (NSColor *)mapView:(MGLMapView *)mapView fillColorForPolygonAnnotation:(MGLPolygon *)annotation;
-
-/**
- Returns the line width in points to use when rendering the outline of a
- polyline annotation.
-
- By default, the polyline is outlined with a line 3.0 points wide.
-
- @param mapView The map view rendering the polygon annotation.
- @param annotation The annotation being rendered.
- @return A line width for the polyline, measured in points.
- */
-- (CGFloat)mapView:(MGLMapView *)mapView lineWidthForPolylineAnnotation:(MGLPolyline *)annotation;
-
-#pragma mark Selecting Annotations
-
-/**
- Returns a Boolean value indicating whether the shape annotation can be selected.
-
- If the return value is `YES`, the user can select the annotation by clicking
- on it. If the delegate does not implement this method, the default value is `YES`.
-
- @param mapView The map view that has selected the annotation.
- @param annotation The object representing the shape annotation.
- @return A Boolean value indicating whether the annotation can be selected.
- */
-- (BOOL)mapView:(MGLMapView *)mapView shapeAnnotationIsEnabled:(MGLShape *)annotation;
-
-/**
- Tells the delegate that one of its annotations has been selected.
-
- You can use this method to track changes to the selection state of annotations.
-
- @param mapView The map view containing the annotation.
- @param annotation The annotation that was selected.
- */
-- (void)mapView:(MGLMapView *)mapView didSelectAnnotation:(id <MGLAnnotation>)annotation;
-
-/**
- Tells the delegate that one of its annotations has been deselected.
-
- You can use this method to track changes in the selection state of annotations.
-
- @param mapView The map view containing the annotation.
- @param annotation The annotation that was deselected.
- */
-- (void)mapView:(MGLMapView *)mapView didDeselectAnnotation:(id <MGLAnnotation>)annotation;
-
-#pragma mark Managing Callout Popovers
-
-/**
- Returns a Boolean value indicating whether the annotation is able to display
- extra information in a callout popover.
-
- This method is called after an annotation is selected, before any callout is
- displayed for the annotation.
-
- If the return value is `YES`, a callout popover is shown when the user clicks
- on an annotation, selecting it. The default callout displays the annotation’s
- title and subtitle. You can customize the popover’s contents by implementing
- the `-mapView:calloutViewControllerForAnnotation:` method.
-
- If the return value is `NO`, or if this method is absent from the delegate, or
- if the annotation lacks a title, the annotation will not show a callout even
- when selected.
-
- @param mapView The map view that has selected the annotation.
- @param annotation The object representing the annotation.
- @return A Boolean value indicating whether the annotation should show a
- callout.
- */
-- (BOOL)mapView:(MGLMapView *)mapView annotationCanShowCallout:(id <MGLAnnotation>)annotation;
-
-/**
- Returns a view controller to manage the callout popover’s content view.
-
- Like any instance of `NSPopover`, an annotation callout manages its contents
- with a view controller. The annotation object is the view controller’s
- represented object. This means that you can bind controls in the view
- controller’s content view to KVO-compliant properties of the annotation object,
- such as `title` and `subtitle`.
-
- If each annotation should have an identical callout, you can set the
- `MGLMapView.calloutViewController` property instead.
-
- @param mapView The map view that is requesting a callout view controller.
- @param annotation The object representing the annotation.
- @return A view controller for the given annotation.
- */
-- (nullable NSViewController *)mapView:(MGLMapView *)mapView calloutViewControllerForAnnotation:(id <MGLAnnotation>)annotation;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/platform/macos/src/MGLMapView_Private.h b/platform/macos/src/MGLMapView_Private.h
deleted file mode 100644
index 3d9b36c30a..0000000000
--- a/platform/macos/src/MGLMapView_Private.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#import "MGLMapView.h"
-
-#include <mbgl/util/size.hpp>
-
-namespace mbgl {
- class Map;
- class Renderer;
-}
-
-@class MGLSource;
-
-@interface MGLMapView (Private)
-
-/// True if the view or application is in a state where it is not expected to be
-/// actively drawing.
-@property (nonatomic, readonly, getter=isDormant) BOOL dormant;
-
-// These properties exist because initially, both the latitude and longitude are
-// NaN. You have to set both the latitude and longitude simultaneously. If you
-// set the latitude but reuse the current longitude, and the current longitude
-// happens to be NaN, there will be no change because the resulting coordinate
-// pair is invalid.
-
-/// Center latitude set independently of the center longitude in an inspectable.
-@property (nonatomic) CLLocationDegrees pendingLatitude;
-/// Center longitude set independently of the center latitude in an inspectable.
-@property (nonatomic) CLLocationDegrees pendingLongitude;
-
-/// The map view’s OpenGL rendering context, if it is backed by an OpenGL based view.
-@property (readonly, nonatomic, nullable) CGLContextObj context;
-
-- (mbgl::Size)framebufferSize;
-
-/// Map observers
-- (void)cameraWillChangeAnimated:(BOOL)animated;
-- (void)cameraIsChanging;
-- (void)cameraDidChangeAnimated:(BOOL)animated;
-- (void)mapViewWillStartLoadingMap;
-- (void)mapViewDidFinishLoadingMap;
-- (void)mapViewDidFailLoadingMapWithError:(nonnull NSError *)error;
-- (void)mapViewWillStartRenderingFrame;
-- (void)mapViewDidFinishRenderingFrameFullyRendered:(BOOL)fullyRendered;
-- (void)mapViewWillStartRenderingMap;
-- (void)mapViewDidFinishRenderingMapFullyRendered:(BOOL)fullyRendered;
-- (void)mapViewDidBecomeIdle;
-- (void)mapViewDidFinishLoadingStyle;
-- (void)sourceDidChange:(nonnull MGLSource *)source;
-- (BOOL)shouldRemoveStyleImage:(nonnull NSString *)imageName;
-
-/// Asynchronously render a frame of the map.
-- (void)setNeedsRerender;
-
-/// Synchronously render a frame of the map.
-- (void)renderSync;
-
-- (BOOL)isTargetingInterfaceBuilder;
-
-- (nonnull mbgl::Map *)mbglMap;
-
-- (nonnull mbgl::Renderer *)renderer;
-
-@end
diff --git a/platform/macos/src/MGLOpenGLLayer.h b/platform/macos/src/MGLOpenGLLayer.h
deleted file mode 100644
index 832664f397..0000000000
--- a/platform/macos/src/MGLOpenGLLayer.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#import <Cocoa/Cocoa.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// A subclass of NSOpenGLLayer that creates the environment mbgl needs to
-/// render good-looking maps.
-@interface MGLOpenGLLayer : NSOpenGLLayer
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/platform/macos/src/MGLOpenGLLayer.mm b/platform/macos/src/MGLOpenGLLayer.mm
deleted file mode 100644
index fde2b52404..0000000000
--- a/platform/macos/src/MGLOpenGLLayer.mm
+++ /dev/null
@@ -1,58 +0,0 @@
-#import "MGLOpenGLLayer.h"
-
-#import "MGLMapView_Private.h"
-
-@implementation MGLOpenGLLayer {
- NSOpenGLContext *_context;
-}
-
-- (MGLMapView *)mapView {
- return (MGLMapView *)super.view;
-}
-
-// - (BOOL)isAsynchronous {
-// return YES;
-// }
-
-- (BOOL)needsDisplayOnBoundsChange {
- return YES;
-}
-
-- (CGRect)frame {
- return self.view.bounds;
-}
-
-- (NSOpenGLContext *)openGLContextForPixelFormat:(NSOpenGLPixelFormat *)pixelFormat {
- if (!_context) {
- _context = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil];
- }
- return _context;
-}
-
-- (NSOpenGLPixelFormat *)openGLPixelFormatForDisplayMask:(uint32_t)mask {
- NSOpenGLPixelFormatAttribute pfas[] = {
- NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersionLegacy,
- NSOpenGLPFAAccelerated,
- NSOpenGLPFAClosestPolicy,
- NSOpenGLPFAAccumSize, 32,
- NSOpenGLPFAColorSize, 24,
- NSOpenGLPFAAlphaSize, 8,
- NSOpenGLPFADepthSize, 16,
- NSOpenGLPFAStencilSize, 8,
- NSOpenGLPFAScreenMask, mask,
- NSOpenGLPFAAllowOfflineRenderers, // Allows using the integrated GPU
- 0
- };
- return [[NSOpenGLPixelFormat alloc] initWithAttributes:pfas];
-}
-
-- (BOOL)canDrawInOpenGLContext:(__unused NSOpenGLContext *)context pixelFormat:(__unused NSOpenGLPixelFormat *)pixelFormat forLayerTime:(__unused CFTimeInterval)t displayTime:(__unused const CVTimeStamp *)ts {
- return !self.mapView.dormant;
-}
-
-- (void)drawInOpenGLContext:(NSOpenGLContext *)context pixelFormat:(NSOpenGLPixelFormat *)pixelFormat forLayerTime:(CFTimeInterval)t displayTime:(const CVTimeStamp *)ts {
- [self.mapView renderSync];
- [super drawInOpenGLContext:context pixelFormat:pixelFormat forLayerTime:t displayTime:ts];
-}
-
-@end
diff --git a/platform/macos/src/Mapbox.h b/platform/macos/src/Mapbox.h
deleted file mode 100644
index 6728992d6b..0000000000
--- a/platform/macos/src/Mapbox.h
+++ /dev/null
@@ -1,71 +0,0 @@
-#import <Cocoa/Cocoa.h>
-
-#import "MGLFoundation.h"
-
-/// Project version number for Mapbox.
-FOUNDATION_EXPORT MGL_EXPORT double MapboxVersionNumber;
-
-/// Project version string for Mapbox.
-FOUNDATION_EXPORT MGL_EXPORT const unsigned char MapboxVersionString[];
-
-#import "MGLAccountManager.h"
-#import "MGLAnnotation.h"
-#import "MGLAnnotationImage.h"
-#import "MGLClockDirectionFormatter.h"
-#import "MGLCluster.h"
-#import "MGLCompassDirectionFormatter.h"
-#import "MGLCoordinateFormatter.h"
-#import "MGLDistanceFormatter.h"
-#import "MGLFeature.h"
-#import "MGLGeometry.h"
-#import "MGLLight.h"
-#import "MGLMapCamera.h"
-#import "MGLMapView.h"
-#import "MGLMapView+IBAdditions.h"
-#import "MGLMapViewDelegate.h"
-#import "MGLMultiPoint.h"
-#import "MGLOfflinePack.h"
-#import "MGLOfflineRegion.h"
-#import "MGLOfflineStorage.h"
-#import "MGLOverlay.h"
-#import "MGLPointAnnotation.h"
-#import "MGLPointCollection.h"
-#import "MGLPolygon.h"
-#import "MGLPolyline.h"
-#import "MGLShape.h"
-#import "MGLShapeCollection.h"
-#import "MGLStyle.h"
-#import "MGLStyleLayer.h"
-#import "MGLForegroundStyleLayer.h"
-#import "MGLVectorStyleLayer.h"
-#import "MGLFillStyleLayer.h"
-#import "MGLFillExtrusionStyleLayer.h"
-#import "MGLLineStyleLayer.h"
-#import "MGLSymbolStyleLayer.h"
-#import "MGLRasterStyleLayer.h"
-#import "MGLCircleStyleLayer.h"
-#import "MGLBackgroundStyleLayer.h"
-#import "MGLHeatmapStyleLayer.h"
-#import "MGLHillshadeStyleLayer.h"
-#import "MGLOpenGLStyleLayer.h"
-#import "MGLSource.h"
-#import "MGLTileSource.h"
-#import "MGLVectorTileSource.h"
-#import "MGLShapeSource.h"
-#import "MGLComputedShapeSource.h"
-#import "MGLRasterTileSource.h"
-#import "MGLRasterDEMSource.h"
-#import "MGLImageSource.h"
-#import "MGLTilePyramidOfflineRegion.h"
-#import "MGLShapeOfflineRegion.h"
-#import "MGLTypes.h"
-#import "NSValue+MGLAdditions.h"
-#import "MGLStyleValue.h"
-#import "MGLAttributionInfo.h"
-#import "MGLMapSnapshotter.h"
-#import "NSExpression+MGLAdditions.h"
-#import "NSPredicate+MGLAdditions.h"
-#import "MGLLoggingConfiguration.h"
-#import "MGLNetworkConfiguration.h"
-#import "MGLAttributedExpression.h"
-#import "MGLSDKMetricsManager.h"
diff --git a/platform/macos/src/NSColor+MGLAdditions.h b/platform/macos/src/NSColor+MGLAdditions.h
deleted file mode 100644
index a3c5aba63f..0000000000
--- a/platform/macos/src/NSColor+MGLAdditions.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#import <Cocoa/Cocoa.h>
-
-#include <mbgl/util/color.hpp>
-#include <mbgl/style/property_value.hpp>
-
-@interface NSColor (MGLAdditions)
-
-/**
- Converts the color into an mbgl::Color in sRGB space.
- */
-- (mbgl::Color)mgl_color;
-
-/**
- Instantiates `NSColor` from an `mbgl::Color`
- */
-+ (NSColor *)mgl_colorWithColor:(mbgl::Color)color;
-
-- (mbgl::style::PropertyValue<mbgl::Color>)mgl_colorPropertyValue;
-
-@end
-
-@interface NSExpression (MGLColorAdditions)
-
-+ (NSExpression *)mgl_expressionForRGBComponents:(NSArray<NSExpression *> *)components;
-+ (NSExpression *)mgl_expressionForRGBAComponents:(NSArray<NSExpression *> *)components;
-+ (NSColor *)mgl_colorWithRGBComponents:(NSArray<NSExpression *> *)componentExpressions;
-
-@end
diff --git a/platform/macos/src/NSColor+MGLAdditions.mm b/platform/macos/src/NSColor+MGLAdditions.mm
deleted file mode 100644
index 6df3d750ce..0000000000
--- a/platform/macos/src/NSColor+MGLAdditions.mm
+++ /dev/null
@@ -1,124 +0,0 @@
-#import "NSColor+MGLAdditions.h"
-
-@implementation NSColor (MGLAdditions)
-
-- (mbgl::Color)mgl_color {
- CGFloat r, g, b, a;
-
- // The Mapbox Style Specification does not specify a color space, but it is
- // assumed to be sRGB for consistency with CSS.
- NSColor *srgbColor = self;
- if ([NSColor redColor].colorSpaceName == NSCalibratedRGBColorSpace) {
- srgbColor = [srgbColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
- } else {
- srgbColor = [srgbColor colorUsingColorSpace:[NSColorSpace sRGBColorSpace]];
- }
- [srgbColor getRed:&r green:&g blue:&b alpha:&a];
-
- // NSColor provides non-premultiplied color components, so we have to premultiply each
- // color component with the alpha value to transform it into a valid
- // mbgl::Color which expects premultiplied color components.
- return { static_cast<float>(r*a), static_cast<float>(g*a), static_cast<float>(b*a), static_cast<float>(a) };
-}
-
-+ (NSColor *)mgl_colorWithColor:(mbgl::Color)color {
- // If there is no alpha value, return original color values.
- if (color.a == 0.0f) {
- // macOS 10.12 Sierra and below uses calibrated RGB by default.
- if ([NSColor redColor].colorSpaceName == NSCalibratedRGBColorSpace) {
- return [NSColor colorWithCalibratedRed:color.r green:color.g blue:color.b alpha:color.a];
- } else {
- return [NSColor colorWithRed:color.r green:color.g blue:color.b alpha:color.a];
- }
- }
-
- // mbgl::Color provides premultiplied color components, so we have to convert color
- // components to non-premultiplied values to return a valid NSColor object.
- float red = static_cast<float>((color.r / color.a));
- float green = static_cast<float>((color.g / color.a));
- float blue = static_cast<float>((color.b / color.a));
-
- // macOS 10.12 Sierra and below uses calibrated RGB by default.
- if ([NSColor redColor].colorSpaceName == NSCalibratedRGBColorSpace) {
- return [NSColor colorWithCalibratedRed:red green:green blue:blue alpha:color.a];
- } else {
- return [NSColor colorWithRed:red green:green blue:blue alpha:color.a];
- }
-}
-
-- (mbgl::style::PropertyValue<mbgl::Color>)mgl_colorPropertyValue {
- mbgl::Color color = self.mgl_color;
- return {{ color.r, color.g, color.b, color.a }};
-}
-
-@end
-
-@implementation NSExpression (MGLColorAdditions)
-
-+ (NSExpression *)mgl_expressionForRGBComponents:(NSArray<NSExpression *> *)components {
- if (NSColor *color = [self mgl_colorWithRGBComponents:components]) {
- return [NSExpression expressionForConstantValue:color];
- }
-
- NSExpression *color = [NSExpression expressionForConstantValue:[NSColor class]];
- NSExpression *alpha = [NSExpression expressionForConstantValue:@1.0];
- return [NSExpression expressionForFunction:color
- selectorName:@"colorWithRed:green:blue:alpha:"
- arguments:[components arrayByAddingObject:alpha]];
-}
-
-+ (NSExpression *)mgl_expressionForRGBAComponents:(NSArray<NSExpression *> *)components {
- if (NSColor *color = [self mgl_colorWithRGBComponents:components]) {
- return [NSExpression expressionForConstantValue:color];
- }
-
- NSExpression *color = [NSExpression expressionForConstantValue:[NSColor class]];
- return [NSExpression expressionForFunction:color
- selectorName:@"colorWithRed:green:blue:alpha:"
- arguments:components];
-}
-
-/**
- Returns a color object corresponding to the given component expressions.
- */
-+ (NSColor *)mgl_colorWithRGBComponents:(NSArray<NSExpression *> *)componentExpressions {
- // Map the component expressions to constant components. If any component is
- // a non-constant expression, the components cannot be converted into a
- // constant color value.
- std::vector<CGFloat> components;
- for (NSExpression *componentExpression in componentExpressions) {
- if (componentExpression.expressionType != NSConstantValueExpressionType) {
- return nil;
- }
-
- NSNumber *component = (NSNumber *)componentExpression.constantValue;
- if (![component isKindOfClass:[NSNumber class]]) {
- return nil;
- }
-
- components.push_back(component.doubleValue / 255.0);
- }
-
- if (components.size() < 4) {
- components.push_back(1.0);
- } else {
- // Alpha
- components.back() *= 255.0;
- }
-
-
- // macOS 10.12 Sierra and below uses calibrated RGB by default.
- if ([NSColor redColor].colorSpaceName == NSCalibratedRGBColorSpace) {
- return [NSColor colorWithCalibratedRed:components[0]
- green:components[1]
- blue:components[2]
- alpha:components[3]];
- }
- // The Mapbox Style Specification does not specify a color space, but it is
- // assumed to be sRGB for consistency with CSS.
- return [NSColor colorWithColorSpace:[NSColorSpace sRGBColorSpace]
- components:&components[0]
- count:components.size()];
-}
-
-@end
diff --git a/platform/macos/src/NSImage+MGLAdditions.h b/platform/macos/src/NSImage+MGLAdditions.h
deleted file mode 100644
index c08fc57bea..0000000000
--- a/platform/macos/src/NSImage+MGLAdditions.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#import <Cocoa/Cocoa.h>
-
-#include <mbgl/style/image.hpp>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface NSImage (MGLAdditions)
-
-- (nullable instancetype)initWithMGLPremultipliedImage:(mbgl::PremultipliedImage&&)image;
-
-- (nullable instancetype)initWithMGLStyleImage:(const mbgl::style::Image *)image;
-
-- (std::unique_ptr<mbgl::style::Image>)mgl_styleImageWithIdentifier:(NSString *)identifier;
-
-- (mbgl::PremultipliedImage) mgl_premultipliedImage;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/platform/macos/src/NSImage+MGLAdditions.mm b/platform/macos/src/NSImage+MGLAdditions.mm
deleted file mode 100644
index 2666dfe790..0000000000
--- a/platform/macos/src/NSImage+MGLAdditions.mm
+++ /dev/null
@@ -1,49 +0,0 @@
-#import "NSImage+MGLAdditions.h"
-
-#include <mbgl/util/image+MGLAdditions.hpp>
-
-@implementation NSImage (MGLAdditions)
-
-- (nullable instancetype)initWithMGLPremultipliedImage:(mbgl::PremultipliedImage&&)src {
- CGImageRef image = CGImageCreateWithMGLPremultipliedImage(std::move(src));
- if (!image) {
- return nil;
- }
-
- self = [self initWithCGImage:image size:NSZeroSize];
- CGImageRelease(image);
- return self;
-}
-
-- (nullable instancetype)initWithMGLStyleImage:(const mbgl::style::Image *)styleImage {
- CGImageRef image = CGImageCreateWithMGLPremultipliedImage(styleImage->getImage().clone());
- if (!image) {
- return nil;
- }
-
- NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithCGImage:image];
- CGImageRelease(image);
- CGFloat w = styleImage->getImage().size.width / styleImage->getPixelRatio();
- CGFloat h = styleImage->getImage().size.height / styleImage->getPixelRatio();
- if (self = [self initWithSize:NSMakeSize(w, h)]) {
- [self addRepresentation:rep];
- [self setTemplate:styleImage->isSdf()];
- }
- return self;
-}
-
-- (std::unique_ptr<mbgl::style::Image>)mgl_styleImageWithIdentifier:(NSString *)identifier {
- mbgl::PremultipliedImage cPremultipliedImage = self.mgl_premultipliedImage;
- auto imageWidth = cPremultipliedImage.size.width;
- return std::make_unique<mbgl::style::Image>([identifier UTF8String],
- std::move(cPremultipliedImage),
- (float)(imageWidth / self.size.width),
- [self isTemplate]);
-}
-
-- (mbgl::PremultipliedImage)mgl_premultipliedImage {
- CGImageRef ref = [self CGImageForProposedRect:nullptr context:nullptr hints:nullptr];
- return MGLPremultipliedImageFromCGImage(ref);
-}
-
-@end
diff --git a/platform/macos/src/NSProcessInfo+MGLAdditions.h b/platform/macos/src/NSProcessInfo+MGLAdditions.h
deleted file mode 100644
index 1dc1439d53..0000000000
--- a/platform/macos/src/NSProcessInfo+MGLAdditions.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#import <Foundation/Foundation.h>
-
-@interface NSProcessInfo (MGLAdditions)
-
-/**
- Returns YES if the current process is Interface Builder’s helper process for
- rendering designables.
- */
-- (BOOL)mgl_isInterfaceBuilderDesignablesAgent;
-
-@end
diff --git a/platform/macos/src/NSProcessInfo+MGLAdditions.m b/platform/macos/src/NSProcessInfo+MGLAdditions.m
deleted file mode 100644
index 0c287c030b..0000000000
--- a/platform/macos/src/NSProcessInfo+MGLAdditions.m
+++ /dev/null
@@ -1,10 +0,0 @@
-#import "NSProcessInfo+MGLAdditions.h"
-
-@implementation NSProcessInfo (MGLAdditions)
-
-- (BOOL)mgl_isInterfaceBuilderDesignablesAgent {
- NSString *processName = self.processName;
- return [processName hasPrefix:@"IBAgent"] || [processName hasPrefix:@"IBDesignablesAgent"];
-}
-
-@end
diff --git a/platform/macos/test/Info.plist b/platform/macos/test/Info.plist
deleted file mode 100644
index ba72822e87..0000000000
--- a/platform/macos/test/Info.plist
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>en</string>
- <key>CFBundleExecutable</key>
- <string>$(EXECUTABLE_NAME)</string>
- <key>CFBundleIdentifier</key>
- <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>$(PRODUCT_NAME)</string>
- <key>CFBundlePackageType</key>
- <string>BNDL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1</string>
-</dict>
-</plist>
diff --git a/platform/macos/test/MGLAnnotationTests.m b/platform/macos/test/MGLAnnotationTests.m
deleted file mode 100644
index 9657ae0a44..0000000000
--- a/platform/macos/test/MGLAnnotationTests.m
+++ /dev/null
@@ -1,52 +0,0 @@
-#import <Mapbox/Mapbox.h>
-#import <XCTest/XCTest.h>
-
-@interface MGLAnnotationTests : XCTestCase <MGLMapViewDelegate>
-@property (nonatomic) MGLMapView *mapView;
-@property (nonatomic) BOOL centerCoordinateDidChange;
-@end
-
-@implementation MGLAnnotationTests
-
-- (void)setUp
-{
- [super setUp];
- _mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 256, 256)];
- _mapView.delegate = self;
-}
-
-- (void)testSelectingOnscreenAnnotationThatHasNotBeenAdded {
- // See https://github.com/mapbox/mapbox-gl-native/issues/11476
-
- // This bug occurs under the following conditions:
- //
- // - There are content insets (e.g. navigation bar) for the compare against
- // NSZeroRect
-
- self.mapView.contentInsets = NSEdgeInsetsMake(10.0, 10.0, 10.0, 10.0);
-
- // Create annotation
- MGLPointFeature *point = [[MGLPointFeature alloc] init];
- point.title = NSStringFromSelector(_cmd);
- point.coordinate = CLLocationCoordinate2DMake(0.0, 0.0);
-
- MGLCoordinateBounds coordinateBounds = [self.mapView convertRect:self.mapView.bounds toCoordinateBoundsFromView:self.mapView];
- XCTAssert(MGLCoordinateInCoordinateBounds(point.coordinate, coordinateBounds), @"The test point should be within the visible map view");
-
- [self.mapView addObserver:self forKeyPath:@"centerCoordinate" options:NSKeyValueObservingOptionNew context:_cmd];
- XCTAssertFalse(self.centerCoordinateDidChange, @"Center coordinate should not have changed at this point");
-
- // Select on screen annotation (DO NOT ADD FIRST).
- [self.mapView selectAnnotation:point];
-
- XCTAssertFalse(self.centerCoordinateDidChange, @"Center coordinate should not have changed after selecting a visible annotation");
-}
-
-- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
- if ((context == @selector(testSelectingOnscreenAnnotationThatHasNotBeenAdded)) &&
- (object == self.mapView)) {
- self.centerCoordinateDidChange = YES;
- }
-}
-
-@end
diff --git a/platform/macos/test/MGLAttributionButtonTests.m b/platform/macos/test/MGLAttributionButtonTests.m
deleted file mode 100644
index b41de95317..0000000000
--- a/platform/macos/test/MGLAttributionButtonTests.m
+++ /dev/null
@@ -1,31 +0,0 @@
-#import <Mapbox/Mapbox.h>
-#import <XCTest/XCTest.h>
-
-#import "MGLAttributionButton.h"
-#import "MGLAttributionInfo.h"
-
-@interface MGLAttributionButtonTests : XCTestCase
-
-@end
-
-@implementation MGLAttributionButtonTests
-
-- (void)testPlainSymbol {
- NSAttributedString *title = [[NSAttributedString alloc] initWithString:@"® & ™ Mapbox" attributes:@{
- NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),
- }];
- MGLAttributionInfo *info = [[MGLAttributionInfo alloc] initWithTitle:title URL:nil];
- MGLAttributionButton *button = [[MGLAttributionButton alloc] initWithAttributionInfo:info];
-
- NSRange symbolUnderlineRange;
- NSNumber *symbolUnderline = [button.attributedTitle attribute:NSUnderlineStyleAttributeName atIndex:0 effectiveRange:&symbolUnderlineRange];
- XCTAssertNil(symbolUnderline);
- XCTAssertEqual(symbolUnderlineRange.length, 6);
-
- NSRange wordUnderlineRange;
- NSNumber *wordUnderline = [button.attributedTitle attribute:NSUnderlineStyleAttributeName atIndex:6 effectiveRange:&wordUnderlineRange];
- XCTAssertEqualObjects(wordUnderline, @(NSUnderlineStyleSingle));
- XCTAssertEqual(wordUnderlineRange.length, 6);
-}
-
-@end
diff --git a/platform/macos/test/MGLMapViewDelegateIntegrationTests.swift b/platform/macos/test/MGLMapViewDelegateIntegrationTests.swift
deleted file mode 100644
index 90a777e379..0000000000
--- a/platform/macos/test/MGLMapViewDelegateIntegrationTests.swift
+++ /dev/null
@@ -1,63 +0,0 @@
-import XCTest
-import Mapbox
-
-class MGLMapViewDelegateIntegrationTests: XCTestCase {
-
- func testCoverage() {
- MGLSDKTestHelpers.checkTestsContainAllMethods(testClass: MGLMapViewDelegateIntegrationTests.self, in: MGLMapViewDelegate.self)
- }
-
-}
-
-extension MGLMapViewDelegateIntegrationTests: MGLMapViewDelegate {
-
- func mapView(_ mapView: MGLMapView, shouldChangeFrom oldCamera: MGLMapCamera, to newCamera: MGLMapCamera) -> Bool { return false }
-
- func mapView(_ mapView: MGLMapView, lineWidthForPolylineAnnotation annotation: MGLPolyline) -> CGFloat { return 0 }
-
- func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool { return false }
-
- func mapView(_ mapView: MGLMapView, imageFor annotation: MGLAnnotation) -> MGLAnnotationImage? { return nil }
-
- func mapView(_ mapView: MGLMapView, alphaForShapeAnnotation annotation: MGLShape) -> CGFloat { return 0 }
-
- func mapViewDidFinishRenderingFrame(_ mapView: MGLMapView, fullyRendered: Bool) {}
-
- func mapViewDidFinishRenderingMap(_ mapView: MGLMapView, fullyRendered: Bool) {}
-
- func mapViewDidBecomeIdle(_ mapView: MGLMapView) {}
-
- func mapViewDidFailLoadingMap(_ mapView: MGLMapView, withError error: Error) {}
-
- func mapView(_ mapView: MGLMapView, didFailToLoadImage imageName: String) -> NSImage? { return nil }
-
- func mapView(_ mapView: MGLMapView, shapeAnnotationIsEnabled annotation: MGLShape) -> Bool { return false }
-
- func mapView(_ mapView: MGLMapView, didDeselect annotation: MGLAnnotation) {}
-
- func mapView(_ mapView: MGLMapView, didSelect annotation: MGLAnnotation) {}
-
- func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {}
-
- func mapViewWillStartRenderingFrame(_ mapView: MGLMapView) {}
-
- func mapViewWillStartRenderingMap(_ mapView: MGLMapView) {}
-
- func mapViewWillStartLoadingMap(_ mapView: MGLMapView) {}
-
- func mapViewDidFinishLoadingMap(_ mapView: MGLMapView) {}
-
- func mapViewCameraIsChanging(_ mapView: MGLMapView) {}
-
- func mapView(_ mapView: MGLMapView, cameraDidChangeAnimated animated: Bool) {}
-
- func mapView(_ mapView: MGLMapView, cameraWillChangeAnimated animated: Bool) {}
-
- func mapView(_ mapView: MGLMapView, strokeColorForShapeAnnotation annotation: MGLShape) -> NSColor { return .black }
-
- func mapView(_ mapView: MGLMapView, fillColorForPolygonAnnotation annotation: MGLPolygon) -> NSColor { return .black }
-
- func mapView(_ mapView: MGLMapView, calloutViewControllerFor annotation: MGLAnnotation) -> NSViewController? { return nil }
-
- func mapView(_ mapView: MGLMapView, shouldRemoveStyleImage imageName: String) -> Bool { return false }
-}