tvOS 中的 Web 应用程序

Web app in tvOS

Apple 昨天发布了 SDK for apple tv

大多数电视应用都是基于网络的(html、javascript 和 css),我想将现有的电视网络应用移植到 tvOS。

Xcode 中的 SDK 没有像 iOS 中那样用于创建基于 html、javascript 和 css 的应用程序的 Webview 实现,但是,根据对于文档,可以使用 javascript 使用 tvjs framework, but instead of html, apple has it's own markup language for TVs called TVML.

我的问题是:是否可以将现有的网络应用程序移植到 tvOS(如何?),还是需要从头开始重新实现?

感谢您的帮助。

根据 API diffs,UIWebView 等不是 tvOS 的一部分。因此,您必须使用 Apple 的模板使用 TVML(电视标记语言)重新实现该应用程序。或者你可以使用 UIKit 重新实现。

UIWebView 是 tvOS 的一部分,尽管文档现在看起来有点有限 (see here)。您还可以在此处找到 .h 文件:/Applications/Xcode-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIWebView.h

似乎没有包含 WebKit 框架。

更新:

在 UIWebView.h 中找到: NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UIWebView : UIView <NSCoding, UIScrollViewDelegate>

考虑到这一点它可能在 tvOS 中不可用:(

遗憾的是,UIWebView 在 tvOS 中不受支持class。下一个是 WKWebView。您可以在 iOS 9 和 tvOS here 中查看支持和删除的 API 的完整列表。如果向下滚动到第一部分的底部,您会看到 WebKit 已删除。

编辑:在人们继续反对之前,我要明确指出 UIWebView 出现在 Apple TV 上,但禁止 使用它,因此,唯一在 Apple TV 上加载 Web 应用程序的真正方法是使用 TVML 和 TVJS 创建它们

如果您想使用 UIWebView(作为概念验证),您可以这样做:

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)

神奇!!! UIWebView 在那里! 但您不能与之交互,只能显示网页或网页内容。

更新! 我发现 github 上有很多基于 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 的 tvOS 浏览器 他们添加了对导航的基本支持,例如滚动和光标

我不认为苹果会批准使用 UIWebView 的应用程序,因为它被标记为禁止,你必须学习 TVMLTVJS

这是 jcesarmobile 解决方案的 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, webDashboardView.frame.width, webDashboardView.frame.height)
    webDashboardView.addSubview(uiview)

我正在构建一个不需要通过 App Store 的企业应用程序,所以这个解决方案适合我。

如果您希望将现有应用程序移植到 tvOS,您可能需要考虑 atvjs 框架。它会给你开发任何前端重应用程序的熟悉经验。您可能仍然需要修改现有的 Web 应用程序以适应框架,但与使用 Apple 提供的示例架构相比,这个过程要轻松得多。

要开始,请参考 https://github.com/emadalam/tvml-catalog-using-atvjs 这是原始示例代码的端口,使用atvjs 框架。