# iOS App Development Bootcamp

Canonical URL: <https://www.nobledesktop.com/classes/ios-app-development-bootcamp>

## Overview

Build your very own iPhone or iPad apps using Swift and Xcode. In class, you’ll start by learning iOS programming fundamentals. You’ll learn how to use Xcode and the Swift programming language to build apps using the most common and useful iOS development features and APIs. Concurrent with class projects, you will work on your own final project as homework and receive guidance on that project from the instructor.

The training does not require any specific previous programming experience, but it is helpful. You should have some experience with some type of code such as HTML, CSS, Python, JavaScript, etc. The more coding experience you have coming into this class, the better. To add apps developed in class to your personal device or the App Store, you will need an Apple Developer account that costs $99, which we will set up in class.

## 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 efficient apps
- Add image assets for your apps, launch screens, and App Store listings
- Build adaptable layouts that work across all iPhones & iPads
- Add embedded videos, map location, and external web links
- Learn to use data models, including external datasets
- Preview your apps on your own device, and create your own app with guidance from the instructor

## Curriculum

### Week 1

#### Introduction to Tools of the Course

- XCode
- iOS
- Swift

#### Projects

- 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

**Skills covered:** Swift, Xcode

## FAQ

### Do I need to bring anything to the class?


We provide a Mac with a Xcode for use during the course. However, we recommended that attendees bring and work on their own Mac so that they can continue practicing at home.

## Pricing

**Tuition:** $2495

Payment options: pay-as-you-go installments.
