advanced ios application architecture and patterns · advanced ios application architecture and...

197
© 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. #WWDC14 Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks Colin Barrett iOS Apps and Frameworks

Upload: others

Post on 12-Sep-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

© 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

#WWDC14

Advanced iOS Application Architecture and Patterns

Session 229 Andy Matuschak iOS Apps and Frameworks

Frameworks

!

Colin Barrett iOS Apps and Frameworks

Page 2: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 3: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 4: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 5: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 6: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 7: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 8: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 9: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 10: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 11: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 12: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 13: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 14: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 15: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 16: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 17: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 18: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 19: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 20: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 21: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 22: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 23: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 24: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Software Architecture

Page 25: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Software Architecture…?

Page 26: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Five Things to Never Do in Your AppIt’s software architecture! We promise!

1. Don’t ever use class names explicitly

2. Avoid bare C functions with singletons

3. Why are you reading this?

4. It’s a joke; these are bad ideas

5. Or maybe just dogmatic ideas

Page 27: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 28: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

“You Ain’t Gonna Need It!”

Page 29: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

“You Ain’t Gonna Need It!”“Big Design Up Front.”

vs.

Page 30: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 31: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 32: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

architecturetaste

ability

Page 33: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

abilityarchitecture

taste

Page 34: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 35: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Insight, not dogma

Page 36: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Insight, not dogmaWhy, not how

Page 37: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 38: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 39: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Design Information Flow1

Page 40: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett
Page 41: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Define Clear Responsibilities2

Page 42: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Simplify with Immutability3

Page 43: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Simplify with Immutability3

Page 44: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Design information flow1

Define clear responsibilities2

Simplify with immutability3

Page 45: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Design information flow1

Define clear responsibilities2

Simplify with immutability3

Page 46: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Where Is “Truth”?

Page 47: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

DemoWhere is truth?

Page 48: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

photo tap action text view focus action

drawer view exists?

Page 49: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

photo tap action text view focus action

drawer view exists?

drawer expanded?

Page 50: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

photo tap action text view focus action

drawer view exists?

drawer expanded?

Page 51: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

photo tap action text view focus action

drawer view exists?

drawer expanded?

Page 52: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Where Is “Truth”?

photo tap action text view focus actiondrawer view exists?

drawer expanded?

Page 53: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Where Is “Truth”?

photo tap action text view focus actiondrawer view exists?

drawer expanded?

Page 54: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

drawer view exists?

drawer expanded?

Page 55: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

derived value

truthTruth

Derived values

vs.

Page 56: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

DemoTruth vs. derived values

Page 57: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value character count

model

Page 58: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Derived Values

derived value

input A input B

Page 59: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Derived Values

Compute from inputs

derived value

input A input B

Page 60: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Derived Values

Compute from inputs

Recompute when inputs change

derived value

input A input B

Page 61: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Derived Values

Compute from inputs

Recompute when inputs change

…Like a cache!

derived value

input A input B

Page 62: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

original data

cached data

Page 63: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

original data

cached data

Page 64: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

staleness

original data

cached data

Page 65: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

staleness

original data

cached data

Page 66: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

staleness

original data

cached data

Page 67: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

staleness

original data

cached data

Page 68: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

staleness efficiency

original data

cached data

Page 69: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

staleness efficiency

truth

derived values

Page 70: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

truth

derived values

staleness efficiency

Page 71: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value character count

model

Page 72: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value character count

model

defines

Page 73: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value character count

model

definesinvalidates

Page 74: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value character count

model

definesinvalidates

defines

Page 75: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value

character count

model

definesinvalidates defines

invalidates

Page 76: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value

character count

model

definesinvalidates

invalidates

defines

Page 77: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value character count

model

definesinvalidates

defines

Page 78: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value character count

model

definesinvalidates

definesinvalidates

Page 79: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Truth vs. Derived Values

character count

model

text view value

Page 80: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

model

text view value

Page 81: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value

model

Page 82: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

