ソースを参照

Added Framework target for tvOS. Added sample app for tvOS.

Damian Kołakowski 10 年 前
コミット
c555f97539
26 ファイル変更727 行追加4 行削除
  1. 307 4
      Swifter.xcodeproj/project.pbxproj
  2. 35 0
      Swifter.xcodeproj/xcuserdata/damiankolakowski.xcuserdatad/xcschemes/xcschememanagement.plist
  3. 47 0
      SwifterSampletvOS/AppDelegate.swift
  4. 12 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
  5. 6 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json
  6. 17 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json
  7. 12 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
  8. 6 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json
  9. 12 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
  10. 6 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json
  11. 12 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
  12. 6 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json
  13. 17 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json
  14. 12 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
  15. 6 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json
  16. 12 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
  17. 6 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json
  18. 26 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json
  19. 12 0
      SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json
  20. 6 0
      SwifterSampletvOS/Assets.xcassets/Contents.json
  21. 15 0
      SwifterSampletvOS/Assets.xcassets/LaunchImage.launchimage/Contents.json
  22. 25 0
      SwifterSampletvOS/Base.lproj/Main.storyboard
  23. 32 0
      SwifterSampletvOS/Info.plist
  24. 35 0
      SwifterSampletvOS/ViewController.swift
  25. 26 0
      SwiftertvOS/Info.plist
  26. 19 0
      SwiftertvOS/SwiftertvOS.h

+ 307 - 4
Swifter.xcodeproj/project.pbxproj

@@ -20,7 +20,6 @@
 		7C284DAA1C80CDB100106AA7 /* sqlite.c in Sources */ = {isa = PBXBuildFile; fileRef = 7C284DA71C80CDB100106AA7 /* sqlite.c */; };
 		7C284DAB1C80CDB100106AA7 /* sqlite.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C284DA81C80CDB100106AA7 /* sqlite.h */; };
 		7C284DAC1C80CDB100106AA7 /* sqlite.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C284DA81C80CDB100106AA7 /* sqlite.h */; };
-		7C2BEC781C518B7C00B8EE90 /* String+SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2BEC771C518B7C00B8EE90 /* String+SHA1.swift */; };
 		7C2BEC791C5195EE00B8EE90 /* String+SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2BEC771C518B7C00B8EE90 /* String+SHA1.swift */; };
 		7C2BEC7A1C5195F200B8EE90 /* String+SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2BEC771C518B7C00B8EE90 /* String+SHA1.swift */; };
 		7C4785E91C71D15600A9FE73 /* SwifterTestsWebSocketSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C4785E81C71D15600A9FE73 /* SwifterTestsWebSocketSession.swift */; };
@@ -59,6 +58,31 @@
 		7CC0F8CA1C50136B00B65A94 /* HttpHandlers+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0F8C81C50136B00B65A94 /* HttpHandlers+Files.swift */; };
 		7CC0F8CC1C5014A200B65A94 /* HttpHandlers+WebSockets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0F8CB1C5014A200B65A94 /* HttpHandlers+WebSockets.swift */; };
 		7CC0F8CD1C5014A200B65A94 /* HttpHandlers+WebSockets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0F8CB1C5014A200B65A94 /* HttpHandlers+WebSockets.swift */; };
