Register
Submit a solution
The challenge is finished.

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 mobile app 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!

 

See our design challenge and tvOS application challenge for more information regarding the project.

 

Challenge Overview

This is a code challenge to build out a model using Vimeo’s API. We have provided a sample project to use which includes any dependices. All of Interlochen’s archived video media will be delivered using Vimeo’s API. This challenge is strictly for model code, we will not be looking for any UI outside of what we will outline in order to test the integration code. For organization of video’s we will be using Albums in Vimeo.


 

Endpoints

All calls to Vimeo need an access token. This is included in the Configuration class in the starter project. To access call Configuration.sharedConfig.vimeoAccessToken.

 

Get User Info

[GET] https://api.vimeo.com/me

 

Fields to Store:

  • 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 to Store:

  • Name

  • Description

  • created_time

  • Pictures

    • Save link for each resolution

  • Metadata

    • Save metadata API link if total > 0


 

Get video in a album

[GET] https://api.vimeo.com/me/albums/{albumID}/videos

 

Fields to Store:

  • name

  • description

  • length

  • duration

  • width

  • height

  • created_time

  • Pictures

    • Save link for each resolution

  • tags

  • Metadata

    • Save metadata link if total > 0

  • files

    • Save each resolution with all fields

  • status    

 

Search for a video within Interlochen’s video list

[GET] https://api.vimeo.com/me/videos

query = “keyword”



 

Code Specifications

Please used the included starter project to start this project. Code only in Swift 2.0 with a minimum deployment target of 8.4. Please follow the following requirements when coding for this challenge:

 

  • Cache data with the ability to do a full cache refresh based on albums in albums.json file in the main bundle (this will be retrieved via a service in the future).

    • Suggest to use Core Data to store data from Vimeo.

    • Globally store a date of every data retrieval.

    • Build in public methods to manually refresh data at user’s request (this pull to refresh)

    • you will be pulling all Albums from the album endpoint, but cross check with the JSON file. Do not cache/show albums that are not in that file.

  • Retrieving Albums should always retrieve all albums

    • If there are multiple pages, get all of them

  • Videos should support pagination with a method to support infinite scrolling in a UITableView and UICollectionView

  • Use Alamofire framework for HTTP requests and parsing. I have included this using CocoaPods

  • Use global method(s) to check for internet connection

  • write any necessary units tests

  • Code should be self contained, meaning it would be a small out of effort to copy into an existing code base and should have no UI dependencies.


 

UI Flow

The starter project has provided a very simple UI with three views, a table view for viewing list of albums, a second table view for video videos in an album and a third view for viewing the actual video. We will be running a separate UI code challenge to construct the actual UI for this application so do not spend any time on making it “look pretty”. The purposes of the UI is to demonstrate the functionality of the model. Please add as much as you would like to demo different use cases.

 

Use Cases

Opening the application

  • If the last cache is less than 2 hours old use the last cached album data.

  • If the last cache is more than 2 hours old and the user has internet connect, refresh the album cache.

  • Retrieve the user (/me endpoint) every 24 hours if there is an internet connection.

  • List all albums on this page that are included in the albums.json file.

Selecting an album

  • Same as above, use the video endpoint to retrieve videos in that album or use the cache.

  • Support infinite scrolling for videos with 25 per page (default for Vimeo API)

Playing a video

  • Use the HTTP Live Stream (HLS) link to play the video, it should auto adjust based on internet connect (automatically handled with HLS).

  • If the user does not have internet connection, display a placeholder alert when clicking on a video.

Video Searching

  • Videos should be searchable by keyword using Vimeo’s API. Build an simple example of this in the UI. This is a separate, no search needed for albums or within albums at this point.



Final Submission Guidelines

-- All code should be written in Swift and be well commented

-- Submit a Deployment Guide with detailed configuration and verification steps
-- Use the workspace setup in the setup project for development
--  Use CocoaPods for any framework dependencies (Alamofire is included and requred for HTTP requests)

-- Code must compile against iOS SDK 8.4 with a target for 9.1

-- Upload your source project as a zip
-- Provide a video overview of your submission

ELIGIBLE EVENTS:

2016 TopCoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30052753