model

text view value

Page 83: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Creating New Truth

derived value

truth

Page 84: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

DemoCreating new truth

Page 85: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value character count

model

Page 86: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value character count

model

Page 87: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

text view value character count

model

original model

entry viewing controller

entry editing controller

Page 88: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Creating New Truth

text view value character count

model

original model

entry viewing controller

entry editing controller

Page 89: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Design Information Flow1

Page 90: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Design Information Flow

Where is “truth”?

1

Page 91: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Design Information Flow

Where is “truth”?

Truth vs. derived values

1

Page 92: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Design Information Flow

Where is “truth”?

Truth vs. derived values

Creating new truth

1

Page 93: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Simplify with immutability3

Design information flow1

Define clear responsibilities2

Page 94: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Username Johny Appleseed ?

Password ••••••••••••••

ConfirmPassword ••••••••••••••

Email [email protected]

Sign In

Invalid username or password!

Sign InForgot password?

Page 95: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Page 96: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Check if valid

If all valid

Enable sign-up button

For each text field

Page 97: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

For each text field

Check if valid

If all valid

Enable sign-up button

Page 98: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

For each text field

Check if valid

If all valid

Enable sign-up button

Page 99: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Check username field

Check first password field

Check second password field equals first

Check email address field

For each text field

Check if valid

If all valid

Enable sign-up button

Page 100: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Check username field

Check first password field

Check second password field equals first

Check email address field

For each text field

Check if valid

If all valid

Enable sign-up button

Page 101: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Check username field

Check first password field

Check second password field equals first

Check email address field

Page 102: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Check username field

Check first password field

Check second password field equals first

Check email address field

Page 103: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Create a regular expression

Find matches in username

If have any matches

Username is valid

Check username field

Check first password field

Check second password field equals first

Check email address fieldOtherwise

Decorate text field

Page 104: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationHandling nil

For each text field

Check if valid

If all valid

Enable sign-up button

Page 105: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationHandling nil

For each text field

Check if valid

If all valid

Enable sign-up button

Page 106: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationHandling nil

For each text field

Check if valid

If all valid

Enable sign-up button

Page 107: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationHandling nil

If nil

Leave text field alone

For each text field

Check if valid

If all valid

Enable sign-up button

Page 108: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationHandling nil

For each text field

Check if valid

If all valid

Enable sign-up button

Page 109: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationHandling nil

For each text field

Check if valid

If all valid

Enable sign-up button

Page 110: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationHandling nil

If any nil

Leave sign-up button disabled

For each text field

Check if valid

If all valid

Enable sign-up button

Page 111: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Create a regular expression

Find matches in username

If have any matches

Username is valid

Check username field

Check first password field

Check second password field equals first

Check email address fieldOtherwise

Decorate text field

Page 112: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

NSString *username = [self.usernameField text]; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@“[a-zA-Z0-9_]{6,}” options:0 error:nil]; NSRange result = [regex rangeOfFirstMatchInString:username options:NSMatchingAnchored range:NSMakeRange(0, [username length])]; if (username && result.location == NSNotFound) { allValid = NO; [self.usernameField setBackgroundColor:[UIColor redColor]]; } else { if (!username) { anyNil = YES; } [self.usernameField setBackgroundColor:[UIColor whiteColor]]]; }

Page 113: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

NSString *username = [self.usernameField text]; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@“[a-zA-Z0-9_]{6,}” options:0 error:nil]; NSRange result = [regex rangeOfFirstMatchInString:username options:NSMatchingAnchored range:NSMakeRange(0, [username length])]; if (username && result.location == NSNotFound) { allValid = NO; [self.usernameField setBackgroundColor:[UIColor redColor]]; } else { if (!username) { anyNil = YES; } [self.usernameField setBackgroundColor:[UIColor whiteColor]]]; }

Page 114: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

View Controller A

Text Field

Text Field

Text Field

Button

Page 115: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

View Controller A

Text Field