+		7CCD1B681C8F7CEC0016D664 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD1B671C8F7CEC0016D664 /* AppDelegate.swift */; };
+		7CCD1B6A1C8F7CEC0016D664 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD1B691C8F7CEC0016D664 /* ViewController.swift */; };
+		7CCD1B6D1C8F7CEC0016D664 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7CCD1B6B1C8F7CEC0016D664 /* Main.storyboard */; };
+		7CCD1B6F1C8F7CEC0016D664 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7CCD1B6E1C8F7CEC0016D664 /* Assets.xcassets */; };
+		7CCD1B851C8F7E5C0016D664 /* DemoServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6941C2619E100AEF6CA /* DemoServer.swift */; };
+		7CCD1B861C8F7E5C0016D664 /* HttpHandlers+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0F8C81C50136B00B65A94 /* HttpHandlers+Files.swift */; };
+		7CCD1B871C8F7E5C0016D664 /* HttpHandlers+WebSockets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0F8CB1C5014A200B65A94 /* HttpHandlers+WebSockets.swift */; };
+		7CCD1B881C8F7E5C0016D664 /* HttpHandlers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6951C2619E100AEF6CA /* HttpHandlers.swift */; };
+		7CCD1B891C8F7E5C0016D664 /* HttpParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6961C2619E100AEF6CA /* HttpParser.swift */; };
+		7CCD1B8A1C8F7E5C0016D664 /* HttpRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6971C2619E100AEF6CA /* HttpRequest.swift */; };
+		7CCD1B8B1C8F7E5C0016D664 /* HttpResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6981C2619E100AEF6CA /* HttpResponse.swift */; };
+		7CCD1B8C1C8F7E5C0016D664 /* HttpRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6991C2619E100AEF6CA /* HttpRouter.swift */; };
+		7CCD1B8D1C8F7E5C0016D664 /* HttpServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69A1C2619E100AEF6CA /* HttpServer.swift */; };
+		7CCD1B8E1C8F7E5C0016D664 /* HttpServerIO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69B1C2619E100AEF6CA /* HttpServerIO.swift */; };
+		7CCD1B8F1C8F7E5C0016D664 /* Socket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69C1C2619E100AEF6CA /* Socket.swift */; };
+		7CCD1B901C8F7E5C0016D664 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD87861C676EE50068099B /* File.swift */; };
+		7CCD1B911C8F7E5C0016D664 /* String+Misc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69D1C2619E100AEF6CA /* String+Misc.swift */; };
+		7CCD1B921C8F7E5C0016D664 /* String+SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2BEC771C518B7C00B8EE90 /* String+SHA1.swift */; };
+		7CCD1B931C8F7E5C0016D664 /* String+BASE64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C1A2BFA1C5605F50026D3BF /* String+BASE64.swift */; };
+		7CCD1B9C1C8F7F6E0016D664 /* sqlite-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CCD1B9B1C8F7F6E0016D664 /* sqlite-Bridging-Header.h */; };
+		7CCD1B9D1C8F7F6E0016D664 /* sqlite-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CCD1B9B1C8F7F6E0016D664 /* sqlite-Bridging-Header.h */; };
+		7CCD1B9F1C8F82B60016D664 /* file.html in Resources */ = {isa = PBXBuildFile; fileRef = 7C7488771C1DA07300CBCD77 /* file.html */; };
+		7CCD1BA01C8F82B60016D664 /* login.html in Resources */ = {isa = PBXBuildFile; fileRef = 98630C061A1C9A9D00478D08 /* login.html */; };
+		7CCD1BA11C8F82B60016D664 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 7CB102DF1A17381D00CBA3B4 /* logo.png */; };
+		7CCD1BA21C8F82B60016D664 /* test.json in Resources */ = {isa = PBXBuildFile; fileRef = 7CA4815719A2EF2B0030B30D /* test.json */; };
 		7CCD87611C66099B0068099B /* Swifter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AE893E71C05127900A29F63 /* Swifter.framework */; };
 		7CCD87701C660B250068099B /* SwifterTestsHttpParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD876D1C660B250068099B /* SwifterTestsHttpParser.swift */; };
 		7CCD87721C660B250068099B /* SwifterTestsStringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD876E1C660B250068099B /* SwifterTestsStringExtensions.swift */; };
@@ -88,6 +112,13 @@
 			remoteGlobalIDString = 7AE893E61C05127900A29F63;
 			remoteInfo = SwifteriOS;
 		};
