2015-09-10 3 views
16

Apple выпустила вчера SDK for apple tv.Веб-приложение в tvOS

Большинство приложений для телевизоров основаны на веб-интерфейсах (html, javascript и css), и я хотел бы портировать существующее телевизионное веб-приложение в tvOS.

SDK в Xcode не отображает реализацию Webview, например, в iOS для создания приложений на основе html, javascript и css, однако, согласно документам, можно использовать javascript, используя tvjs framework, но вместо html у яблока есть собственный язык разметки для телевизоров под названием TVML.

Мой вопрос: возможно ли подключить существующее веб-приложение к tvOS (как?) Или его необходимо переопределить с нуля?

Благодарим за помощь.

ответ

29

EDIT: Перед тем как люди держит downvoting, я собираюсь дать понять, что UIWebView присутствует на Apple TV, но это ЗАПРЕЩЕНО использовать его, так что, единственный реальный способ загрузки веб-приложений на яблоке ТВ создает их с 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]; 

быстры

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 !!! UIWebView есть! Но вы не можете итерации с ним, просто покажите веб-страницы или веб-контент.

ОБНОВЛЕНИЕ! Я обнаружил, что на github много tvOS-браузеров, основанных на https://github.com/steventroughtonsmith/tvOSBrowser, но большинство из них требует настройки Access.h на Xcode-приложении. Я нашел вилку, которая использует мой подход, поэтому она не требует настройки.ч https://github.com/FabioSpacagna/tvOSBrowser Они добавляют базовую поддержку для навигации, как свиток и курсор

Я не думаю, что яблоко будет утверждать приложения, используя UIWebView, как это отмечено как запрещено, вы должны научиться TVML и TVJS вместо этого.

+0

Это работает, потрясающе: D –

+1

Только пульт не подготовлен к этому, нет никакого способа навигации по содержимому с помощью ударов на пульте дистанционного управления, но я думаю, что это будет вопрос добавления распознавателей жестов и форсирования событий на javascript, thanks :) –

+0

Да, ему нужно много работы, чтобы сделать его пригодным для использования, распознаватели жестов, делегаты, не уверены, стоит ли прилагать усилия, если яблоко, вероятно, отклонит приложения, используя UIWebView. – jcesarmobile

11

Согласно API diffs, UIWebView и т. Д. Не являются частью tvOS. Таким образом, вам придется повторно реализовать приложение, используя TVML (Язык разметки ТВ) с использованием шаблонов Apple. Или вы можете повторно использовать UIKit.

4

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, кажется, не включена.

Update:

Найдено в UIWebView.h: NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UIWebView : UIView <NSCoding, UIScrollViewDelegate>

Принимая это во внимание это может быть не доступен в tvOS :(

1

К сожалению, UIWebView не поддерживается класс в tvOS. Niether - WKWebView. Вы можете увидеть полный список поддерживаемых и удаленных API в iOS 9 и tvOS here. Если вы прокрутите вниз до нижней части первой секции y Вы увидите, что WebKit удалили.

2

Вот версия быстрой версии решения jcesarmobile.

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, так что это решение работает для меня.

+0

, вы сделали какой-то прогресс на веб-сайте iteraction? с помощью этого кода вы просто загружаете веб-сайт, но вы вообще не можете перемещаться или делать что-либо вообще – jcesarmobile

+0

Отсутствие прогресса на веб-сайте. Поскольку я просто показываю статические данные в своем приложении, это не важно для моих нужд. Но было бы любопытно, если кто-нибудь заработает! –

+0

Приведенный выше код работает хорошо. У меня есть необходимость, но для установки: webview.mediaPlaybackRequiresUserInteraction - false (по умолчанию это правда). Я меняю let webview на var webview .. и он говорит, что «не может присваивать свойство. Webview неизменен» Любые предложения? – Jim

0

Если вы хотите перенести существующее приложение на tvOS, вы можете рассмотреть инфраструктуру atvjs. Это даст вам знакомый опыт разработки любого внешнего приложения. Вам все равно может потребоваться изменить существующее веб-приложение для набора фреймворка, однако это будет гораздо менее болезненный процесс, чем использование типовой архитектуры, предоставляемой Apple.

Для начала обратитесь к https://github.com/emadalam/tvml-catalog-using-atvjs, который является портом исходного кода образца, переписанным с использованием рамки atvjs.

Смежные вопросы