Challenge Overview
Introduction
Welcome to "Interlochen Media -- iOS application code challenge for Vimeo Integration.
The nonprofit Interlochen Center for the Arts is a recipient of the National Medal of Arts and the only organization in the world that brings together: a 2,500-student summer camp program; a 500-student fine arts boarding high school; opportunities for hundreds of adults to engage in fulfilling artistic and creative programs; two 24-hour listener-supported public radio stations (classical music and news); more than 600 arts presentations annually by students, faculty and world-renowned guest artists; a global alumni base spanning eight decades, including leaders in the arts and all other endeavors. For information, visit Interlochen online at www.interlochen.org.
This tvOS application will be used by Interlochen as a central location to showcase the quality and diversity of their programs. In addition, the app will help promote the arts by allowing users to view videos of live performances and listen to recordings of concerts. We are looking forward to your participation in this challenge!
Challenge Overview
This is a code challenge to build a model using Vimeo’s API. We earlier ran another code challenge for iOS. We have provided a starter project (see Run Application section) that contains a TVML UI Prototype created in two previous challenges. All of Interlochen’s Archived media will be delivered using Vimeo’s API. This challenge is to build off of the existing UI and TVML starter project, do not change anything in the UI that is not specifically called out in this challenge (see UI Section).
See our previous challenges:
-
Apple TV UI Code Challenge -- Built the UI used in this challenge
-
iOS Vimeo API Code Challenge -- The iOS Version of this challenge, feel free to look at the code from this submission (github) and utilize it as much as possible.
Endpoints
All calls to Vimeo need an access token. The vimeo access token is stored in the configuration file (config/config.js). See screenshots below on how the data matches up in the UI.
Get User Info
[GET] https://api.vimeo.com/me
Fields of interest:
-
name
-
link
-
location
-
bio
-
pictures
-
Save link for each resolution
-
-
website
-
save all fields for each website
-
-
metadata
-
save all fields for each metadata line item
-
Get Albums for Authenticated User
[GET] https://api.vimeo.com/me/albums
Fields of interest:
-
Name
-
Description
-
created_time
-
Pictures
Get video in a album
[GET] https://api.vimeo.com/me/albums/{albumID}/videos
Fields of interest:
-
name
-
description
-
length
-
duration
-
width
-
height
-
created_time
-
Pictures
-
tags
-
files
-
Use HLS
-
-
status
Search for a video within Interlochen’s video list
[GET] https://api.vimeo.com/me/videos
query = “keyword”
Code Specifications
use the existing code on github. Please follow the following requirements when coding for this challenge:
-
You may use tvOS (Xcode, Swift) or javascript layer to store albums and videos, which ever works best. Please document and explain reasoning.
-
use commonly known libraries to JS or Swift, please document any libraries used. If you are unsure ask in the forums.
-
-
Should cache content so the metadata does not load everytime the user clicks into a screen, Cache can be updated everytime the app is open and based on a global time interval (2 hours for now).
-
Again this can be handled by either tvOS or javascript layer.
-
-
Videos within an albums should support pagination with a method to support infinite scrolling.
-
All album metadata should be loaded on start (including featured videos).
-
You may utilize tvOS code (Swift in Xcode Project) if you find it useful, but please stick with TVML coding guidelines.
-
Once complete, content in Featured, Performances, News/Features, Mini Lessons & Search should be dynamically loaded and not depend on any local data on the client server. These section should only pull from Vimeo.
-
Play the HLS version of videos.
UI Integration
For this challenge organize the data based on the content-meta.json (data/content-meta.json). This file contains details for each category of the application. For this challenge only focus on categories with integration of “VIMEO”. In the category object you will find albums or album (featured) which will tell you how to organize the videos. below I have matched this up with the UI:
Featured:
Only contains one album and is displayed on the home page on the top carousel
Performances, News & Mini Lessons
Can have multiple albums, should display a detail/child list if multiple or a single list if only one
example of view with multiple albums
Example of a view with 1 album
This will need to be built out, currently no support for this in the current architecture.
The above sections should dynamically display based on the number of albums in the content-meta.json file.
Search Page
The search page needs to be added and should searched based on the Vimeo search in point. use standard TVML search functionality. List search results as a line item and clicking take the user to the content detail screen with data of that video populated.
Content Detail Screen:
Currently the content detail screen provides a section for multiple videos, for any Vimeo video we do not need this, please remove the multiple videos and provide an area for a longer description.
Only focuses on sections with the “VIMEO” integration, no need to do anything for campus view or radio. Once completed this challenge should no longer use sample data for vimeo sections.
Running the project
Please post in the forums if you face any issues running the existing backend/ app.
Client Server (interlochen-heroku):
-
Request access to github project
-
Download repo
-
Change client base url in configuration.plist to localhost:9001/
-
Change protocol in appdelegate from HTTPS to HTTP.
-
install nodejs
-
install node package harp
-
run harp server --port 9001 in the Interlochen-Heroku directory
-
All code for the TVML server can be found in the public folder, you should not need to touch code outside of that folder.
Xcode Project (interlochen-appletv)
-
Have latest release of XCode (7.2) and open “Interlochen AppleTV.xcodeproj”
-
Run project Interlochen AppleTV in Simulator
- Must run in a simulator since the server will be running on your local machine.
Final Submission Guidelines
-- All code should be written in Swift and JavaScript and be well commented
-- Submit a Deployment Guide with detailed configuration and verification steps
-- Upon Regestering you will again access to 3 github repositoies (tvOS Xcode Project, tvOS Client Server & iOS)
-- Use CocoaPods for any tvOS framework dependencies (Alamofire is included and requred for HTTP requests)
-- Code must compile against the latest version of tvOS.
-- Upload your source project as a zip
-- Provide a video overview of your submission
-- If you win, you will be asked to merge your code into the current code base on github.