Register
Submit a solution
The challenge is finished.

Challenge Overview

Introduction

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 iOS app, along with an tvOS counterpart, will be used by 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 challenge is a iOS version of a recently completed tvOS challenge. This challenge will incorporate code and a configuration file used in the tvOS application to bring live data to the iOS application. The tvOS challenge used Swift and Javascript bridging to manage content displayed in TVML templates, this challenge is less complex in that is will only deal with Swift and iOS. Feel free to reference that challenge if needed.

The iOS and tvOS code is located in Github. A Forum should be posted at challenge start to collect access to the repos.

 

Content-Meta.json

The content-meta.json file lives on a heroku server and will drive dynamic data for the application. Here are the sections of the file:

  • Featured

    • Featured is a list of content that should appear in the featured section of the app. It can contain Vimeo Videos, NPR stories & LiveStream feeds. The featured JSON object separates these integrations by album (a Vimeo album that can have multiple archived videos to list in featured, all videos of the album should appear in the carousel), audio (NPR stories to list in featured) and livestreamCasts (live stream feeds).

  • Radio

    • This corresponds to the radio section of the application. This includes two Radio stations which are already in the application. Please update the application to list from this file. This also includes a set of NPR Query Params to search for other stories (See NPR Integration Section). Stories should be listed under the two radio stations and include infinite scrolling.

  • Performances

    • Performances are categories of either LiveStream, Vimeo or NPR content.  They are separated by category.

  • Extras

    • Extras are separate categories similar to performances, except the special category Campus View, which corresponds to the campus view section located in Extras.

  • More

    • More is just a list of names and links for the more section. More section should be populated with this list and open the corresponding link.

 

Retrieving the Content-Meta.json file

The content-meta.json file should be retrieved from the tvOS client server, the server uses basic authentication. The client url, username and password are located in the Configuration.plist (Configuration.Swift) file of the iOS app, you can get the content.meta.json file from the following url:

  • https://{clientUser}:{clientPassword}@{client Url}/data/content-meta.json   

Requirements

  • Content-meta.json file should be cached for 4 hours, but not update media unless it needs to.

    • This is separate from Vimeo / NPR caching meaning if the content-meta.json file contains media that is already cached in the app, it should not reload that data.

  • When updating any list of content, the content-meta.json file should be update first, to confirm that the content is still relevant.

  • NOTE: the heroku server only has a development dyno, so it will sleep after sometime. You may need to hit it twice if it is asleep (just nav in a browser). This will be upgraded for production.

 

NPR Integration

In the tvOS challenge a wrapper was written for the NPR integration, use this wrapper to populate NPR media in the iOS application. Unless absolutely necessary, do not change this wrapper. If for some OS specific reason you need to change something please wrap in #if os(iOS)or #if os(tvOS)so that we can continue to share the code.

 

Requirements

  • Use the provided NPR Wrapper located in the tvOS Application

    • Copy files from the tvOS application github repo (request access in forums).

    • Also Copy tests and make sure the pass.

  • Radio Stations should populate from the content-meta.json file

  • Stories should be located under the radio stations and support infinite scrolling

 

Vimeo Integration

Same as NPR, there is already a Vimeo Wrapper located in the tvOS application. Use this Wrapper with no changes unless absolutely necessary.

 

Requirements

  • Use the provided Vimeo Wrapper located in the tvOS application

  • Populate sections of the application (featured, performances and sections) with albums provided in the content-meta.json file.

  • Any area should support infinite scrolling if necessary (according to how many videos are loaded)

  • Play videos using the HLS link (.m3u8)

 

LiveStream and HDRelay Integrations

All information you need to play and view details for these integrations should be in the content-meta.json file. If the information is not there do not display it in the view. There should be no static content (minus the content type, e.g. video).

 

Requirements

  • Load content based on the content-meta.json file only

  • LiveStreams should indicate that the media is live


 

Video Playback

All video playback should but through a instance of AVPlayerViewController.

Requirements

  • Clicking on watch should push to a full screen AVPlayerViewController and support all standard video playback functions

    • E.g. Play, pause, volume, portrait and landscape mode.

  • This should be the only screen that the user can view in landscape mode.

 

Audio Playback

Audio playback should support background audio playback. When clicking on listen of audio content (either stories or station) the play button should convert to a pause button and the audio should play in the background. We also need to add a global play / pause button the application to play/pause audio while browsing the application.

Requirements

  • When touching Listen Now on either a radio station or NPR story the audio should automatically start playing in the background

    • The headphones icon in Interlochen red (same as in the Listen Now button) should appear in the top left hand corner of the screen indicating the audio is playing.

    • Clicking on the headphone should open a AVPlayerViewController with audio playing giving the user the ability to play/pause/navigate, etc the audio.

    • The user should also have control over the audio from iOS mission control (global swipe up feature of iOS) and it should play even when they leave the app.

      • Should also display the content image as album art.

    • The headphones icon should disappear and free up the background audio when a user selects a video to play or the user selects other media to play from another application (e.g. Music, Spotify, etc).

    • This icon, should be visible and functioning  on all screens of the application, except a AVPlayerViewController.

 

Search

We need a new screen for search. Search only searches Vimeo media and is currently supported in the Vimeo Wrapper.

Requirements

  • Search should pop up as a fullscreen modal and have a done button in the upper right hand corner that closes it.

    • The navigation bar should be gray with a title of Search, similar to that on the content detail screens.

  • It should have a standard uitableview search bar which a search button

  • When searching the table view should populate with cells that are the same as other vimeo content in the app.

  • Selecting a cell pushes into the same content detail screen and the rest of the app, and same with the media player.

    • In the content detail, keep Share and only display done to close search on the initial home screen.

  • The table view should support infinite scrolling.

 

Loading Screens

Requirements

  • The initial loading screen should load the content-meta.json file along with Featured content.

    • Should display the loading animation

  • Navigating to a section without cached data should display the header and text along with a Activity Indicator on the table view while the content is loading.

  • Should add a pull to refresh to all table views to reload the data on user request

  • Infinite Scrolling should indicate loading.

 

Links



Final Submission Guidelines

-- All code should be written in Swift and be well commented
-- Use code from the development branches of the linked github repos.
-- 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, SwiftyJSON and Reachability are included)
-- You will be asked to submit a pull request and resolve any conflicts in the development branch of the iOS app upon winning this challenge

-- 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: 30053333