summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2017-03-13 04:14:59 -0700
committerMinh Nguyễn <mxn@1ec5.org>2019-07-28 15:58:23 -0700
commitcb073a842237288d5cb0633e1575e7d5fa7de5db (patch)
tree4cf5af1bca28116146dc0d2695a0599ffd8f63fd
parentc2ab83aedf04737e0bedddd44e483b837e22e8d5 (diff)
downloadqtlocation-mapboxgl-cb073a842237288d5cb0633e1575e7d5fa7de5db.tar.gz
[tvos] Added demo application
-rw-r--r--platform/darwin/src/MGLOfflineStorage.mm18
-rw-r--r--platform/darwin/src/MGLShapeOfflineRegion.mm18
-rw-r--r--platform/darwin/src/MGLTilePyramidOfflineRegion.mm18
-rw-r--r--platform/ios/ios.xcodeproj/project.pbxproj216
-rw-r--r--platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme2
-rw-r--r--platform/ios/ios.xcodeproj/xcshareddata/xcschemes/Integration Test Harness.xcscheme2
-rw-r--r--platform/ios/ios.xcodeproj/xcshareddata/xcschemes/bench.xcscheme2
-rw-r--r--platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic+static.xcscheme2
-rw-r--r--platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme2
-rw-r--r--platform/ios/ios.xcodeproj/xcshareddata/xcschemes/iosapp.xcscheme2
-rw-r--r--platform/ios/ios.xcodeproj/xcshareddata/xcschemes/static.xcscheme2
-rw-r--r--platform/ios/tvosapp/AppDelegate.h9
-rw-r--r--platform/ios/tvosapp/AppDelegate.m43
-rw-r--r--platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json32
-rw-r--r--platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json16
-rw-r--r--platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json16
-rw-r--r--platform/ios/tvosapp/Assets.xcassets/Contents.json6
-rw-r--r--platform/ios/tvosapp/Assets.xcassets/LaunchImage.launchimage/Contents.json22
-rw-r--r--platform/ios/tvosapp/Base.lproj/Main.storyboard50
-rw-r--r--platform/ios/tvosapp/Info.plist36
-rw-r--r--platform/ios/tvosapp/ViewController.h7
-rw-r--r--platform/ios/tvosapp/ViewController.m31
-rw-r--r--platform/ios/tvosapp/main.m8
23 files changed, 519 insertions, 41 deletions
diff --git a/platform/darwin/src/MGLOfflineStorage.mm b/platform/darwin/src/MGLOfflineStorage.mm
index a7af85edbc..ce118b789c 100644
--- a/platform/darwin/src/MGLOfflineStorage.mm
+++ b/platform/darwin/src/MGLOfflineStorage.mm
@@ -373,17 +373,17 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
if (completion) {
completion(pack, error);
}
-
- #if TARGET_OS_IOS
- NSMutableDictionary *offlineDownloadStartEventAttributes = [NSMutableDictionary dictionaryWithObject:MMEventTypeOfflineDownloadStart forKey:MMEEventKeyEvent];
- if ([region conformsToProtocol:@protocol(MGLOfflineRegion_Private)]) {
- NSDictionary *regionAttributes = ((id<MGLOfflineRegion_Private>)region).offlineStartEventAttributes;
- [offlineDownloadStartEventAttributes addEntriesFromDictionary:regionAttributes];
- }
+#if TARGET_OS_IOS
+ NSMutableDictionary *offlineDownloadStartEventAttributes = [NSMutableDictionary dictionaryWithObject:MMEventTypeOfflineDownloadStart forKey:MMEEventKeyEvent];
- [MGLMapboxEvents pushEvent:MMEventTypeOfflineDownloadStart withAttributes:offlineDownloadStartEventAttributes];
- #endif
+ if ([region conformsToProtocol:@protocol(MGLOfflineRegion_Private)]) {
+ NSDictionary *regionAttributes = ((id<MGLOfflineRegion_Private>)region).offlineStartEventAttributes;
+ [offlineDownloadStartEventAttributes addEntriesFromDictionary:regionAttributes];
+ }
+
+ [MGLMapboxEvents pushEvent:MMEventTypeOfflineDownloadStart withAttributes:offlineDownloadStartEventAttributes];
+#endif
}];
}
diff --git a/platform/darwin/src/MGLShapeOfflineRegion.mm b/platform/darwin/src/MGLShapeOfflineRegion.mm
index 2a1b01d2d0..fdab6c3f67 100644
--- a/platform/darwin/src/MGLShapeOfflineRegion.mm
+++ b/platform/darwin/src/MGLShapeOfflineRegion.mm
@@ -13,7 +13,7 @@
#import "MGLStyle.h"
#import "MGLLoggingConfiguration_Private.h"
-#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR
+#if TARGET_OS_IOS
#import "MMEConstants.h"
#endif
@@ -28,15 +28,15 @@
@synthesize styleURL = _styleURL;
@synthesize includesIdeographicGlyphs = _includesIdeographicGlyphs;
--(NSDictionary *)offlineStartEventAttributes {
+- (NSDictionary *)offlineStartEventAttributes {
return @{
- #if TARGET_OS_IOS
- MMEEventKeyShapeForOfflineRegion: @"shaperegion",
- MMEEventKeyMinZoomLevel: @(self.minimumZoomLevel),
- MMEEventKeyMaxZoomLevel: @(self.maximumZoomLevel),
- MMEEventKeyStyleURL: self.styleURL.absoluteString ?: [NSNull null]
- #endif
- };
+#if TARGET_OS_IOS
+ MMEEventKeyShapeForOfflineRegion: @"shaperegion",
+ MMEEventKeyMinZoomLevel: @(self.minimumZoomLevel),
+ MMEEventKeyMaxZoomLevel: @(self.maximumZoomLevel),
+ MMEEventKeyStyleURL: self.styleURL.absoluteString ?: [NSNull null]
+#endif
+ };
}
+ (BOOL)supportsSecureCoding {
diff --git a/platform/darwin/src/MGLTilePyramidOfflineRegion.mm b/platform/darwin/src/MGLTilePyramidOfflineRegion.mm
index 3304e108dd..8b42f175f7 100644
--- a/platform/darwin/src/MGLTilePyramidOfflineRegion.mm
+++ b/platform/darwin/src/MGLTilePyramidOfflineRegion.mm
@@ -10,7 +10,7 @@
#import "MGLStyle.h"
#import "MGLLoggingConfiguration_Private.h"
-#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR
+#if TARGET_OS_IOS
#import "MMEConstants.h"
#endif
@@ -25,15 +25,15 @@
@synthesize styleURL = _styleURL;
@synthesize includesIdeographicGlyphs = _includesIdeographicGlyphs;
--(NSDictionary *)offlineStartEventAttributes {
+- (NSDictionary *)offlineStartEventAttributes {
return @{
- #if TARGET_OS_IOS
- MMEEventKeyShapeForOfflineRegion: @"tileregion",
- MMEEventKeyMinZoomLevel: @(self.minimumZoomLevel),
- MMEEventKeyMaxZoomLevel: @(self.maximumZoomLevel),
- MMEEventKeyStyleURL: self.styleURL.absoluteString ?: [NSNull null]
- #endif
- };
+#if TARGET_OS_IOS
+ MMEEventKeyShapeForOfflineRegion: @"tileregion",
+ MMEEventKeyMinZoomLevel: @(self.minimumZoomLevel),
+ MMEEventKeyMaxZoomLevel: @(self.maximumZoomLevel),
+ MMEEventKeyStyleURL: self.styleURL.absoluteString ?: [NSNull null]
+#endif
+ };
}
+ (BOOL)supportsSecureCoding {
diff --git a/platform/ios/ios.xcodeproj/project.pbxproj b/platform/ios/ios.xcodeproj/project.pbxproj
index c9fe664d33..b16e429f25 100644
--- a/platform/ios/ios.xcodeproj/project.pbxproj
+++ b/platform/ios/ios.xcodeproj/project.pbxproj
@@ -641,6 +641,13 @@
DA72620E1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA72620A1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm */; };
DA737EE11D056A4E005BDA16 /* MGLMapViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DA737EE01D056A4E005BDA16 /* MGLMapViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
DA737EE21D056A4E005BDA16 /* MGLMapViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DA737EE01D056A4E005BDA16 /* MGLMapViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ DA7F8CC71F87486800937243 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA7F8CC61F87486800937243 /* AppDelegate.m */; };
+ DA7F8CCA1F87486800937243 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA7F8CC91F87486800937243 /* ViewController.m */; };
+ DA7F8CCD1F87486800937243 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA7F8CCB1F87486800937243 /* Main.storyboard */; };
+ DA7F8CCF1F87486800937243 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA7F8CCE1F87486800937243 /* Assets.xcassets */; };
+ DA7F8CD21F87486800937243 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DA7F8CD11F87486800937243 /* main.m */; };
+ DA7F8CD61F87497F00937243 /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA94B9711E766E6400190EF5 /* Mapbox.framework */; };
+ DA7F8CD71F87497F00937243 /* Mapbox.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DA94B9711E766E6400190EF5 /* Mapbox.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DA821D061CCC6D59007508D4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA821D041CCC6D59007508D4 /* LaunchScreen.storyboard */; };
DA821D071CCC6D59007508D4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA821D051CCC6D59007508D4 /* Main.storyboard */; };
DA8847D91CBAF91600AB86E3 /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8847D21CBAF91600AB86E3 /* Mapbox.framework */; };
@@ -1129,6 +1136,13 @@
remoteGlobalIDString = DA8847D11CBAF91600AB86E3;
remoteInfo = dynamic;
};
+ DA7F8CD81F87497F00937243 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = DA1DC9421CB6C1C2006E619F /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = DA94B9701E766E6400190EF5;
+ remoteInfo = tv;
+ };
DA8847D71CBAF91600AB86E3 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = DA1DC9421CB6C1C2006E619F /* Project object */;
@@ -1175,6 +1189,17 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
+ DA7F8CDA1F87497F00937243 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ DA7F8CD71F87497F00937243 /* Mapbox.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
DAA4E40C1CBB6C9600178DFB /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -1634,6 +1659,15 @@
DA737AE71E59172C00AD2CDE /* ru */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
DA737AE91E5917C300AD2CDE /* uk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = "<group>"; };
DA737EE01D056A4E005BDA16 /* MGLMapViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapViewDelegate.h; sourceTree = "<group>"; };
+ DA7F8CC31F87486800937243 /* Mapbox GL.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Mapbox GL.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ DA7F8CC51F87486800937243 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ DA7F8CC61F87486800937243 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+ DA7F8CC81F87486800937243 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
+ DA7F8CC91F87486800937243 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
+ DA7F8CCC1F87486800937243 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+ DA7F8CCE1F87486800937243 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+ DA7F8CD01F87486800937243 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ DA7F8CD11F87486800937243 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
DA80E9601FE84AD90065FC9B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = "<group>"; };
DA80E9611FE84AEF0065FC9B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ar; path = ar.lproj/Foundation.stringsdict; sourceTree = "<group>"; };
DA821D041CCC6D59007508D4 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
@@ -1839,6 +1873,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ DA7F8CC01F87486800937243 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DA7F8CD61F87497F00937243 /* Mapbox.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
DA8847CE1CBAF91600AB86E3 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -2296,8 +2338,9 @@
isa = PBXGroup;
children = (
402E9DE21CD3A56500FD4519 /* Playground */,
- DA1DC94C1CB6C1C2006E619F /* Demo App */,
- DABCABA91CB80692000A7C39 /* Benchmarking App */,
+ DA1DC94C1CB6C1C2006E619F /* iOS Demo App */,
+ DABCABA91CB80692000A7C39 /* iOS Benchmarking App */,
+ DA7F8CC41F87486800937243 /* tvOS Demo App */,
DA8847D31CBAF91600AB86E3 /* SDK */,
DA2E88521CC036F400F24E7B /* SDK Tests */,
16376B301FFDB4B40000563E /* Integration Test Harness */,
@@ -2322,11 +2365,12 @@
16376B2F1FFDB4B40000563E /* Integration Test Harness.app */,
DA94B9711E766E6400190EF5 /* Mapbox.framework */,
DA94B9791E766E6400190EF5 /* tvtest.xctest */,
+ DA7F8CC31F87486800937243 /* Mapbox GL.app */,
);
name = Products;
sourceTree = "<group>";
};
- DA1DC94C1CB6C1C2006E619F /* Demo App */ = {
+ DA1DC94C1CB6C1C2006E619F /* iOS Demo App */ = {
isa = PBXGroup;
children = (
3E6465D52065767A00685536 /* LimeGreenStyleLayer.h */,
@@ -2367,7 +2411,7 @@
075AF843227B67C5008D7A4C /* MBXStateManager.h */,
075AF844227B67C6008D7A4C /* MBXStateManager.m */,
);
- name = "Demo App";
+ name = "iOS Demo App";
path = app;
sourceTree = "<group>";
};
@@ -2452,6 +2496,22 @@
path = test;
sourceTree = "<group>";
};
+ DA7F8CC41F87486800937243 /* tvOS Demo App */ = {
+ isa = PBXGroup;
+ children = (
+ DA7F8CC51F87486800937243 /* AppDelegate.h */,
+ DA7F8CC61F87486800937243 /* AppDelegate.m */,
+ DA7F8CC81F87486800937243 /* ViewController.h */,
+ DA7F8CC91F87486800937243 /* ViewController.m */,
+ DA7F8CCB1F87486800937243 /* Main.storyboard */,
+ DA7F8CCE1F87486800937243 /* Assets.xcassets */,
+ DA7F8CD01F87486800937243 /* Info.plist */,
+ DA7F8CD11F87486800937243 /* main.m */,
+ );
+ name = "tvOS Demo App";
+ path = tvosapp;
+ sourceTree = "<group>";
+ };
DA8847D31CBAF91600AB86E3 /* SDK */ = {
isa = PBXGroup;
children = (
@@ -2599,7 +2659,7 @@
path = ../../darwin/src;
sourceTree = "<group>";
};
- DABCABA91CB80692000A7C39 /* Benchmarking App */ = {
+ DABCABA91CB80692000A7C39 /* iOS Benchmarking App */ = {
isa = PBXGroup;
children = (
DABCABAD1CB80692000A7C39 /* MBXBenchAppDelegate.h */,
@@ -2614,7 +2674,7 @@
DABCABBB1CB80692000A7C39 /* Info.plist */,
DABCABAA1CB80692000A7C39 /* Supporting Files */,
);
- name = "Benchmarking App";
+ name = "iOS Benchmarking App";
path = benchmark;
sourceTree = "<group>";
};
@@ -3420,6 +3480,25 @@
productReference = DA2E88511CC036F400F24E7B /* test.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
+ DA7F8CC21F87486800937243 /* tvosapp */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = DA7F8CD31F87486800937243 /* Build configuration list for PBXNativeTarget "tvosapp" */;
+ buildPhases = (
+ DA7F8CBF1F87486800937243 /* Sources */,
+ DA7F8CC01F87486800937243 /* Frameworks */,
+ DA7F8CC11F87486800937243 /* Resources */,
+ DA7F8CDA1F87497F00937243 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ DA7F8CD91F87497F00937243 /* PBXTargetDependency */,
+ );
+ name = tvosapp;
+ productName = tvosapp;
+ productReference = DA7F8CC31F87486800937243 /* Mapbox GL.app */;
+ productType = "com.apple.product-type.application";
+ };
DA8847D11CBAF91600AB86E3 /* dynamic */ = {
isa = PBXNativeTarget;
buildConfigurationList = DA8847DD1CBAF91600AB86E3 /* Build configuration list for PBXNativeTarget "dynamic" */;
@@ -3535,7 +3614,7 @@
isa = PBXProject;
attributes = {
CLASSPREFIX = MBX;
- LastUpgradeCheck = 0930;
+ LastUpgradeCheck = 1010;
ORGANIZATIONNAME = Mapbox;
TargetAttributes = {
16376B061FFD9DAF0000563E = {
@@ -3558,6 +3637,11 @@
CreatedOnToolsVersion = 7.3;
LastSwiftMigration = 1010;
};
+ DA7F8CC21F87486800937243 = {
+ CreatedOnToolsVersion = 9.0;
+ DevelopmentTeam = GJZR2MEM28;
+ ProvisioningStyle = Automatic;
+ };
DA8847D11CBAF91600AB86E3 = {
CreatedOnToolsVersion = 7.3;
LastSwiftMigration = 0820;
@@ -3567,6 +3651,7 @@
};
DA94B9701E766E6400190EF5 = {
CreatedOnToolsVersion = 8.3;
+ DevelopmentTeam = GJZR2MEM28;
ProvisioningStyle = Automatic;
};
DA94B9781E766E6400190EF5 = {
@@ -3628,6 +3713,7 @@
DA2E88501CC036F400F24E7B /* test */,
16376B061FFD9DAF0000563E /* integration */,
16376B2E1FFDB4B40000563E /* Integration Test Harness */,
+ DA7F8CC21F87486800937243 /* tvosapp */,
DA94B9701E766E6400190EF5 /* tv */,
DA94B9781E766E6400190EF5 /* tvtest */,
);
@@ -3685,6 +3771,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ DA7F8CC11F87486800937243 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DA7F8CCF1F87486800937243 /* Assets.xcassets in Resources */,
+ DA7F8CCD1F87486800937243 /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
DA8847D01CBAF91600AB86E3 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -3903,6 +3998,16 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ DA7F8CBF1F87486800937243 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DA7F8CCA1F87486800937243 /* ViewController.m in Sources */,
+ DA7F8CD21F87486800937243 /* main.m in Sources */,
+ DA7F8CC71F87486800937243 /* AppDelegate.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
DA8847CD1CBAF91600AB86E3 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -4355,6 +4460,11 @@
target = DA8847D11CBAF91600AB86E3 /* dynamic */;
targetProxy = DA2E88571CC036F400F24E7B /* PBXContainerItemProxy */;
};
+ DA7F8CD91F87497F00937243 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = DA94B9701E766E6400190EF5 /* tv */;
+ targetProxy = DA7F8CD81F87497F00937243 /* PBXContainerItemProxy */;
+ };
DA8847D81CBAF91600AB86E3 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = DA8847D11CBAF91600AB86E3 /* dynamic */;
@@ -4414,6 +4524,14 @@
name = Localizable.strings;
sourceTree = "<group>";
};
+ DA7F8CCB1F87486800937243 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ DA7F8CCC1F87486800937243 /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "<group>";
+ };
DA89339F1CCC951200E68420 /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
@@ -5155,6 +5273,58 @@
};
name = Release;
};
+ DA7F8CD41F87486800937243 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ DEVELOPMENT_TEAM = GJZR2MEM28;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ INFOPLIST_FILE = tvosapp/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxGL;
+ PRODUCT_NAME = "Mapbox GL";
+ SDKROOT = appletvos;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ };
+ name = Debug;
+ };
+ DA7F8CD51F87486800937243 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ DEVELOPMENT_TEAM = GJZR2MEM28;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ INFOPLIST_FILE = tvosapp/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxGL;
+ PRODUCT_NAME = "Mapbox GL";
+ SDKROOT = appletvos;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ };
+ name = Release;
+ };
DA8847DB1CBAF91600AB86E3 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */;
@@ -5282,6 +5452,7 @@
CODE_SIGN_IDENTITY = "";
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
+ DEVELOPMENT_TEAM = GJZR2MEM28;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
@@ -5327,6 +5498,7 @@
CODE_SIGN_IDENTITY = "";
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
+ DEVELOPMENT_TEAM = GJZR2MEM28;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
@@ -5604,6 +5776,26 @@
};
name = RelWithDebInfo;
};
+ DADCD5D621CD6B02007DF3B2 /* RelWithDebInfo */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ DEVELOPMENT_TEAM = GJZR2MEM28;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ INFOPLIST_FILE = tvosapp/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxGL;
+ PRODUCT_NAME = "Mapbox GL";
+ SDKROOT = appletvos;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ };
+ name = RelWithDebInfo;
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@@ -5657,6 +5849,16 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = RelWithDebInfo;
};
+ DA7F8CD31F87486800937243 /* Build configuration list for PBXNativeTarget "tvosapp" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ DA7F8CD41F87486800937243 /* Debug */,
+ DA7F8CD51F87486800937243 /* Release */,
+ DADCD5D621CD6B02007DF3B2 /* RelWithDebInfo */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
DA8847DD1CBAF91600AB86E3 /* Build configuration list for PBXNativeTarget "dynamic" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme
index 7d59c4edee..1e866ce164 100644
--- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme
+++ b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0930"
+ LastUpgradeVersion = "1010"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/Integration Test Harness.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/Integration Test Harness.xcscheme
index ce264aa19a..862d400cea 100644
--- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/Integration Test Harness.xcscheme
+++ b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/Integration Test Harness.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0930"
+ LastUpgradeVersion = "1010"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/bench.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/bench.xcscheme
index 68e1c54ead..601c4ea2c7 100644
--- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/bench.xcscheme
+++ b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/bench.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0930"
+ LastUpgradeVersion = "1010"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic+static.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic+static.xcscheme
index 325b58d690..87887017dc 100644
--- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic+static.xcscheme
+++ b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic+static.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0930"
+ LastUpgradeVersion = "1010"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme
index 65d4b059e8..c5dbc6f0b3 100644
--- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme
+++ b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0930"
+ LastUpgradeVersion = "1010"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/iosapp.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/iosapp.xcscheme
index 1f8969faf7..f433aa9473 100644
--- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/iosapp.xcscheme
+++ b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/iosapp.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0930"
+ LastUpgradeVersion = "1010"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/static.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/static.xcscheme
index f88ec1a04c..db22891957 100644
--- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/static.xcscheme
+++ b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/static.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0930"
+ LastUpgradeVersion = "1010"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
diff --git a/platform/ios/tvosapp/AppDelegate.h b/platform/ios/tvosapp/AppDelegate.h
new file mode 100644
index 0000000000..3621106c7f
--- /dev/null
+++ b/platform/ios/tvosapp/AppDelegate.h
@@ -0,0 +1,9 @@
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+
+@end
+
diff --git a/platform/ios/tvosapp/AppDelegate.m b/platform/ios/tvosapp/AppDelegate.m
new file mode 100644
index 0000000000..63cf5bd0fc
--- /dev/null
+++ b/platform/ios/tvosapp/AppDelegate.m
@@ -0,0 +1,43 @@
+#import "AppDelegate.h"
+
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+ // Override point for customization after application launch.
+ return YES;
+}
+
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+ // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+ // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
+}
+
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+ // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+ // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+}
+
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+ // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
+}
+
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+ // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+}
+
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+ // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+}
+
+
+@end
diff --git a/platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json b/platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json
new file mode 100644
index 0000000000..db288f368f
--- /dev/null
+++ b/platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json
@@ -0,0 +1,32 @@
+{
+ "assets" : [
+ {
+ "size" : "1280x768",
+ "idiom" : "tv",
+ "filename" : "App Icon - App Store.imagestack",
+ "role" : "primary-app-icon"
+ },
+ {
+ "size" : "400x240",
+ "idiom" : "tv",
+ "filename" : "App Icon.imagestack",
+ "role" : "primary-app-icon"
+ },
+ {
+ "size" : "2320x720",
+ "idiom" : "tv",
+ "filename" : "Top Shelf Image Wide.imageset",
+ "role" : "top-shelf-image-wide"
+ },
+ {
+ "size" : "1920x720",
+ "idiom" : "tv",
+ "filename" : "Top Shelf Image.imageset",
+ "role" : "top-shelf-image"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json b/platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json
new file mode 100644
index 0000000000..16a370df01
--- /dev/null
+++ b/platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json
@@ -0,0 +1,16 @@
+{
+ "images" : [
+ {
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json b/platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json
new file mode 100644
index 0000000000..16a370df01
--- /dev/null
+++ b/platform/ios/tvosapp/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json
@@ -0,0 +1,16 @@
+{
+ "images" : [
+ {
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/platform/ios/tvosapp/Assets.xcassets/Contents.json b/platform/ios/tvosapp/Assets.xcassets/Contents.json
new file mode 100644
index 0000000000..da4a164c91
--- /dev/null
+++ b/platform/ios/tvosapp/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/platform/ios/tvosapp/Assets.xcassets/LaunchImage.launchimage/Contents.json b/platform/ios/tvosapp/Assets.xcassets/LaunchImage.launchimage/Contents.json
new file mode 100644
index 0000000000..d746a60900
--- /dev/null
+++ b/platform/ios/tvosapp/Assets.xcassets/LaunchImage.launchimage/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "orientation" : "landscape",
+ "idiom" : "tv",
+ "extent" : "full-screen",
+ "minimum-system-version" : "11.0",
+ "scale" : "2x"
+ },
+ {
+ "orientation" : "landscape",
+ "idiom" : "tv",
+ "extent" : "full-screen",
+ "minimum-system-version" : "9.0",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/platform/ios/tvosapp/Base.lproj/Main.storyboard b/platform/ios/tvosapp/Base.lproj/Main.storyboard
new file mode 100644
index 0000000000..d215136351
--- /dev/null
+++ b/platform/ios/tvosapp/Base.lproj/Main.storyboard
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder.AppleTV.Storyboard" version="3.0" toolsVersion="14460.31" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
+ <device id="appleTV" orientation="landscape">
+ <adaptation id="light"/>
+ </device>
+ <dependencies>
+ <deployment identifier="tvOS"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--Delegate-->
+ <scene sceneID="tne-QT-ifu">
+ <objects>
+ <viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
+ <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+ <rect key="frame" x="0.0" y="0.0" width="1920" height="1080"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3pC-z4-awr" customClass="MGLMapView">
+ <rect key="frame" x="110" y="68" width="1700" height="944"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <connections>
+ <outlet property="delegate" destination="BYZ-38-t0r" id="R5G-s2-6ua"/>
+ </connections>
+ </view>
+ </subviews>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="3pC-z4-awr" firstAttribute="trailing" secondItem="8bC-Xf-vdC" secondAttribute="trailingMargin" id="KxV-kQ-ATN"/>
+ <constraint firstItem="3pC-z4-awr" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" id="Q2a-OV-H2O"/>
+ <constraint firstItem="3pC-z4-awr" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" constant="8" symbolic="YES" id="pKm-tj-fRT"/>
+ <constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="3pC-z4-awr" secondAttribute="bottom" constant="8" symbolic="YES" id="rJv-fy-Oll"/>
+ </constraints>
+ <viewLayoutGuide key="safeArea" id="wu6-TO-1qx"/>
+ </view>
+ <connections>
+ <outlet property="mapView" destination="3pC-z4-awr" id="MdJ-6e-vz6"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+ </objects>
+ </scene>
+ </scenes>
+</document>
diff --git a/platform/ios/tvosapp/Info.plist b/platform/ios/tvosapp/Info.plist
new file mode 100644
index 0000000000..65017a1a07
--- /dev/null
+++ b/platform/ios/tvosapp/Info.plist
@@ -0,0 +1,36 @@
+<?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>$(DEVELOPMENT_LANGUAGE)</string>
+ <key>CFBundleDisplayName</key>
+ <string>$(PRODUCT_NAME)</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>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>0.0.1</string>
+ <key>CFBundleVersion</key>
+ <string>7877</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>NSHumanReadableCopyright</key>
+ <string>© 2017 Mapbox</string>
+ <key>UIMainStoryboardFile</key>
+ <string>Main</string>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>arm64</string>
+ </array>
+ <key>UIUserInterfaceStyle</key>
+ <string>Automatic</string>
+</dict>
+</plist>
diff --git a/platform/ios/tvosapp/ViewController.h b/platform/ios/tvosapp/ViewController.h
new file mode 100644
index 0000000000..a79652b566
--- /dev/null
+++ b/platform/ios/tvosapp/ViewController.h
@@ -0,0 +1,7 @@
+#import <UIKit/UIKit.h>
+
+@interface ViewController : UIViewController
+
+
+@end
+
diff --git a/platform/ios/tvosapp/ViewController.m b/platform/ios/tvosapp/ViewController.m
new file mode 100644
index 0000000000..a2eb306a0f
--- /dev/null
+++ b/platform/ios/tvosapp/ViewController.m
@@ -0,0 +1,31 @@
+#import "ViewController.h"
+
+#import <Mapbox/Mapbox.h>
+
+@interface ViewController () <MGLMapViewDelegate>
+
+@property (weak, nonatomic) IBOutlet MGLMapView *mapView;
+
+@end
+
+@implementation ViewController
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ // Do any additional setup after loading the view, typically from a nib.
+}
+
+
+- (void)didReceiveMemoryWarning {
+ [super didReceiveMemoryWarning];
+ // Dispose of any resources that can be recreated.
+}
+
+
+#pragma mark MGLMapViewDelegate methods
+
+- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style {
+ [style localizeLabelsIntoLocale:nil];
+}
+
+@end
diff --git a/platform/ios/tvosapp/main.m b/platform/ios/tvosapp/main.m
new file mode 100644
index 0000000000..81e84cbb78
--- /dev/null
+++ b/platform/ios/tvosapp/main.m
@@ -0,0 +1,8 @@
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}