416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com...

68
© 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. #WWDC14 Modern Frameworks Session 416 Chris Parker Engineer Tools

Transcript of 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com...

Page 1: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

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

#WWDC14

Modern Frameworks

Session 416 Chris Parker Engineer

Tools

Page 2: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 3: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 4: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 5: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Live Views

Page 6: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Extensions

Page 7: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Sharing Code Between Multiple Applications

Page 8: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Publishing a Framework

Page 9: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 10: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

What Goes in It?

Page 11: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Choosing Framework ContentsLive views

Views

Controls

Custom appearance

Page 12: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Choosing Framework ContentsExtensions

Views

Controls

Custom appearance

View controllers

Service API

Resources

!

Page 13: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Choosing Framework ContentsBetween multiple applications

Views

Controls

Custom appearance

View controllers

Service API

Resources

!

Page 14: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Choosing Framework ContentsPublishing frameworks

Views

Controls

Custom appearance

View controllers

Service API

Resources

!

Page 15: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 16: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 17: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 18: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 19: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 20: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 21: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 22: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

If the code appears more than once, it probably belongs in a framework.

Page 23: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Frameworks Are API

Page 24: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

insert:at:

Page 25: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

insert:at:

Page 26: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

insertObject:atIndex:

Page 27: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

insertObject:atIndex:

Page 28: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

setBkgndColor:

Page 29: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

setBkgndColor:

Page 30: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

setBackgroundColor:

Page 31: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

setBackgroundColor:

Page 32: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

displayName:

Page 33: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

displayName:

Page 34: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;

Page 35: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;

Page 36: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

- (void)sendAction:(SEL)aSelector toObject:(id)anObject forAllCells:(BOOL)flag;

Page 37: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

- (void)sendAction:(SEL)aSelector toObject:(id)anObject forAllCells:(BOOL)flag;

Page 38: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

func containsCharacter (string: String character: Character) -> Bool

Page 39: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

func containsCharacter (string: String character: Character) -> Bool

containsCharacter(“Buddy”, “u”)

Page 40: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

func containsCharacter (#string: String #character: Character) -> Bool

Page 41: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

func containsCharacter (#string: String #character: Character) -> Bool

containsCharacter(string: “Buddy”, character: “u”)

Page 42: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

- (void)presentPopoverFromRect:(CGRect)r inView:(UIView *)v permittedArrowDirections: (UIPopoverArrowDirection)aD animated:(BOOL)a;

Page 43: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

func presentPopoverFromRect(rect: CGRect, view: UIView!, arrowDirections: UIPopoverArrowDirection, animated: Bool)

Page 44: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

presentPopoverFromRect(someRect, someView, .Any, true)

Page 45: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

func presentPopoverFromBarButtonItem( barButtonItem: UIBarButtonItem, arrowDirections: UIPopoverArrowDirection, animated: Bool)

Page 46: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

func presentPopover( fromBarButtonItem item: UIBarButtonItem, #arrowDirections: UIPopoverArrowDirection, #animated: Bool)

func presentPopover( fromRect rect: UIBarButtonItem, inView view: UIView, #arrowDirections: UIPopoverArrowDirection, #animated: Bool)

Page 47: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

presentPopover(fromBarButtonItem: someItem, arrowDirections: .Any, animated: true)

presentPopover(fromRect: someRect, inView: someView, arrowDirections: .Any, animated: true)

Page 48: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

func presentPopover( fromRect rect: UIBarButtonItem, inView view: UIView, arrowDirections: UIPopoverArrowDirection = .Any, animated: Bool = true)

Page 49: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

presentPopover(fromBarButtonItem: someItem, arrowDirections: .Any, animated: true)

presentPopover(fromRect: someRect, inView: someView, arrowDirections: .Any, animated: true)

Page 50: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

presentPopover(fromBarButtonItem: someItem)

presentPopover(fromRect: someRect, inView: someView)

Page 51: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

“Coding Guidelines for Cocoa” developer.apple.com

Page 52: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

“The Swift Programming Language” developer.apple.com

Page 53: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Publishing a FrameworkVersioning

Page 54: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Publishing a FrameworkVersioning

1 1 1 1

Page 55: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Publishing a FrameworkVersioning

1 1 1 12 2

Page 56: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Publishing a FrameworkVersioning

Framework versions

Keyed archiving • Key-value pair semantics are consistent

• Missing keys return `nil` (or the equivalent)

• Compatibility opportunities on encode and decode

• Make keys unique

Feature availability • respondsToSelector: • NSClassFromString()

Page 57: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Practicum…or “great, but how does this all work in real life?”

Page 58: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 59: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 60: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Budstagram

Page 61: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 62: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning
Page 63: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

BudstagramApplication

Allows posting and editing of photos • (as long as there’s a picture of Buddy being included)

Allows comments on existing photos (feed)

Shares a posting view controller with the plug-in

Page 64: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

BudstagramExtension

Allows posting and editing of photos from within other applications

Doesn’t allow comments on existing photos (no feed)

Shares the posting view controller with the application

Page 65: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

BudstagramFramework

Contains • Shared posting view controller

• Shared networking code for posting

!

Page 66: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Demo

Page 67: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning

Related Sessions

• Creating Extensions for iOS and OS X, Part 1 Mission Tuesday 2:00PM

• Creating Extensions for iOS and OS X, Part 2 Mission Wednesday 11:30AM

• Sharing code between iOS and OS X Presidio Friday 9:00AM

Page 68: 416 Modern Frameworks DF - Apple Developer...“Coding Guidelines for Cocoa” developer.apple.com “The Swift Programming Language” developer.apple.com Publishing a Framework Versioning