# App Development Summer Camp NYC (High School)

Canonical URL: <https://www.nextgenbootcamp.com/classes/app-development-summer-camp>

## Overview

Throughout this 45-hour iOS summer course, students will learn to develop several apps, including two in the very first week! Our curriculum begins with basic programming concepts in Xcode playgrounds and then moves into more advanced topics using Xcode 9 and Swift 4.

Students will complete step-by-step activities to code working apps, including a tip calculator and a weather app that integrates with an API (an Application Program Interface, which enables developers to program software components to work together).

After learning new skills and techniques in class, students reinforce important concepts by developing their own final project at home, with tons of instructor guidance along the way!

**Prerequisites & Ages:**  The program is ideal for ages 13-19 with a strong interest in coding. Prior coding/programming experience is not required, but students must be comfortable with computer basics.

## What you'll learn

- Learn to build and develop apps using Swift & Xcode
- Create numerous real-world apps
- Add interactive elements such as buttons, taps & swipe gestures
- Connect the user interface to code that makes the app work
- Learn programming concepts and logic to create an efficient app
- Add image assets for your apps, launch screen, & app store
- Build adaptable layouts that work across all iPhones & iPads
- Add embedded videos, map location, external web links
- Learn to use data models, including external datasets
- Preview your apps on your own device
- Create your own app with guidance from the instructor

## Curriculum

### Week 1

#### Introduction to Tools of the Course

- XCode
- iOS
- Swift

#### Hello World App

#### Roll The Dice App

#### The Swift Programming Language

- The Swift Playground
- Comments
- The println() function

#### Variables

- Variables
- Constants
- Data types
- Optionals
- Type inference

#### Conditional Statements & Operators

- The if statement
- The else statement
- The else if statement
- Comparison operators
- Arithmetic operators
- Logical operators

#### Strings

- Literals
- Mutable strings
- Comparing strings
- Concatenating strings

### Week 2

#### Tip Calculator App

#### Functions

- Functions with parameters
- Functions with returned values

#### Optional Unwrapping

- Forced optional unwrapping
- Implicitly unwrapped optionals
- Optional binding

#### Loops

- For loops
- While loops
- For in loops
- Iterating over arrays

#### Creating a Class

- Object-oriented programming
- Objects & classes
- Methods
- Properties

#### Methods

- Methods with parameters
- Methods with return values

#### Structs

- Creating a struct
- Accessing a struct

#### Inheritance

- Creating a subclass
- Method overriding

#### Extensions

- Extending existing classes
- Using extensions

#### Protocol & Delegates

- Defining & implementing protocol
- Delegate design pattern
- Implementing & using delegates

#### Closures

- Defining a closure
- Closures with parameters
- Closures with returned values
- Closures as callbacks

### Week 3

#### ENUMS

- Creating & using enumerations

#### Type Casting

- Type checking
- Type casting
- Downcasting

#### Tuples

- Creating & using tuples

#### Type aliases

- Creating & using type aliases

#### ARC

- Strong & weak references
- Avoiding strong reference cycles

#### Card War App

- Importing the images
- Adding the button that draws the cards
- Labeling the deck & each player’s score
- Adding constraints to our labels
- Adding a button to restart the game & constraining it
- Adding & constraining the background image

### Week 4

#### Auto Layout

- Stacks
- Nested Stacks
- Downcasting
- Constraints
- Content Hugging Priority
- Compression Resistance Priority

#### Card War: The Data Model & Linking the UI to Code

- Connecting the UI to the View Controller
- Modeling a single card by adding a Card class
- Modeling all the cards by adding a Deck class
- Adding the shuffle functionality

#### Card War: Adding Variables to the View Controller

- Declaring variables
- Responding to changes in a variable’s value using the didSet property observer
- Starting with the drawingCards function

#### Card War: Displaying the Cards & Score

- Creating the UIImageViews that will hold the cards
- Setting the size & position of the cards that are drawn
- Revealing the cards & updating the winner’s score
- Defining what happens when the game is restarted

#### Card War: Animating the Cards

- Animating the cards’ move from the deck button to their respective positions
- Revealing the cards’ values after they are done moving
- Revealing the cards’ values with a flipping transition
- Incorporating the final code into the animation

### Week 5

#### Building the Lists App

#### Previewing on iPhone without Developer Account

#### Establishing an Apple Developer Account

- Creating an Apple Developer Account
- Registering your device to run apps directly from Xcode

#### Lists: UI with Two View Controllers That Display Table Cells

- Creating files for a dual View Controller app
- Adding a Navigation Controller to manage our two views
- Adding UI elements to the first View Controller
- Constraining the UI objects on the first View Controller
- Copying the first View Controller to create the second

#### Lists: Refining & Beautifying the UI

- Adding images from the designer
- Improving the UI design on our Storyboard screens
- Differentiating the two View Controllers
- Setting View Controller & Table View Cell classes

#### Outline Your App Idea

### Week 6

#### Building the Lists App, Continued

#### Lists: The Data Model & Linking the UI to Code

- Cleaning up the View Controller & Table View Cell files
- Connecting both UI screens to their respective files
- Creating List & List Item classes in the data model

### Week 7

#### Weather Forecast App

- Acquiring an API Key
- Using the Weather Underground API
- Reading JSON
- App Transport Security Settings
- Adding Error Messages
- Linking to an Outside Website
- Completion Handlers
- Do... Catch
- Converting Strings into Floats
- Displaying the Keyboard in the Simulator
- Dismissing the Keyboard

### Week 8

#### Met Gallery App Part 1

#### Met Gallery: Assets, Launch Screen, & Home View Controller

- Creating files for a multiple View Controller app
- Adding assets & using the Assets Catalog
- Creating a launch screen
- The Home View Controller & UI elements
- Adding constraints to the UI elements
- Connecting the View Controller to its code file

#### Met Gallery: View Controller with a Collection View

- The gallery view controller UI
- Refining the collection view
- Connecting the view controller to its respective files

#### Met Gallery: The Painting Detail View Controller

- Adding the UI objects to the Painting Detail VC
- Constraining the UI objects
- Adding Swipe & Tap Gesture Recognizers
- Connecting the View Controller to its code file

#### Final Project: Start Coding!

### Week 9

#### Met Gallery App Part 2

#### Met Gallery: Full Screen View Controller with a Scroll View

- Creating the full screen painting View Controller
- Setting size classes
- Constraining the scroll view & connecting the code

#### Met Gallery: Adding a Spinner, Data Model, & Gallery VC

- Adding a Spinner
- Creating the data model
- Adding the Collection View methods

#### Met Gallery: Painting Detail & Adding Gesture Recognizers

- Loading the painting details
- Refining the Image View
- Making the online reference button functional
- Segueing to the full screen scroll view
- Adding the image to the full screen view
- Implementing the swipe gestures

#### Work on Final Project

### Week 10

- Course Wrap Up
- Test Flight and Submitting to the App Store
- Final Projects
- Final Project Presentations

## FAQ

### How many students are in a given class?

NextGen's typical class ranges from 10-14 students, but we allow up to 17 students to register for our course. However, NextGen always maintains an 8:1 student to teacher ratio.

### Do I make my own app during the course? 

During the course, students will build multiple apps as a class and will be able to work on their own projects at the end of the class.

## Pricing

**Tuition:** $1995