+		7CCD1B991C8F7E820016D664 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 7C839B6619422CFF003A6950 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 7CCD1B7C1C8F7E520016D664;
+			remoteInfo = SwiftertvOS;
+		};
 		7CCD87621C66099B0068099B /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 7C839B6619422CFF003A6950 /* Project object */;
@@ -129,7 +160,6 @@
 		7AE893FD1C0512C400A29F63 /* SwifterMac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwifterMac.h; sourceTree = "<group>"; };
 		7AE893FF1C0512C400A29F63 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		7AE8940C1C05151100A29F63 /* Launch Screen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
-		7C1043DF1C80D3A900A8DD6A /* sqlite-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "sqlite-Bridging-Header.h"; sourceTree = "<group>"; };
 		7C1043E01C80D61F00A8DD6A /* SQLite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SQLite.swift; sourceTree = "<group>"; };
 		7C13B57B1C7B069500556443 /* SwifterTestsSQLite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwifterTestsSQLite.swift; sourceTree = "<group>"; };
 		7C1A2BFA1C5605F50026D3BF /* String+BASE64.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+BASE64.swift"; sourceTree = "<group>"; };
@@ -155,6 +185,16 @@
 		7CB102DF1A17381D00CBA3B4 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = "<group>"; };
 		7CC0F8C81C50136B00B65A94 /* HttpHandlers+Files.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "HttpHandlers+Files.swift"; sourceTree = "<group>"; };
 		7CC0F8CB1C5014A200B65A94 /* HttpHandlers+WebSockets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "HttpHandlers+WebSockets.swift"; sourceTree = "<group>"; };
+		7CCD1B651C8F7CEC0016D664 /* SwifterSampletvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwifterSampletvOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		7CCD1B671C8F7CEC0016D664 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
+		7CCD1B691C8F7CEC0016D664 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
+		7CCD1B6C1C8F7CEC0016D664 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		7CCD1B6E1C8F7CEC0016D664 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		7CCD1B701C8F7CEC0016D664 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		7CCD1B7D1C8F7E520016D664 /* SwiftertvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftertvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		7CCD1B7F1C8F7E520016D664 /* SwiftertvOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftertvOS.h; sourceTree = "<group>"; };
+		7CCD1B811C8F7E520016D664 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		7CCD1B9B1C8F7F6E0016D664 /* sqlite-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "sqlite-Bridging-Header.h"; sourceTree = "<group>"; };
 		7CCD875C1C66099B0068099B /* SwifteriOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwifteriOSTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		7CCD87601C66099B0068099B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		7CCD876D1C660B250068099B /* SwifterTestsHttpParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwifterTestsHttpParser.swift; sourceTree = "<group>"; };
@@ -200,6 +240,20 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		7CCD1B621C8F7CEC0016D664 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		7CCD1B791C8F7E520016D664 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		7CCD87591C66099B0068099B /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -246,6 +300,8 @@
 				7CCD876C1C660B250068099B /* SwifterTestsCommon */,
 				7CCD875D1C66099B0068099B /* SwifteriOSTests */,
 				7CCD877A1C660EA30068099B /* SwifterOSXTests */,
+				7CCD1B661C8F7CEC0016D664 /* SwifterSampletvOS */,
+				7CCD1B7E1C8F7E520016D664 /* SwiftertvOS */,
 				7C839B6F19422CFF003A6950 /* Products */,
 				7AE893FC1C0512C400A29F63 /* SwifterMac */,
 				7AE893E81C05127900A29F63 /* SwifteriOS */,
@@ -263,6 +319,8 @@
 				7AE893FB1C0512C400A29F63 /* Swifter.framework */,
 				7CCD875C1C66099B0068099B /* SwifteriOSTests.xctest */,
 				7CCD87791C660EA30068099B /* SwifterOSXTests.xctest */,
+				7CCD1B651C8F7CEC0016D664 /* SwifterSampletvOS.app */,
+				7CCD1B7D1C8F7E520016D664 /* SwiftertvOS.framework */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -287,6 +345,27 @@
 			path = Resources;
 			sourceTree = "<group>";
 		};
