Apple minulý týden představil mimo jiné novou Apple TV s operačním systémem tvOS. Největší radost vývojářům určitě udělal fakt, že do nové černé krabičky půjdou instalovat aplikace z App Store.
Vývojáři mají hned dvě možnosti. Mohou napsat nativní aplikaci, která má plný přístup k hardwaru Apple TV. Dostupné SDK (sada knihoven pro vývojáře) je hodně podobné tomu, které již vývojáři znají z iPhonu, iPadu, a i programovací jazyky jsou stejné – Objective-C a mladší Swift.
Pro jednodušší aplikace ale Apple nabídl vývojářům ještě druhou možnost v podobě TVML – Television Markup Language. Pokud máte pocit, že je název TVML až podezřele podobný HTML, máte pravdu. Je to opravdu značkovací jazyk založený na XML a hodně podobný právě HTML, jen je značně jednodušší a má striktnější syntaxi. Pro aplikace typu Netflix je ale naprosto ideální. A těžit z toho budou i uživatelé, protože díky striktnosti TVML budou multimediální aplikace vypadat a fungovat hodně podobně.
Cesta k první aplikaci
První, co jsem tedy musel udělat, bylo stáhnout novou betaverzi vývojového prostředí Xcode (verze 7.1 je dostupná zde). Tím jsem získal přístup k tvOS SDK a mohl tak založit nový projekt cílený právě na Apple TV čtvrté generace. Aplikace může být jen pro tvOS nebo je možné tento kód přidat do již existující aplikace pro iOS a vytvořit tak „univerzální“ aplikaci – model je podobný jako dnes u aplikací pro iPhone a iPad.
Problém první: Xcode nabízí jen možnost vytvořit nativní aplikaci. V dokumetaci jsem ale velmi rychle našel část, která vývojářům pomůže tuto kostru změnit a připravit pro TVML. V podstatě je to pár řádek kódu ve Swiftu, které jen na Apple TV vytvoří objekt přes celou obrazovku a načtou hlavní část aplikace, která je už napsaná v JavaScriptu.
Problém druhý: TVML aplikace jsou opravdu hodně podobné webové stránce, a proto se také veškerý kód načítá z internetu. Samotná aplikace je tak vlastně jen „bootloader“, obsahuje jen minimum kódu a nejzákladnější grafické prvky (ikonka aplikace a podobně). Nakonec jsem úspěšně vložil hlavní část JavaScript kódu přímo do aplikace a získal tak možnost alespoň zobrazit vlastní chybovou hlášku, když není Apple TV připojena k internetu.
Třetí drobný problém: iOS 9 a s ním i tvOS striktně vyžaduje, aby veškerá komunikace směrem do internetu probíhala šifrovaně přes HTTPS. Tohle je vlastnost zavedená v iOS 9 pro všechny aplikace a důvodem je tlak na soukromí uživatele a bezpečnost přenášených dat. Takže bude nutné na webový server nasadit SSL certifikát. Ten je možné pořídit už za 5 dolarů (120 korun) na rok nebo můžete použít například službu CloudFlare, která se o HTTPS postará sama, automaticky a bez investic. Druhou možností je toto omezení pro aplikaci vypnout, což zatím jde, ale rozhodně bych to nedoporučoval.
Po pár hodinách čtení dokumentace, kde jsou zatím občas drobné chyby, jsem se dopracoval k hodně základní, ale fungující aplikaci. Ta zobrazila oblíbený text „Hello World“ a dvě tlačítka. Asi dvě hodiny jsem se snažil, aby tlačítko bylo aktivní a něco reálně udělalo. Ale s ohledem na brzkou ranní hodinu jsem šel raději spát… a to bylo dobře.
Druhý den jsem dostal spásný nápad stáhnout si hotovou ukázkovou TVML aplikaci přímo od Applu. V kódu jsem velmi rychle našel, co jsem hledal, a tlačítko bylo aktivní a fungovalo. Mimo jiné jsem na internetu objevil i první dva díly tutoriálu jak na tvOS. Oba zdroje hodně pomohly, takže jsem založil nový projekt a pustil se do první reálné aplikace.
První reálná aplikace
Začal jsem úplně od nuly, první TVML stránkou. Výhoda je, že Apple si pro vývojáře připravil 18 hotových TVML šablon, které stačí zkopírovat z dokumentace. Úprava jedné šablony zabrala něco kolem hodiny, a to primárně proto, že jsem připravoval naše API, aby mohlo do Apple TV poslat hotové TVML včetně veškerý potřebných dat.
Druhá šablona už zabrala jen asi 10 minut. Přidal jsem dva JavaScripty – většina kódu v nich pochází přímo od Applu, takže proč znovu vynalézat kolo. Apple připravil scripty, které se postarají o načítání a zobrazení TVML šablon včetně doporučeného indikátoru načítání obsahu a případného zobrazení chyby.
V čase pod dvě hodiny jsem tak dokázal sestavit hodně holou, ale fungující aplikaci PLAY.CZ. Umí zobrazit seznam rádií, umí ho filtrovat podle žánru a umí rádio spustit. Ano, spousta věcí v aplikaci není, ale základ funguje.
[youtube id=“kLKvWC-rj7Q“ width=“620″ height=“360″]
Výhodou je, že aplikace v podstatě není nic jiného než speciální verze webové stránky, kterou pohání JavaScript a je možno použít i CSS pro úpravu vzhledu.
Apple ještě vyžaduje několik dalších věcí, které je nutno připravit. Ikonka aplikace není jedna, ale jsou hned dvě – menší a větší. Novinkou je, že ikonka není prostý obrázek, ale obsahuje paralax efekt a je složena ze 2 až 5 vrstev (pozadí, objekty uprostřed a popředí). Stejný efekt mohou obsahovat všechny aktivní obrázky napříč aplikací.
Každá vrstva je vlastně jen obrázek na průhledném pozadí. Apple připravil vlastní aplikaci pro sestavení těchto vrtstvených obrázků a v brzké době slibuje uvolnit i exportní plugin pro Adobe Photoshop.
Další požadavek je „Top Shelf“ obrázek. Pokud si uživatel umístí aplikaci na prominentní místo v horní řadě (na horní poličce), musí aplikace dodat i obsah pro plochu nad seznamem aplikací. Tam může být buď jen prostý obrázek nebo se může jednat o aktivní oblast třeba se seznamem oblíbených filmů nebo v našem případě rádií.
Spousta vývojářů je teprve na začátku zkoumání možností nového tvOS. Dobrá zpráva je, že napsat obsahovou aplikaci je velmi snadné a Apple šel vývojářům s TVML hodně naproti. Sestavit aplikaci (například PLAY.CZ nebo iVysílání) by tak mělo být snadné a rychlé. Je tak velká šance, že současně se zahájením prodeje nové Apple TV bude připravena i velké množství aplikací.
Napsat nativní aplikaci nebo přenést hru z iOS na tvOS sice bude náročnější, ale ne tak moc. Největší překážkou bude jiné ovládání a omezení v podobě 200 MB na aplikaci. Nativní aplikace si s sebou může z obchodu stáhnout jen omezenou část dat a vše ostatní si musí stáhnout dodatečně a nemá jistotu, že systém tato data nesmaže. Vývojáři si s tímto omezením ale určitě rychle poradí, a to i díky dostupnosti sady nástrojů pod označením „App Thinning“, které jsou i součástí iOS 9.
Pěkný článek. Díky. Možná se dočkáme časem od Apple i uživatelského řešení přípravy jednodušších aplikací (řešení), jako je to možné u FileMakeru pro iOS, aniž bych byl vývojář.
Teoreticky… ten Swift loader je pár řádků, které jsou stále stejné, jen se změní URL pro první TVML soubor. Pokud někdo bude trošku chtít, může asi napsat script, který by mohl vzdáleně spustit build s vaší URL a poslat zpět IPA soubor. Nebo máte-li mac, není problém poslat projekt, kam se jen vloží URL a spustí se build. Výhoda je, že pokud je TVML mimo aplikaci, stačí vám vlastně jeden public build a případně jeden privátní (vývojový) a můžete měnit jen TVML na serveru a tím i fungování aplikace.
„Aplikace může být jen pro tvOS nebo je možné tento kód přidat do již existující aplikace pro iOS a vytvořit tak „univerzální“ aplikaci – model je podobný jako dnes u aplikací pro iPhone a iPad.“
zajimalo by me, jak to myslite? Ja osobne nenasel nikde zpusob, jak udelat 1 build, ktery bude mit v sobe universal iPhone, iPad a Apple TV.. jelikoz jsou to oddelene SDK (podobne jako OSX), potrebujete extra target pro tvOS a tudiz i separatni build.. neco prehlizim?
v Xcode 7.1 jde přidat tvOS aplikace jako další target do již existujícího projektu – podobně jako aplikace pro Apple Watch nebo třeba widget pro notifikační centrum. Jak se to pak ale bude nahrávat do storu zatím nevím… Předpokládám, že Xcode pošle jeden balíček a App Store si to pak rozdělí… Asi podobně jako to teď dělají s Watch
noo.. to podle me jsou 2 uplne jine veci.. watch je extension.. nebo aspon do doby watchOS 2.0 byla.. davala se spolu s targetem iOS a bez iPhonu ani nefungovala.. ATV je samostatna entita.. jde mi o to, zda bude build pro ATV samostatny (treba paid za 2$) a vedle toho iOS paid za 2$, nebo bude mozne udelat universal 2$ build na iOS i ATV.. zatim mi prijde, ze ne, protoze ani iOS target nenabizi device family pro ATV..
tak až reálné spuštění ukáže, ale chová se to opravdu stejně jako třeba Apple Watch kód. Jinak přímo v dokumentaci je, že půjde přidat kód pro tvOS do stávající aplikace a bude tak možné prodávat jednu appku (jedna entita v App Store) pro iOS i tvOS současně – jeden nákup pro zákazníka, nebo jako oddělenou entitu – oddělený nákup pro iOS a pro tvOS.
Jen pro upřesnění, není to 200MB na aplikaci, ale 200MB lokálně uložených a zbytek stahovaných z netu v případě potřeby
Děkuji, já to tak i myslel, ala asi jsem to špatně formuloval. Vše nad 200MB (resp. vše dodatečně staženo) se ukládá jako cache a pokud se systém rozhodne, že dochází místo, začne mazat – což se asi nestane, dokud bude dost volného místa a pak se bude mazat asi ten nejméně používaný obsah, takže to v praxi asi nebude moc problém.
Co ještě musím zjistit, údajně se tento limit nebude týkat her, resp. hra by mohla být větší než 200MB hned v základu. Ale zatím přesně nevím, jak je tohle přesně myšleno. Je dost možné, že Apple ještě stále upravuje tuto polituku dle ohlasů vývojářů.
hehe Pokemon TCG – 4 GB, Order chaos online – 1,6GB Hearthstone 1,3GB Na tohle jsem fakt zvědavej.
objevila se informace, že hry mají zvláštní režim. Podorobnosti dávám teď dohromady a článek doplníme.
Neda mi to a predem se omlouvam, jestli tim nekoho nastvu, ale mam proste obrovskou, uprimnou a nefalsovanou radost, se kterou jsem se s vami chtel podelit…
Den po ohlaseni nove Apple TV jsem nelenil a prihlasil se k loterii (ci vyberu?) Apple s moznosti ziskani Developer Kitu jeste predtim, nez pujde do prodeje.
Vcera vecer mi Apple napsal, ze me vybral do prvni varky :)
Takze nelenim stejne jako autor tohoto clanku a poctive makam na Predskolni Brasnicce pro Apple TV – k dostani ve vasem App Store behem rijna :)
tak mám pocit, že ji snad dostal každý, kdo se registroval :) Také jsem včera objednával a moc a moc se těším… A znám ještě jednoho člověka, který už také čeká na svou dodávku…
Každopádně zatím se zdá, že aplikací bude se zahájením prodeje asi opravdu hodně :)
Každý asi ne – mě ji nedali :(
:( tak to mě mrzí.
Ak by niekto chcel, mam osem bielych nalepiek Apple… Mozem poslat postou…