23

苹果昨天发布了它的苹果电视SDK 。

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

Xcode 中的 SDK 没有显示像 iOS 中用于基于 html、javascript 和 css 创建应用程序的 Webview 实现,但是,根据文档,可以使用tvjs 框架使用 javascript ,但苹果有自己的标记语言而不是 html对于称为TVML的电视。

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

谢谢你的帮助。

4

6 回答 6

44

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

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

目标-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];

迅速

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的 tvOS 浏览器,但其中大多数需要在 Xcode 应用程序上调整 Availability.h。我找到了一个使用我的方法的叉子,所以它不需要调整 Availability.h https://github.com/FabioSpacagna/tvOSBrowser 他们添加了对导航的基本支持,比如滚动和光标

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

于 2015-09-22T10:53:19.477 回答
11

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

于 2015-09-10T13:51:24.127 回答
6

这是 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 的企业应用程序,所以这个解决方案对我有用。

于 2015-12-11T14:09:59.110 回答
4

UIWebView是 tvOS 的一部分,尽管文档现在看起来有点有限(请参阅此处)。您还可以在此处找到 .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 中不可用:(

于 2015-09-10T14:09:10.567 回答
2

不幸的是,UIWebView 不是 tvOS 中支持的类。Niether 是 WKWebView。您可以在此处查看iOS 9 和 tvOS 中支持和删除的 API 的完整列表。如果您向下滚动到第一部分的底部,您会看到 WebKit 说已删除。

于 2015-09-19T04:16:40.363 回答
-1

如果您希望将现有应用程序移植到 tvOS,您可能需要考虑atvjs框架。它将为您提供开发任何前端繁重应用程序的熟悉体验。您可能仍然需要修改现有的 Web 应用程序以适应该框架,但是与使用 Apple 提供的示例架构相比,这将是一个不那么痛苦的过程。

要开始使用,请参阅https://github.com/emadalam/tvml-catalog-using-atvjs ,它是原始示例代码的一个端口,使用atvjs框架重新编写。

于 2016-01-30T21:00:28.280 回答