+		7CCD1B661C8F7CEC0016D664 /* SwifterSampletvOS */ = {
+			isa = PBXGroup;
+			children = (
+				7CCD1B671C8F7CEC0016D664 /* AppDelegate.swift */,
+				7CCD1B691C8F7CEC0016D664 /* ViewController.swift */,
+				7CCD1B6B1C8F7CEC0016D664 /* Main.storyboard */,
+				7CCD1B6E1C8F7CEC0016D664 /* Assets.xcassets */,
+				7CCD1B701C8F7CEC0016D664 /* Info.plist */,
+			);
+			path = SwifterSampletvOS;
+			sourceTree = "<group>";
+		};
+		7CCD1B7E1C8F7E520016D664 /* SwiftertvOS */ = {
+			isa = PBXGroup;
+			children = (
+				7CCD1B7F1C8F7E520016D664 /* SwiftertvOS.h */,
+				7CCD1B811C8F7E520016D664 /* Info.plist */,
+			);
+			path = SwiftertvOS;
+			sourceTree = "<group>";
+		};
 		7CCD875D1C66099B0068099B /* SwifteriOSTests */ = {
 			isa = PBXGroup;
 			children = (
@@ -348,7 +427,7 @@
 				7C1043E01C80D61F00A8DD6A /* SQLite.swift */,
 				7C284DA71C80CDB100106AA7 /* sqlite.c */,
 				7C284DA81C80CDB100106AA7 /* sqlite.h */,
-				7C1043DF1C80D3A900A8DD6A /* sqlite-Bridging-Header.h */,
+				7CCD1B9B1C8F7F6E0016D664 /* sqlite-Bridging-Header.h */,
 			);
 			path = Sources;
 			sourceTree = "<group>";
@@ -362,6 +441,7 @@
 			files = (
 				7C284DAB1C80CDB100106AA7 /* sqlite.h in Headers */,
 				7AE893EA1C05127900A29F63 /* SwifteriOS.h in Headers */,
+				7CCD1B9C1C8F7F6E0016D664 /* sqlite-Bridging-Header.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -371,6 +451,14 @@
 			files = (
 				7C284DAC1C80CDB100106AA7 /* sqlite.h in Headers */,
 				7AE893FE1C0512C400A29F63 /* SwifterMac.h in Headers */,
+				7CCD1B9D1C8F7F6E0016D664 /* sqlite-Bridging-Header.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		7CCD1B7A1C8F7E520016D664 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -449,6 +537,42 @@
 			productReference = 7CA4813B19A2EA8D0030B30D /* SwifterSampleOSX */;
 			productType = "com.apple.product-type.tool";
 		};
+		7CCD1B641C8F7CEC0016D664 /* SwifterSampletvOS */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 7CCD1B711C8F7CEC0016D664 /* Build configuration list for PBXNativeTarget "SwifterSampletvOS" */;
+			buildPhases = (
+				7CCD1B611C8F7CEC0016D664 /* Sources */,
+				7CCD1B621C8F7CEC0016D664 /* Frameworks */,
+				7CCD1B631C8F7CEC0016D664 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				7CCD1B9A1C8F7E820016D664 /* PBXTargetDependency */,
+			);
+			name = SwifterSampletvOS;
+			productName = SwifterSampletvOS;
+			productReference = 7CCD1B651C8F7CEC0016D664 /* SwifterSampletvOS.app */;
+			productType = "com.apple.product-type.application";
+		};
+		7CCD1B7C1C8F7E520016D664 /* SwiftertvOS */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 7CCD1B821C8F7E520016D664 /* Build configuration list for PBXNativeTarget "SwiftertvOS" */;
+			buildPhases = (
+				7CCD1B781C8F7E520016D664 /* Sources */,
+				7CCD1B791C8F7E520016D664 /* Frameworks */,
+				7CCD1B7A1C8F7E520016D664 /* Headers */,
+				7CCD1B7B1C8F7E520016D664 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = SwiftertvOS;
+			productName = SwiftertvOS;
+			productReference = 7CCD1B7D1C8F7E520016D664 /* SwiftertvOS.framework */;
+			productType = "com.apple.product-type.framework";
+		};
 		7CCD875B1C66099B0068099B /* SwifteriOSTests */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = 7CCD87641C66099B0068099B /* Build configuration list for PBXNativeTarget "SwifteriOSTests" */;
