Challenge Overview
Summary
This challenge is to build out screens related to displaying and manipulating the User Profile.
For all api calls please use the Apiary documentation. The web services are not not live yet, so please use the demo data provided by calling to project specific mock server in Apiary.
Main Profile Screen
-- Accessed through bottom radial menu -> My Profile
-- Build Screen according to the Invision Design
User Info (Profile)
-- Endpoints to retrieve profile: /profile
-- note: profile information is also retrieved upon authentication.
-- Pull user profile data the first time the profile screen is displayed
-- Cache locally for lifecycle of app.
-- If no Handle or name in profile data “What’s your name?!”
-- First Name and Last Name should come from profile data
-- Fallback to Social Networking Name if Profile Data does not return any first and last name.
-- If no social network or profile data display “Tap here to let us know”.
-- If user taps on either of the “What’s your name?!”
-- Navigate to the Manage Profile section of the app, displaying the Personal Details modal view.
User Photo
-- If user profile has a photo_url path
-- Pull a copy of that photo and cache it locally.
-- Invalidate this cache if the user’s photo_url changes on subsequent loads.
--Display the user photo cropped into the bounds of a circle.
-- If user is logged in via a Social Network display their profile photo from that network, cropped to fit the circle.
-- Cache this photo locally so that it does not have to be re-loaded every time the user opens this screen.
-- Cache should only be maintained for the lifecycle of the app.
-- StackOverflow showing Facebook Profile Picture on iOS
-- StackOverflow showing Twitter Profile Picture on iOS
-- Instagram
-- https://api.instagram.com/v1/users/{user-id}/?access_token=ACCESS-TOKEN
-- “profile_picture” Field in returned Data
-- If user is not logged in via a Social Network
-- Display a default avatar image with a camera icon over it.
-- Tapping this button navigates to the Manage Profile section of the app, displaying the Personal Details modal view.
SkyCam Photo Bar
-- The first time the user logs into the app display an empty Collection View with this statement stretching across: “Wear a SkyBand during your next visit, and see your SkyCam Photos here”
-- Subsequent times show some placeholder images.
-- When tapped display a placeholder modal popover. Does not need to match the design.
Buttons
-- Display the buttons from the design, make them call a dummy function when tapped
Manage Profile Screen
-- Accessed through left flyout menu -> Settings
-- Build Landing Screen according to the Invision Design
-- When an item is tapped, pull up the Manage Profile modal with that section open
-- My Minors and My Photos should be dummy view controllers and do not have to be implemented as part of this challenge
Close Button
-- If current form has been modified at all, display a confirmation modal “Are you sure you want to close? Any changes you have made will be lost.”
Navigation Bar
-- Tapping the right arrow should move the user to the next section in the list, it should go no further when user would be going to “My Minors”
-- Tapping the left arrow should move the user to the previous section in the list, going no further back than “My Personal Details”
My Personal Details
-- Photo
-- Should display current photo from Profile Page under camera icon
-- When tapped, Prompt for Camera Roll or Take a Photo
-- Display a standard controller for selecting a photo or taking a photo
-- When photo is taken or selected, display a cropping view that allows the user to re-size and move the photo within a circle
-- Save the photo with proper rectangular dimensions such that it will be centered in the circle on the profile page
-- Display photo publicly toggle - Yes/No
-- Handle/Nickname - Text
-- First Name - Text
-- Last Name - Text
-- Email - Text
-- Password - Password
-- Password Confirmation - Password
-- Mobile phone number - Numeric only
-- DOB - Date Field/Picker
-- Gender - Picker
-- Male or Female or Other
-- Country - Picker
-- USA or Australia
-- Street Address 1 - Text
-- Street Address 2 - Text
-- City - Text
-- State / Province - Picker
-- All 50 US States if country is USA
-- All Australian provinces if country is Australia
-- Disable if no country selected
-- Postal Code - Numeric only
-- Save Button
-- Package all changed fields into a POST Request to /profile/update
-- For updating the image, call a method that prepares the image data to send in a POST request. Update the locally cached image
Fitness Settings
-- Instructions Label
-- Display lorem ipsum text.
-- Body Type
-- Display 3 body size buttons
-- Should default to the none of them selected.
-- Gray for un-selected, orange for selected.
-- Height Label
-- Label should display currently selected
-- Height Slider
-- Currently selected height is the notch in the center
-- Stretches full width
-- Notches for each half inch
-- Labeled, longer notches for each full inch
-- Start with 5’7” at the center
-- Can be slid as low as 3’0” and as high as 8’6”
-- Should snap to the nearest notch
Linked Social Accounts
-- If linked to an account (Facebook, Twitter or Instagram)
-- Show profile picture
-- Display Name
-- Display url to profile
-- Unlink button
-- Make call to /profile/update with facebook-token, twitter-token or instagram-token
-- If not linked to an account
-- Gray Circle in place of profile picture
-- "Link Facebook", "Link Twitter" or "Link Instagram"
-- Facebook: check for ACAccount Facebook and call /profile/update passing the Facebook oauth token as a parameter
-- Pop user to Settings app if no Facebook accounts saved
-- Twitter: check for ACAccount Twitter and call /profile/update passing the Twitter oauth token as a parameter
-- Pop user to Settings app if no Twitter accounts saved
-- Instagram: initiate the Instagram login flow, then call /profile/update passing the Instagram oauth token as a parameter
My Favorite Parks
-- IDs of parks will be in Profile information
-- Call with GET to https://skyapp.apiary.io/park passing an array of Ids as a parameter
-- Display the results in the same format that they are displayed on the Find A Park Screen
-- Call Button: Initiate call to the phone number for this park
-- Email Button: Push user to Mail app with the park’s email set as the recipient
-- Tickets Button: Push user to Book Jump Time screen for that park
-- Directions Button: Push the user to Maps app with that address as the destination, and current location as the starting point.
-- Add A Park: Push user to Find a Park screen.
Setup
-- Send an email to blainer and harrywynn request to be added to the Sky Zone team on Gitlab if you are not already a member
-- Once added to the team, work off of the Profile Management branch
-- Design resources are located in the Resources repository here
-- Add blainer and harrywynn as members of your forked repository
-- Reference the Invision mockups here for navigation flow
Final Submission Guidelines
-- All code should be written in Swift and be well commented
-- Use the workspace setup in the repository for development
-- Code must compile against iOS SDK 8.3 with a target for 8.0
-- Use auto layout and size classes to fit 5s, 6 & 6 Plus iPhone devices
-- Use storyboards for all views and navigation, please create a new storyboard for this MVC and provide code to access it in the ContainterViewController file. There is an extension to UIStoryboard at the end of the file.
-- Please make sure all storyboards are ready to be localized and all string are localized using NSLocalizedString and the Localizable.strings file. Nothing needs to be translated.
-- Application should be locked to portrait orientation
-- Upload your source project as a zip
-- Include your Gitlab username and URL of your forked repository in your documentation
-- Provide a video overview of your submission
-- Upon being selected as the winner you will be required to do a merge request on Gitlab