Text Field

Text Field

ButtonValidation

Page 116: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

View Controller A

Text Field

Text Field

Text Field

ButtonValidation

View Controller B

Text Field

Text Field

ButtonValidation

Page 117: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

View Controller B

Text Field

Text Field

Button

View Controller A

Text Field

Text Field

Text Field

Button

ValidationValidation

Page 118: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Page 119: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

What is validation?

Page 120: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

What is validation? Inputs Outputs

Page 121: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

What is validation?• Given an input value

Inputs Outputs

inputValue: Any

Page 122: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

What is validation?• Given an input value

• Is input value valid?

Inputs Outputs

inputValue: Any isValid: Bool

Page 123: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

What is validation?• Given an input value

• Is input value valid?

• If not, why not?

Inputs Outputs

inputValue: Any isValid: Bool

error: NSError?

Page 124: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationFoundations

Page 125: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationFoundations

protocol Validator { validateWithError(error: NSErrorPointer) -> Bool }

Page 126: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationFoundations

protocol Validator { validateWithError(error: NSErrorPointer) -> Bool }

Definition of “input” left open to interpretation

Page 127: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationFoundations

protocol Validator { validateWithError(error: NSErrorPointer) -> Bool }

Definition of “input” left open to interpretation

Build larger validators out of smaller ones

Page 128: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationFoundations

protocol Validator { validateWithError(error: NSErrorPointer) -> Bool }

Definition of “input” left open to interpretation

Build larger validators out of smaller ones

Composition

Page 129: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationFoundations

protocol Validator { validateWithError(error: NSErrorPointer) -> Bool }

Definition of “input” left open to interpretation

Build larger validators out of smaller ones

Composition

Works fine in Objective-C, too

Page 130: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationUsernames

Page 131: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationUsernames

class UsernameValidator: Validator { var input: NSString? func validateWithError(error: NSErrorPointer) -> Bool { let regex = NSRegularExpression(pattern: ...) ... }}

Page 132: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationPasswords

Page 133: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationPasswords

class PasswordValidator: Validator { var input: NSString? ...}

Page 134: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationPasswords

class PasswordValidator: Validator { var input: NSString? ...}

Represents the validity of a single password field

Page 135: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationPasswords

class PasswordValidator: Validator { var input: NSString? ...}

Represents the validity of a single password fieldclass SetPasswordValidator: Validator { let firstPasswordValidator = PasswordValidator() let secondPasswordValidator = PasswordValidator() ...}

Page 136: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationPasswords

class PasswordValidator: Validator { var input: NSString? ...}

Represents the validity of a single password fieldclass SetPasswordValidator: Validator { let firstPasswordValidator = PasswordValidator() let secondPasswordValidator = PasswordValidator() ...}

Represents two password fields that must match in value

Page 137: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationOverall form

Page 138: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationOverall form

class SignUpValidator: Validator { let usernameValidator = UsernameValidator() let setPasswordValidator = SetPasswordValidator() let emailAddressValidator = EmailAddressValidator() ...}

Page 139: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationOverall form

class SignUpValidator: Validator { let usernameValidator = UsernameValidator() let setPasswordValidator = SetPasswordValidator() let emailAddressValidator = EmailAddressValidator() ...}

Represents the validity of the entire form

Page 140: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationOverall form

class SignUpValidator: Validator { let usernameValidator = UsernameValidator() let setPasswordValidator = SetPasswordValidator() let emailAddressValidator = EmailAddressValidator() ...}

Represents the validity of the entire form

Behavior of nil

Page 141: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationOverall form

class SignUpValidator: Validator { let usernameValidator = UsernameValidator() let setPasswordValidator = SetPasswordValidator() let emailAddressValidator = EmailAddressValidator() ...}

Represents the validity of the entire form

Behavior of nil• Most validators allow nil

Page 142: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

ValidationOverall form