@@ -507,6 +631,12 @@
 					7CA4813A19A2EA8D0030B30D = {
 						CreatedOnToolsVersion = 6.0;
 					};
+					7CCD1B641C8F7CEC0016D664 = {
+						CreatedOnToolsVersion = 7.2.1;
+					};
+					7CCD1B7C1C8F7E520016D664 = {
+						CreatedOnToolsVersion = 7.2.1;
+					};
 					7CCD875B1C66099B0068099B = {
 						CreatedOnToolsVersion = 7.2;
 					};
@@ -529,9 +659,11 @@
 			projectRoot = "";
 			targets = (
 				7C839B6D19422CFF003A6950 /* SwifterSampleiOS */,
+				7CCD1B641C8F7CEC0016D664 /* SwifterSampletvOS */,
 				7CA4813A19A2EA8D0030B30D /* SwifterSampleOSX */,
 				7AE893E61C05127900A29F63 /* SwifteriOS */,
 				7AE893FA1C0512C400A29F63 /* SwifterMac */,
+				7CCD1B7C1C8F7E520016D664 /* SwiftertvOS */,
 				7CCD875B1C66099B0068099B /* SwifteriOSTests */,
 				7CCD87781C660EA30068099B /* SwifterOSXTests */,
 			);
@@ -567,6 +699,26 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		7CCD1B631C8F7CEC0016D664 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				7CCD1B9F1C8F82B60016D664 /* file.html in Resources */,
+				7CCD1BA01C8F82B60016D664 /* login.html in Resources */,
+				7CCD1BA11C8F82B60016D664 /* logo.png in Resources */,
+				7CCD1BA21C8F82B60016D664 /* test.json in Resources */,
+				7CCD1B6F1C8F7CEC0016D664 /* Assets.xcassets in Resources */,
+				7CCD1B6D1C8F7CEC0016D664 /* Main.storyboard in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		7CCD1B7B1C8F7E520016D664 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		7CCD875A1C66099B0068099B /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -638,7 +790,6 @@
 			files = (
 				7C73C6921C26179C00AEF6CA /* AppDelegate.swift in Sources */,
 				7CDAB8161BE2A1D400C8A977 /* ViewController.swift in Sources */,
-				7C2BEC781C518B7C00B8EE90 /* String+SHA1.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -651,6 +802,37 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		7CCD1B611C8F7CEC0016D664 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				7CCD1B6A1C8F7CEC0016D664 /* ViewController.swift in Sources */,
+				7CCD1B681C8F7CEC0016D664 /* AppDelegate.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		7CCD1B781C8F7E520016D664 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				7CCD1B851C8F7E5C0016D664 /* DemoServer.swift in Sources */,
+				7CCD1B861C8F7E5C0016D664 /* HttpHandlers+Files.swift in Sources */,
+				7CCD1B871C8F7E5C0016D664 /* HttpHandlers+WebSockets.swift in Sources */,
+				7CCD1B881C8F7E5C0016D664 /* HttpHandlers.swift in Sources */,
+				7CCD1B891C8F7E5C0016D664 /* HttpParser.swift in Sources */,
+				7CCD1B8A1C8F7E5C0016D664 /* HttpRequest.swift in Sources */,
+				7CCD1B8B1C8F7E5C0016D664 /* HttpResponse.swift in Sources */,
+				7CCD1B8C1C8F7E5C0016D664 /* HttpRouter.swift in Sources */,
+				7CCD1B8D1C8F7E5C0016D664 /* HttpServer.swift in Sources */,
+				7CCD1B8E1C8F7E5C0016D664 /* HttpServerIO.swift in Sources */,
+				7CCD1B8F1C8F7E5C0016D664 /* Socket.swift in Sources */,
+				7CCD1B901C8F7E5C0016D664 /* File.swift in Sources */,
+				7CCD1B911C8F7E5C0016D664 /* String+Misc.swift in Sources */,
+				7CCD1B921C8F7E5C0016D664 /* String+SHA1.swift in Sources */,
+				7CCD1B931C8F7E5C0016D664 /* String+BASE64.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		7CCD87581C66099B0068099B /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -686,6 +868,11 @@
 			target = 7AE893E61C05127900A29F63 /* SwifteriOS */;
 			targetProxy = 7C73C6BF1C261AA700AEF6CA /* PBXContainerItemProxy */;
 		};
