{"id":65,"date":"2018-10-07T06:00:37","date_gmt":"2018-10-07T06:00:37","guid":{"rendered":"http:\/\/lorenrisker.com\/blog\/?p=65"},"modified":"2018-10-07T06:00:37","modified_gmt":"2018-10-07T06:00:37","slug":"tvos-tutorial-single-page-video-app-tvml-apple-tv","status":"publish","type":"post","link":"http:\/\/lorenrisker.com\/blog\/tvos-tutorial-single-page-video-app-tvml-apple-tv\/","title":{"rendered":"TVOS tutorial &#8211; a single page video app in TVML for the Apple TV"},"content":{"rendered":"<p>If you&#8217;ve never made an app for the Apple TV, you might want to start with my previous tutorial, <a href=\"http:\/\/lorenrisker.com\/blog\/index.php\/2017\/11\/08\/getting-started-\u2026ated-for-tvos-11\/\">Getting Started with the Apple TV and TVOS: Hello world in TVML (updated for TVOS 11)<\/a>.<\/p>\n<p>If you already have an idea what you&#8217;re doing &#8211; a couple disclaimers.<\/p>\n<p>1) <a href=\"http:\/\/www.lorenrisker.com\">I&#8217;m not a software developer<\/a>, but I&#8217;ve tinkered enough over the years to make a <a href=\"https:\/\/itunes.apple.com\/us\/app\/ooftv-music-videos-live-music\/id1076228715?mt=8\">pretty decent app<\/a> without too much trouble, which I think is a testament to how Apple has set up their platform. All I want to do is serve up videos and organize them, and to be able to use my own graphics. TVML makes tons of decisions for us and makes getting a customized Netflix like app up pretty quickly. For those of you who don&#8217;t like the constraints, then you can just write it in Swift and do whatever you want. There&#8217;s even a method for defining your own TVML elements yourself. That allows <a href=\"http:\/\/lorenrisker.com\/blog\/index.php\/2017\/11\/07\/building-an-appl\u2026s-app-with-atvjs\/\">developers to create libraries<\/a> and make things even easier for those of us who are hobbyists, part timers, or just need an app quickly and don&#8217;t want to start from scratch. These tutorials are written from my notes as I went through the process of creating the <a href=\"https:\/\/itunes.apple.com\/us\/app\/ooftv-music-videos-live-music\/id1076228715?mt=8\">OOFTV Apple TV<\/a> app.<\/p>\n<p>2) This tutorial and the last one are straight from <a href=\"https:\/\/developer.apple.com\/library\/content\/documentation\/TVMLKitJS\/Conceptual\/TVMLProgrammingGuide\/index.html#\/\/apple_ref\/doc\/uid\/TP40016718\" target=\"_blank\" rel=\"noopener\">Apple&#8217;s TVML Programming guide<\/a>. I thought their guide was very well written and the path it takes you through makes a lot of sense. I also used tutorials from <a href=\"https:\/\/www.raywenderlich.com\/category\/tvos\">Ray Wenderlich<\/a>, who has a book on TVML. But there were a couple of things that tripped me up when I was starting out, so I&#8217;m hoping these posts will be able to expand a little more for people like me who aren&#8217;t so familiar with iOS development or programming in general.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;ve never made an app for the Apple TV, you might want to start with my previous tutorial, Getting Started with the Apple TV and TVOS: Hello world in TVML (updated for TVOS 11). If you already have an idea what you&#8217;re doing &#8211; a couple disclaimers. 1) I&#8217;m not a software developer, but [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-65","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/lorenrisker.com\/blog\/wp-json\/wp\/v2\/posts\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/lorenrisker.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/lorenrisker.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/lorenrisker.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/lorenrisker.com\/blog\/wp-json\/wp\/v2\/comments?post=65"}],"version-history":[{"count":1,"href":"http:\/\/lorenrisker.com\/blog\/wp-json\/wp\/v2\/posts\/65\/revisions"}],"predecessor-version":[{"id":66,"href":"http:\/\/lorenrisker.com\/blog\/wp-json\/wp\/v2\/posts\/65\/revisions\/66"}],"wp:attachment":[{"href":"http:\/\/lorenrisker.com\/blog\/wp-json\/wp\/v2\/media?parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/lorenrisker.com\/blog\/wp-json\/wp\/v2\/categories?post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/lorenrisker.com\/blog\/wp-json\/wp\/v2\/tags?post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}