Apple has released it\'s SDK for apple tv yesterday.
Most apps for TVs are web based (html, javascript and css) and I would like to port an existing tv web app to th
If you are looking to port your existing application to tvOS, you might want to consider atvjs framework. It would give you the familiar experience of developing any front-end heavy application. You may still need to modify your existing web app to suite the framework, however it would be a much less painful process than using the sample architecture provided by Apple.
To get started, refer to https://github.com/emadalam/tvml-catalog-using-atvjs which is a port of the original sample code, re-written using atvjs framework.
Unfortunately, UIWebView is not a supported class in tvOS. Niether is WKWebView. You can see a full list of the APIs supported and removed in iOS 9 and tvOS here. If you scroll down to the bottom of the first section you'll see WebKit says removed.
UIWebView
is part of the tvOS, although the documentation looks a bit limited right now (see here). You can also find the .h file here: /Applications/Xcode-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIWebView.h
WebKit framework doesnt seem to be included.
Update:
Found in UIWebView.h:
NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UIWebView : UIView <NSCoding, UIScrollViewDelegate>
Taking this into account it might be not available in tvOS :(
EDIT: Before people keeps downvoting, I'm going to make clear that the UIWebView is present on the apple TV, but it's PROHIBITED to use it, so, the only real way of loading web apps on an apple TV is creating them with TVML and TVJS
If you want to use an UIWebView (as proof of concept) you can do this:
Objective-c
Class webviewClass = NSClassFromString(@"UIWebView");
id webview = [[webviewClass alloc] initWithFrame:self.view.frame];
NSURL * url = [NSURL URLWithString:@"https://www.google.com"];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
[webview loadRequest:request];
[self.view addSubview:webview];
swift
let webViewClass : AnyObject.Type = NSClassFromString("UIWebView")!
let webViewObject : NSObject.Type = webViewClass as! NSObject.Type
let webview: AnyObject = webViewObject.init()
let url = NSURL(string: "https://www.google.com")
let request = NSURLRequest(URL: url!)
webview.loadRequest(request)
let uiview = webview as! UIView
uiview.frame = CGRectMake(0, 0, view.frame.width, view.frame.height)
view.addSubview(uiview)
MAGIC!!! The UIWebView
is there! But you can't iteract with it, just show web pages or web content.
UPDATE! I've found that there is a lot of tvOS browsers on github based on https://github.com/steventroughtonsmith/tvOSBrowser, but most of them require tweaking Availability.h on Xcode app. I've found a fork that uses my approach, so it doesn't require tweaking Availability.h https://github.com/FabioSpacagna/tvOSBrowser They add basic support for navigating, like scroll and a cursor
I don't think apple will approve apps using UIWebView
as it's marked as prohibited, you'll have to learn TVML
and TVJS
instead.
Here's the Swift version of jcesarmobile's solution.
let webViewClass : AnyObject.Type = NSClassFromString("UIWebView")!
let webViewObject : NSObject.Type = webViewClass as! NSObject.Type
let webview: AnyObject = webViewObject.init()
let url = NSURL(string: "https://www.google.com")
let request = NSURLRequest(URL: url!)
webview.loadRequest(request)
let uiview = webview as! UIView
uiview.frame = CGRectMake(0, 0, webDashboardView.frame.width, webDashboardView.frame.height)
webDashboardView.addSubview(uiview)
I'm building an enterprise app that doesn't have to go through the App Store, so this solution works for me.
According to the API diffs, UIWebView, etc are not part of tvOS. So you'll have to re-implement the app using TVML (TV Markup Language) using Apple's templates. Or you can re-implement using UIKit.