+		7CCD1B9A1C8F7E820016D664 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 7CCD1B7C1C8F7E520016D664 /* SwiftertvOS */;
+			targetProxy = 7CCD1B991C8F7E820016D664 /* PBXContainerItemProxy */;
+		};
 		7CCD87631C66099B0068099B /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			target = 7AE893E61C05127900A29F63 /* SwifteriOS */;
@@ -699,6 +886,14 @@
 /* End PBXTargetDependency section */
 
 /* Begin PBXVariantGroup section */
+		7CCD1B6B1C8F7CEC0016D664 /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				7CCD1B6C1C8F7CEC0016D664 /* Base */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
 		7CDAB80D1BE2A1D400C8A977 /* Main.storyboard */ = {
 			isa = PBXVariantGroup;
 			children = (
@@ -970,6 +1165,98 @@
 			};
 			name = Release;
 		};
+		7CCD1B721C8F7CEC0016D664 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				GCC_NO_COMMON_BLOCKS = YES;
+				INFOPLIST_FILE = SwifterSampletvOS/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				MTL_ENABLE_DEBUG_INFO = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = pl.kolakowski.SwifterSampletvOS;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = appletvos;
+				TARGETED_DEVICE_FAMILY = 3;
+				TVOS_DEPLOYMENT_TARGET = 9.1;
+			};
+			name = Debug;
+		};
+		7CCD1B731C8F7CEC0016D664 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_NO_COMMON_BLOCKS = YES;
+				INFOPLIST_FILE = SwifterSampletvOS/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = pl.kolakowski.SwifterSampletvOS;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = appletvos;
+				TARGETED_DEVICE_FAMILY = 3;
+				TVOS_DEPLOYMENT_TARGET = 9.1;
+			};
+			name = Release;
+		};
+		7CCD1B831C8F7E520016D664 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CURRENT_PROJECT_VERSION = 1;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				DEFINES_MODULE = YES;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				DYLIB_INSTALL_NAME_BASE = "@rpath";
+				GCC_NO_COMMON_BLOCKS = YES;
+				INFOPLIST_FILE = SwiftertvOS/Info.plist;
+				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				MTL_ENABLE_DEBUG_INFO = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = pl.kolakowski.SwiftertvOS;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = appletvos;
+				SKIP_INSTALL = YES;
+				SWIFT_OBJC_BRIDGING_HEADER = "";
+				TARGETED_DEVICE_FAMILY = 3;
+				TVOS_DEPLOYMENT_TARGET = 9.1;
+				VERSIONING_SYSTEM = "apple-generic";
+				VERSION_INFO_PREFIX = "";
+			};
+			name = Debug;
+		};
+		7CCD1B841C8F7E520016D664 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				CURRENT_PROJECT_VERSION = 1;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				DEFINES_MODULE = YES;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				DYLIB_INSTALL_NAME_BASE = "@rpath";
+				GCC_NO_COMMON_BLOCKS = YES;
+				INFOPLIST_FILE = SwiftertvOS/Info.plist;
+				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = pl.kolakowski.SwiftertvOS;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = appletvos;
+				SKIP_INSTALL = YES;
+				SWIFT_OBJC_BRIDGING_HEADER = "";
+				TARGETED_DEVICE_FAMILY = 3;
+				TVOS_DEPLOYMENT_TARGET = 9.1;
+				VERSIONING_SYSTEM = "apple-generic";
+				VERSION_INFO_PREFIX = "";
+			};
+			name = Release;
+		};
 		7CCD87651C66099B0068099B /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