class SignUpValidator: Validator { let usernameValidator = UsernameValidator() let setPasswordValidator = SetPasswordValidator() let emailAddressValidator = EmailAddressValidator() ...}

Represents the validity of the entire form

Behavior of nil• Most validators allow nil

• SignUpValidator verifies contained inputs are non-nil

Page 143: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Page 144: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Validation

Set input on corresponding validator

Enable sign-up button

Decorate invalid text fields

For each text field

If sign-up validator OK

Otherwise

Page 145: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Define Clear Responsibilities2

Page 146: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Simplify with immutability3

Design information flow1

Define clear responsibilities2

Page 147: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

“Mutability is bad and you should feel bad for using it”

The Internet, probably…

Page 148: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Insight, not dogmaWhy, not how

Page 149: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

5

A

B

C

Page 150: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

5

A

B

C

Page 151: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

5

5

A

B

C

Page 152: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

99

99

A

B

C

Page 153: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

99

99

A

B

C

Page 154: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

99

A

B

C

Page 155: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

99 99

99

A

B

C

Page 156: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

99 99

99

A

B

C

Page 157: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

99 99

99

A

B

C

Page 158: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

5

A

B

C

Page 159: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

5

A

B

C

Page 160: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

5

5

A

B

C

Page 161: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

995

5

A

B

C

Page 162: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

99

5

5

A

B

C

Page 163: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Swift StructsBest of both worlds

Page 164: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Swift StructsBest of both worlds

Opt-in mutability • mutating keyword

Page 165: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Swift StructsBest of both worlds

Opt-in mutability • mutating keyword

Call-by-value • New copy automatically created when passing struct to another function

Page 166: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

55

A

B

C

Page 167: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

55

A

B

C

Page 168: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

5

5

A

B

C

Page 169: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

5

9999

A

B

C

Page 170: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

5

9999

A

B

C

Page 171: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

5 99

99

A

B

C

Page 172: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffect

Page 173: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffect

Adjust views based on gyroscope data

Page 174: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffect

Adjust views based on gyroscope data

Used to achieve parallax effects

Page 175: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffect

Adjust views based on gyroscope data

Used to achieve parallax effects

Reusable across views

Page 176: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffect

Adjust views based on gyroscope data

Used to achieve parallax effects

Reusable across views

Low-latency requirements

Page 177: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffect

Page 178: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffect

Inputs Outputs

Page 179: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffect

Inputs Outputs

Device pose

Page 180: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffect

Inputs Outputs

Device pose Relative offset for each key path

Page 181: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Inputs Outputs

UIMotionEffectInput deltas

Page 182: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Inputs Outputs

UIMotionEffectInput deltas

Device pose deltas

Page 183: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Inputs Outputs

UIMotionEffectInput deltas

Device pose deltas Relative offset for each key path

Page 184: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Inputs Outputs

UIMotionEffectInput deltas

Previous poses

Device pose deltas Relative offset for each key path

Page 185: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffectAbsolute offsets

Inputs Outputs

Page 186: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffectAbsolute offsets

Inputs Outputs

Device pose

Page 187: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffectAbsolute offsets

Inputs Outputs

Device pose Value for each key path

Page 188: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

UIMotionEffectAbsolute offsets

Inputs Outputs

A particular view

Device pose Value for each key path

Page 189: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Simplify with Immutability3

Page 190: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Review

Page 191: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Design Information Flow1

Page 192: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Define Clear Responsibilities2

Page 193: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Simplify with Immutability3

Page 194: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

What now?

Page 195: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

More Information

Jake Behrens App Frameworks Evangelist [email protected]

Apple Developer Forums http://devforums.apple.com

Page 196: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett

Related Sessions

• Core iOS Application Architectural Patterns Mission Thursday 9:00AM

Page 197: Advanced iOS Application Architecture and Patterns · Advanced iOS Application Architecture and Patterns Session 229 Andy Matuschak iOS Apps and Frameworks Frameworks! Colin Barrett