Challenge Overview
Introduction
Welcome to an exciting proof of concept challenge! This is part 1 of a set of challenges and will provide a unique opportunity to "stretch your brain" on both iOS and protocol development. In part 1 we'll be developing the base POC application along with the "Device Discovery" protocol.
The goal of this challenge is to develop a "proof of concept" application capable of running in two modes: "Transmitter" and "Receiver". An iOS device setup as a "Transmitter" should be able to detect any iOS devices on the local network setup as "Receivers".
The focus of this challenge is the detection of iOS devices configured as "Receivers" by devices configured as "Transmitters".
Design
This is a POC challenge targeting development of the device discovery protocol. The interface of the application is only functional and as such, should use simple "stock" buttons and controls.
The example images above are just that - examples / suggestions. Feel free to modify as needed for this challenge. However please include, at a minimum all of the controls shown for each mode.
Key Technology to be Developed
Device Discovery
A device in "Transmit" mode should be able to detect and list out any devices it discovers in "Receive" mode. This list should update in real time as new devices are put into "Receive" mode and enabled. This discovery should take place over wireless / IPv4. The quality of your device discovery solution will be the primary criteria for winning the contest (reviewers, please take note.)
Additional Notes and Requirements
The discovery process should take place across the local wireless network using IPv4.
The application should target both iPhone and iPad. Portrait mode should be supported on the iPhone and portrait and landscape mode should be supported on the iPad.
The "Select Audio" button / area, when in "Transmit" mode, should be included in the application and should allow the user to select a track from the local music library. The selected track should be shown in the box below. However, for this challenge (Part 1), no audio will be transmitted. We're including this functionality to prep for next next challenge (Part 2).
While in "Receiver" mode, when the "Receive" toggle is on, the iOS device should be "discoverable" by any transmit devices and should show up in the "Speaker IP Address" list on any transmit devices.
While in "Receiver" mode, when the "Receive" toggle is off, the iOS device should not be "discoverable" and should "fall off" the "Speaker IP Address" list of any devices in "Transmit" mode. Note - if a receiver device powers down, or is disconnected from the network unexpectedly, it should also "fall off" the list on any transmit devices.
The "Transmit" toggle, while in "Transmit" mode should be included in the application, however for this challenge (Part 1), it will have no function.
The next challenge (part 2) will deal with streaming audio from a transmitter to all receivers, with the receivers playing the audio in sync. The focus will be on developing the "sync" technology.
Coding Standards
-
Cocoa Touch framework Xcode 6.3 project with well commented code
-
Code must compile against iOS SDK 8.3 with a deployment target of iOS 8.0
-
Upload all source projects as a zip
-
Provide documentation of any special configuration required to run your code
3rd Party Libraries
3rd party libraries can be leveraged in this challenge as long as they are free for enterprise use (no licensing fees), have no restrictions on distribution, selling and / or profiting from the use or sale of software including the library and do not require the source code of the software including the library to be made available to recipients of the software in binary or compiled form. Requirements to credit the library in the source code that uses it are fine (just be sure to follow any such requirements in your submission).
Final Submission Guidelines
Challenge Deliverables
-
A functional "proof of concept" iOS app with the features described above.
-
A video demonstrating your submission
-
Installation guide
-
Detailed documentation describing the "device discovery protocol"
-
Documentation discussing any discovered pitfalls, issues, caveats, ...etc.