@@ -1082,6 +1369,22 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		7CCD1B711C8F7CEC0016D664 /* Build configuration list for PBXNativeTarget "SwifterSampletvOS" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				7CCD1B721C8F7CEC0016D664 /* Debug */,
+				7CCD1B731C8F7CEC0016D664 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+		};
+		7CCD1B821C8F7E520016D664 /* Build configuration list for PBXNativeTarget "SwiftertvOS" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				7CCD1B831C8F7E520016D664 /* Debug */,
+				7CCD1B841C8F7E520016D664 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+		};
 		7CCD87641C66099B0068099B /* Build configuration list for PBXNativeTarget "SwifteriOSTests" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (

+ 35 - 0
Swifter.xcodeproj/xcuserdata/damiankolakowski.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -24,6 +24,11 @@
 			<key>orderHint</key>
 			<integer>2</integer>
 		</dict>
+		<key>SwifterSampletvOS.xcscheme</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>7</integer>
+		</dict>
 		<key>SwifteriOS.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
@@ -34,6 +39,11 @@
 			<key>orderHint</key>
 			<integer>5</integer>
 		</dict>
+		<key>SwiftertvOS.xcscheme</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>6</integer>
+		</dict>
 	</dict>
 	<key>SuppressBuildableAutocreation</key>
 	<dict>
@@ -67,6 +77,31 @@
 			<key>primary</key>
 			<true/>
 		</dict>
+		<key>7CCD1B111C8F7B100016D664</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+		<key>7CCD1B251C8F7B9E0016D664</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+		<key>7CCD1B441C8F7C580016D664</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+		<key>7CCD1B641C8F7CEC0016D664</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+		<key>7CCD1B7C1C8F7E520016D664</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
 		<key>7CCD875B1C66099B0068099B</key>
 		<dict>
 			<key>primary</key>

+ 47 - 0
SwifterSampletvOS/AppDelegate.swift

@@ -0,0 +1,47 @@
+//
+//  AppDelegate.swift
+//  SwifterSampletvOS
+//
+//  Created by Damian Kolakowski on 08/03/16.
+//  Copyright © 2016 Damian Kołakowski. All rights reserved.
+//
+
+import Foundation
+import UIKit
+
+@UIApplicationMain
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+    var window: UIWindow?
+
+
+    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
+        
+        return true
+    }
+
+    func applicationWillResignActive(application: UIApplication) {
+        // 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.
+    }
+
+    func applicationDidEnterBackground(application: UIApplication) {
+        // 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.
+    }
+
+    func applicationWillEnterForeground(application: UIApplication) {
+        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
+    }
+
+    func applicationDidBecomeActive(application: UIApplication) {
+        // 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.
+    }
+
+    func applicationWillTerminate(application: UIApplication) {
+        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+    }
+
+
+}
+

+ 12 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "tv",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 6 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 17 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json

@@ -0,0 +1,17 @@
+{
+  "layers" : [
+    {
+      "filename" : "Front.imagestacklayer"
+    },
+    {
+      "filename" : "Middle.imagestacklayer"
+    },
+    {
+      "filename" : "Back.imagestacklayer"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 12 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "tv",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 6 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 12 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "tv",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 6 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 12 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "tv",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 6 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 17 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json

@@ -0,0 +1,17 @@
+{
+  "layers" : [
+    {
+      "filename" : "Front.imagestacklayer"
+    },
+    {
+      "filename" : "Middle.imagestacklayer"
+    },
+    {
+      "filename" : "Back.imagestacklayer"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 12 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "tv",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 6 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 12 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "tv",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 6 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 26 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json

@@ -0,0 +1,26 @@
+{
+  "assets" : [
+    {
+      "size" : "1280x768",
+      "idiom" : "tv",
+      "filename" : "App Icon - Large.imagestack",
+      "role" : "primary-app-icon"
+    },
+    {
+      "size" : "400x240",
+      "idiom" : "tv",
+      "filename" : "App Icon - Small.imagestack",
+      "role" : "primary-app-icon"
+    },
+    {
+      "size" : "1920x720",
+      "idiom" : "tv",
+      "filename" : "Top Shelf Image.imageset",
+      "role" : "top-shelf-image"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 12 - 0
SwifterSampletvOS/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "idiom" : "tv",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 6 - 0
SwifterSampletvOS/Assets.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 15 - 0
SwifterSampletvOS/Assets.xcassets/LaunchImage.launchimage/Contents.json

@@ -0,0 +1,15 @@
+{
+  "images" : [
+    {
+      "orientation" : "landscape",
+      "idiom" : "tv",
+      "extent" : "full-screen",
+      "minimum-system-version" : "9.0",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 25 - 0
SwifterSampletvOS/Base.lproj/Main.storyboard

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder.AppleTV.Storyboard" version="3.0" toolsVersion="6185.10" systemVersion="14A360a" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="NO" initialViewController="BYZ-38-t0r">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6181.2"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="tne-QT-ifu">
+            <objects>
+                <viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" 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="480" height="480"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+            </objects>
+        </scene>
+    </scenes>
+</document>

+ 32 - 0
SwifterSampletvOS/Info.plist

@@ -0,0 +1,32 @@
+<?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>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UIMainStoryboardFile</key>
+	<string>Main</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>arm64</string>
+	</array>
+</dict>
+</plist>

+ 35 - 0
SwifterSampletvOS/ViewController.swift

@@ -0,0 +1,35 @@
+//
+//  ViewController.swift
+//  SwifterSampletvOS
+//
+//  Created by Damian Kolakowski on 08/03/16.
+//  Copyright © 2016 Damian Kołakowski. All rights reserved.
+//
+
+import UIKit
+import SwiftertvOS
+
+class ViewController: UIViewController {
+
+    private var server: HttpServer?
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        do {
+            let server = demoServer(NSBundle.mainBundle().resourcePath!)
+            try server.start(9080)
+            print("Server has started ( port = 9080 ). Try to connect now...")
+            self.server = server
+        } catch {
+            print("Server start error: \(error)")
+        }
+    }
+
+    override func didReceiveMemoryWarning() {
+        super.didReceiveMemoryWarning()
+        // Dispose of any resources that can be recreated.
+    }
+
+
+}
+

+ 26 - 0
SwiftertvOS/Info.plist

@@ -0,0 +1,26 @@
+<?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>FMWK</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<key>NSPrincipalClass</key>
+	<string></string>
+</dict>
+</plist>

+ 19 - 0
SwiftertvOS/SwiftertvOS.h

@@ -0,0 +1,19 @@
+//
+//  SwiftertvOS.h
+//  SwiftertvOS
+//
+//  Created by Damian Kolakowski on 08/03/16.
+//  Copyright © 2016 Damian Kołakowski. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+//! Project version number for SwiftertvOS.
+FOUNDATION_EXPORT double SwiftertvOSVersionNumber;
+
+//! Project version string for SwiftertvOS.
+FOUNDATION_EXPORT const unsigned char SwiftertvOSVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <SwiftertvOS/PublicHeader.h>
+
+