What s New in Cocoa. App Frameworks #WWDC17. Ali Ozer Daphne Larose

Size: px
Start display at page:

Download "What s New in Cocoa. App Frameworks #WWDC17. Ali Ozer Daphne Larose"

Transcription

1 Session App Frameworks #WWDC17 What s New in Cocoa 207 Ali Ozer Daphne Larose 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

2 API Refinements AppKit Foundation

3 API Refinements Ali Ozer, Director, Cocoa

4 API Refinements Properties Nullability Generics Swift naming guidelines String enumerations Nested types

5 API Refinements Properties Nullability Generics Swift naming guidelines String enumerations Nested types

6 String Enumerations and Nested Types // NSSharingService, Swift 3 public let NSSharingServiceNameCompose String public let NSSharingServiceNameComposeMessage: String public let NSSharingServiceNameSendViaAirDrop: String public let NSSharingServiceNameAddToSafariReadingList: String... open class NSSharingService : NSObject {... public init?(named servicename: String) }

7 String Enumerations and Nested Types // NSSharingService, Swift 3 public let NSSharingServiceNameCompose String public let NSSharingServiceNameComposeMessage: String public let NSSharingServiceNameSendViaAirDrop: String public let NSSharingServiceNameAddToSafariReadingList: String... open class NSSharingService : NSObject {... public init?(named servicename: String) }

8 String Enumerations and Nested Types // NSSharingService, Swift 3 public let NSSharingServiceNameCompose String public let NSSharingServiceNameComposeMessage: String public let NSSharingServiceNameSendViaAirDrop: String public let NSSharingServiceNameAddToSafariReadingList: String... open class NSSharingService : NSObject {... public init?(named servicename: String) }

9 // NSSharingService, Swift 4 open class NSSharingService : NSObject {... public struct Name : RawRepresentable, Equatable, Hashable { }... public init?(named servicename: NSSharingService.Name) } extension NSSharingService.Name { public static let compose NSSharingService.Name public static let composemessage: NSSharingService.Name public static let sendviaairdrop: NSSharingService.Name public static let addtosafarireadinglist: NSSharingService.Name... }

10 // NSSharingService, Swift 4 open class NSSharingService : NSObject {... public struct Name : RawRepresentable, Equatable, Hashable { }... public init?(named servicename: NSSharingService.Name) } extension NSSharingService.Name { public static let compose NSSharingService.Name public static let composemessage: NSSharingService.Name public static let sendviaairdrop: NSSharingService.Name public static let addtosafarireadinglist: NSSharingService.Name... }

11 // NSSharingService, Swift 4 open class NSSharingService : NSObject {... public struct Name : RawRepresentable, Equatable, Hashable { }... public init?(named servicename: NSSharingService.Name) } extension NSSharingService.Name { public static let compose NSSharingService.Name public static let composemessage: NSSharingService.Name public static let sendviaairdrop: NSSharingService.Name public static let addtosafarireadinglist: NSSharingService.Name... }

12 // NSSharingService, Swift 4 open class NSSharingService : NSObject {... public struct Name : RawRepresentable, Equatable, Hashable { }... public init?(named servicename: NSSharingService.Name) } extension NSSharingService.Name { public static let compose NSSharingService.Name public static let composemessage: NSSharingService.Name public static let sendviaairdrop: NSSharingService.Name public static let addtosafarireadinglist: NSSharingService.Name... }

13 // Swift 3 let s = NSSharingService(named: NSSharingServiceNameCompose ) // Swift 4 let s = NSSharingService(named:.compose )

14 // Swift 3 let s = NSSharingService(named: NSSharingServiceNameCompose ) // Swift 4 let s = NSSharingService(named:.compose )

15 // Swift 3 let s = NSSharingService(named: NSSharingServiceNameCompose ) // Swift 4 let s = NSSharingService(named:.compose )

16 // Swift 3 let s = NSSharingService(named: NSSharingServiceNameCompose ) // Swift 4 let s = NSSharingService(named:.compose )

17 // Swift 3 let s = NSSharingService(named: NSSharingServiceNameCompose ) // Swift 4 let s = NSSharingService(named:.compose )

18 Source Compatibility Objective-C

19 Source Compatibility Objective-C typedef NSString *NSSharingServiceName NS_EXTENSIBLE_STRING_ENUM; APPKIT_EXTERN NSSharingServiceName const NSSharingServiceNameCompose ; APPKIT_EXTERN NSSharingServiceName const NSSharingServiceNameComposeMessage; APPKIT_EXTERN NSSharingServiceName const NSSharingServiceNameSendViaAirDrop; APPKIT_EXTERN NSSharingServiceName const NSSharingServiceNameAddToSafariReadingList;...

20 Source Compatibility Objective-C typedef NSString *NSSharingServiceName NS_EXTENSIBLE_STRING_ENUM; APPKIT_EXTERN NSSharingServiceName const NSSharingServiceNameCompose ; APPKIT_EXTERN NSSharingServiceName const NSSharingServiceNameComposeMessage; APPKIT_EXTERN NSSharingServiceName const NSSharingServiceNameSendViaAirDrop; APPKIT_EXTERN NSSharingServiceName const NSSharingServiceNameAddToSafariReadingList;... Source compatible

21 Source Compatibility Swift

22 Source Compatibility Swift // Swift 3 public let NSSharingServiceNameCompose String...

23 Source Compatibility Swift // Swift 3 public let NSSharingServiceNameCompose String... // Swift 4 public static let compose NSSharingService.Name...

24 Source Compatibility Swift // Swift 3 public let NSSharingServiceNameCompose String... // Swift 4 public static let compose NSSharingService.Name... Source compatible in Swift 3 mode

25 Source Compatibility Swift // Swift 3 public let NSSharingServiceNameCompose String... // Swift 4 public static let compose NSSharingService.Name... Source compatible in Swift 3 mode Migrator for moving to Swift 4

26 AppKit

27

28 Touch Bar

29 Touch Bar Escape Control Strip

30 Touch Bar Escape Application Region Control Strip

31 Multi-Touch Input Device with Retina Display

32 Multi-Touch Input Device with Retina Display

33 Context Sensitive

34 Context Sensitive

35 Context Sensitive

36 Context Sensitive

37 Context Sensitive

38 Context Sensitive

39 Customizable

40 Customizable

41 Customizable

42 Customizable

43 Customizable

44 Customizable

45 Customizable

46 Customizable

47 Customizable

48

49

50

51

52 Unobstructed Access to Content

53 Unobstructed Access to Content

54 Touch Bar Updates NSColorPickerTouchBarItem NSGroupTouchBarItem Playground

55 Touch Bar Color Pickers

56 Touch Bar Color Pickers

57 Touch Bar Color Pickers

58 New Color Pickers

59 New Color Pickers

60 New Color Pickers

61 New Color Pickers

62 New Color Pickers

63 New Color Pickers

64 New Color Pickers

65 New Color Pickers

66 New Color Pickers

67 NSColorPickerTouchBarItem

68 NSColorPickerTouchBarItem open class NSColorPickerTouchBarItem : NSTouchBarItem {... open var allowedcolorspaces: [NSColorSpace]? }

69 NSColorPickerTouchBarItem

70 NSColorPickerTouchBarItem colorpicker.allowedcolorspaces = [.genericcmyk]

71 NSColorPickerTouchBarItem colorpicker.allowedcolorspaces = [.genericcmyk] colorpicker.allowedcolorspaces = [.genericgamma22gray]

72 NSGroupTouchBarItem Constructor for alert style

73 NSGroupTouchBarItem Constructor for alert style

74 NSGroupTouchBarItem Constructor for alert style

75 NSGroupTouchBarItem Constructor for alert style open class NSGroupTouchBarItem... {... public init(alertstylegroupitemwithidentifier: NSTouchBarItem.Identifier) }

76 NSGroupTouchBarItem Constructor for alert style Ability to specify compression options

77 NSGroupTouchBarItem Constructor for alert style Ability to specify compression options

78 NSGroupTouchBarItem Constructor for alert style Ability to specify compression options

79 NSGroupTouchBarItem Constructor for alert style Ability to specify compression options

80 NSGroupTouchBarItem Constructor for alert style Ability to specify compression options open class NSGroupTouchBarItem... {... open var prioritizedcompressionoptions: [NSUserInterfaceCompressionOptions] }

81 NSGroupTouchBarItem Constructor for alert style Ability to specify compression options Support for right-to-left interfaces

82 NSGroupTouchBarItem Constructor for alert style Ability to specify compression options Support for right-to-left interfaces

83 NSGroupTouchBarItem Constructor for alert style Ability to specify compression options Support for right-to-left interfaces

84 NSGroupTouchBarItem Constructor for alert style Ability to specify compression options Support for right-to-left interfaces

85 NSGroupTouchBarItem Constructor for alert style Ability to specify compression options Support for right-to-left interfaces open class NSGroupTouchBarItem... {... open var groupuserinterfacelayoutdirection: NSUserInterfaceLayoutDirection }

86 Playground Support

87

88

89 NSTouchBar Sessions and Lab Touch Bar Fundamentals Grand Ballroom A Wednesday 10:00AM Advanced Touch Bar Grand Ballroom A Wednesday 5:10PM Cocoa Touch Bar Lab Technology Lab C Thursday 9:00-11:00AM

90 Document Sharing In Sierra, we introduced: public static let cloudsharing: NSSharingService.Name

91

92

93

94

95

96

97

98

99

100

101

102 Zero

103

104

105 Document Sharing

106 Document Sharing open class NSDocument... {... open var allowsdocumentsharing: Bool { get } open func share(with sharingservice: NSSharingService, completionhandler: ((Bool) -> Void)? = nil) open func prepare(_ sharingservicepicker: NSSharingServicePicker) }

107 Document Sharing open class NSDocument... {... open var allowsdocumentsharing: Bool { get } open func share(with sharingservice: NSSharingService, completionhandler: ((Bool) -> Void)? = nil) open func prepare(_ sharingservicepicker: NSSharingServicePicker) }

108 Document Sharing open class NSDocument... {... open var allowsdocumentsharing: Bool { get } open func share(with sharingservice: NSSharingService, completionhandler: ((Bool) -> Void)? = nil) open func prepare(_ sharingservicepicker: NSSharingServicePicker) }

109 Document Sharing open class NSDocument... {... open var allowsdocumentsharing: Bool { get } open func share(with sharingservice: NSSharingService, completionhandler: ((Bool) -> Void)? = nil) open func prepare(_ sharingservicepicker: NSSharingServicePicker) }

110 Document Sharing open class NSDocument... {... open var allowsdocumentsharing: Bool { get } open func share(with sharingservice: NSSharingService, completionhandler: ((Bool) -> Void)? = nil) open func prepare(_ sharingservicepicker: NSSharingServicePicker) } open class NSDocumentController... {... open var allowsautomaticsharemenu: Bool { get } open func standardsharemenuitem() -> NSMenuItem }

111 Document Sharing open class NSDocument... {... open var allowsdocumentsharing: Bool { get } open func share(with sharingservice: NSSharingService, completionhandler: ((Bool) -> Void)? = nil) open func prepare(_ sharingservicepicker: NSSharingServicePicker) } open class NSDocumentController... {... open var allowsautomaticsharemenu: Bool { get } open func standardsharemenuitem() -> NSMenuItem }

112 Document Sharing open class NSDocument... {... open var allowsdocumentsharing: Bool { get } open func share(with sharingservice: NSSharingService, completionhandler: ((Bool) -> Void)? = nil) open func prepare(_ sharingservicepicker: NSSharingServicePicker) } open class NSDocumentController... {... open var allowsautomaticsharemenu: Bool { get } open func standardsharemenuitem() -> NSMenuItem }

113 Tabbed Windows

114 Tabbed Windows

115 Tabbed Windows

116 Tab Overview

117 Tab Overview

118 Tab Overview

119 Tab Overview

120 NSWindowTab open class NSWindowTab : NSObject { open var title: open var attributedtitle: NSAttributedString? open var tooltip: String! open var accessoryview: NSView? }

121 NSWindowTab open class NSWindowTab : NSObject { open var title: open var attributedtitle: NSAttributedString? open var tooltip: String! open var accessoryview: NSView? }

122 NSWindowTab open class NSWindowTab : NSObject { open var title: open var attributedtitle: NSAttributedString? open var tooltip: String! open var accessoryview: NSView? }

123 NSWindowTab open class NSWindowTab : NSObject { open var title: open var attributedtitle: NSAttributedString? open var tooltip: String! open var accessoryview: NSView? }

124 NSWindowTab open class NSWindowTab : NSObject { open var title: open var attributedtitle: NSAttributedString? open var tooltip: String! open var accessoryview: NSView? }

125 NSWindowTabGroup open class NSWindowTabGroup : NSObject { open var identifier: NSWindow.TabbingIdentifier { get } open var isoverviewvisible: Bool open var istabbarvisible: Bool { get } open var windows: [NSWindow] { get } weak open var selectedwindow: NSWindow? } open func addwindow(_ window: NSWindow) open func insertwindow(_ window: NSWindow, at index: Int) open func removewindow(_ window: NSWindow)

126 NSWindowTabGroup open class NSWindowTabGroup : NSObject { open var identifier: NSWindow.TabbingIdentifier { get } open var isoverviewvisible: Bool open var istabbarvisible: Bool { get } open var windows: [NSWindow] { get } weak open var selectedwindow: NSWindow? } open func addwindow(_ window: NSWindow) open func insertwindow(_ window: NSWindow, at index: Int) open func removewindow(_ window: NSWindow)

127 NSWindowTabGroup open class NSWindowTabGroup : NSObject { open var identifier: NSWindow.TabbingIdentifier { get } open var isoverviewvisible: Bool open var istabbarvisible: Bool { get } open var windows: [NSWindow] { get } weak open var selectedwindow: NSWindow? } open func addwindow(_ window: NSWindow) open func insertwindow(_ window: NSWindow, at index: Int) open func removewindow(_ window: NSWindow)

128 NSWindowTabGroup open class NSWindowTabGroup : NSObject { open var identifier: NSWindow.TabbingIdentifier { get } open var isoverviewvisible: Bool open var istabbarvisible: Bool { get } open var windows: [NSWindow] { get } weak open var selectedwindow: NSWindow? } open func addwindow(_ window: NSWindow) open func insertwindow(_ window: NSWindow, at index: Int) open func removewindow(_ window: NSWindow)

129 Opening URLs

130 Opening URLs public protocol NSApplicationDelegate {... optional func application(_ application: NSApplication, open urls: [URL]) }

131 NSCollectionView Prefetching

132 NSCollectionView

133 NSCollectionView Visible Items

134 NSCollectionView Visible Items

135 NSCollectionView Visible Items

136 NSCollectionView Visible Items Prefetched Items

137 NSCollectionView Prefetching open class NSCollectionView... {... weak open var prefetchdatasource: NSCollectionViewPrefetching? }

138 NSCollectionView Prefetching open class NSCollectionView... {... weak open var prefetchdatasource: NSCollectionViewPrefetching? } public protocol NSCollectionViewPrefetching... { public func collectionview(_ collectionview: NSCollectionView, prefetchitemsat: [IndexPath]) optional public func collectionview(_ collectionview: NSCollectionView, cancelprefetchingforitemsat: [IndexPath]) }

139 NSCollectionView Prefetching open class NSCollectionView... {... weak open var prefetchdatasource: NSCollectionViewPrefetching? } public protocol NSCollectionViewPrefetching... { public func collectionview(_ collectionview: NSCollectionView, prefetchitemsat: [IndexPath]) optional public func collectionview(_ collectionview: NSCollectionView, cancelprefetchingforitemsat: [IndexPath]) }

140 NSCollectionView Prefetching open class NSCollectionView... {... weak open var prefetchdatasource: NSCollectionViewPrefetching? } public protocol NSCollectionViewPrefetching... { public func collectionview(_ collectionview: NSCollectionView, prefetchitemsat: [IndexPath]) optional public func collectionview(_ collectionview: NSCollectionView, cancelprefetchingforitemsat: [IndexPath]) }

141 System Colors

142 System Colors open class NSColor... {... open class var systemblue: NSColor { get } open class var systembrown: NSColor { get } open class var systemgray: NSColor { get } open class var systemgreen: NSColor { get } open class var systemorange: NSColor { get } open class var systempink: NSColor { get } open class var systempurple: NSColor { get } open class var systemred: NSColor { get } open class var systemyellow: NSColor { get } }

143 System Colors open class NSColor... {... open class var systemblue: NSColor { get } open class var systembrown: NSColor { get } open class var systemgray: NSColor { get } open class var systemgreen: NSColor { get } open class var systemorange: NSColor { get } open class var systempink: NSColor { get } open class var systempurple: NSColor { get } open class var systemred: NSColor { get } open class var systemyellow: NSColor { get } }

144 Older Standard Colors Now in srgb

145 Older Standard Colors Now in srgb open class NSColor... { open class var red: NSColor { get } /* 1.0, 0.0, 0.0 RGB */ open class var green: NSColor { get } /* 0.0, 1.0, 0.0 RGB */ open class var yellow: NSColor { get } /* 1.0, 1.0, 0.0 RGB */... open class var gray: NSColor { get } /* 0.5 white */ open class var lightgray: NSColor { get } /* white */ open class var white: NSColor { get } /* 1.0 white */ }

146 Older Standard Colors Now in srgb open class NSColor... { open class var red: NSColor { get } /* 1.0, 0.0, 0.0 RGB */ open class var green: NSColor { get } /* 0.0, 1.0, 0.0 RGB */ open class var yellow: NSColor { get } /* 1.0, 1.0, 0.0 RGB */... open class var gray: NSColor { get } /* 0.5 white */ open class var lightgray: NSColor { get } /* white */ open class var white: NSColor { get } /* 1.0 white */ } These now use srgb or genericgamma22gray

147 Older Standard Colors Now in srgb open class NSColor... { open class var red: NSColor { get } /* 1.0, 0.0, 0.0 RGB */ open class var green: NSColor { get } /* 0.0, 1.0, 0.0 RGB */ open class var yellow: NSColor { get } /* 1.0, 1.0, 0.0 RGB */... open class var gray: NSColor { get } /* 0.5 white */ open class var lightgray: NSColor { get } /* white */ open class var white: NSColor { get } /* 1.0 white */ } These now use srgb or genericgamma22gray For apps linked against the SDK or later

148 Older Standard Colors Now in srgb Generic RGB open class NSColor... { open class var red: NSColor { get } /* 1.0, 0.0, 0.0 RGB */ open class var green: NSColor { get } /* 0.0, 1.0, 0.0 RGB */ open class var yellow: NSColor { get } /* 1.0, 1.0, 0.0 RGB */... open class var gray: NSColor { get } /* 0.5 white */ open class var lightgray: NSColor { get } /* white */ open class var white: NSColor { get } /* 1.0 white */ } These now use srgb or genericgamma22gray For apps linked against the SDK or later

149 Older Standard Colors Now in srgb Generic RGB srgb open class NSColor... { open class var red: NSColor { get } /* 1.0, 0.0, 0.0 RGB */ open class var green: NSColor { get } /* 0.0, 1.0, 0.0 RGB */ open class var yellow: NSColor { get } /* 1.0, 1.0, 0.0 RGB */... open class var gray: NSColor { get } /* 0.5 white */ open class var lightgray: NSColor { get } /* white */ open class var white: NSColor { get } /* 1.0 white */ } These now use srgb or genericgamma22gray For apps linked against the SDK or later

150 Colors in Asset Catalogs

151 Colors in Asset Catalogs

152 Colors in Asset Catalogs

153 Colors in Asset Catalogs open class NSColor... {... public init?(named name: NSColor.Name) public init?(named name: NSColor.Name, bundle: NSBundle?) }

154 NSAccessibilityCustomRotor

155 NSAccessibilityCustomRotor

156 NSAccessibilityCustomRotor public protocol NSAccessibility... {... func accessibilitycustomrotors() -> [NSAccessibilityCustomRotor] }

157 Property Clean-Up

158 Property Clean-Up // // NSWindow unowned(unsafe) open var firstresponder: NSResponder { get } // NSBox unowned(unsafe) open var contentview: NSView?...

159 Property Clean-Up // // NSWindow unowned(unsafe) open var firstresponder: NSResponder { get } // NSBox unowned(unsafe) open var contentview: NSView?... // // NSWindow weak open var firstresponder: NSResponder? { get } // NSBox open var contentview: NSView?...

160 Property Clean-Up // // NSWindow unowned(unsafe) open var firstresponder: NSResponder { get } // NSBox unowned(unsafe) open var contentview: NSView?... // // NSWindow weak open var firstresponder: NSResponder? { get } // NSBox open var contentview: NSView?...

161 Text

162 Text Improved handling of orphan text in NSTextField

163 Text Improved handling of orphan text in NSTextField CGGlyph-based APIs in NSFont, NSBezierPath

164 Text Improved handling of orphan text in NSTextField CGGlyph-based APIs in NSFont, NSBezierPath NSFontAssetRequest for downloading fonts

165 Text Improved handling of orphan text in NSTextField CGGlyph-based APIs in NSFont, NSBezierPath NSFontAssetRequest for downloading fonts Nastaliq script

166 Text Improved handling of orphan text in NSTextField CGGlyph-based APIs in NSFont, NSBezierPath NSFontAssetRequest for downloading fonts Nastaliq script

167 Text Improved handling of orphan text in NSTextField CGGlyph-based APIs in NSFont, NSBezierPath NSFontAssetRequest for downloading fonts Nastaliq script

168 Honorable Mentions

169 Honorable Mentions NSSegmentedControl alignment and distribution properties

170 Honorable Mentions NSSegmentedControl alignment and distribution properties NSLevelIndicator new look and API refinements

171 Honorable Mentions NSSegmentedControl alignment and distribution properties NSLevelIndicator new look and API refinements NSMenuItem allowskeyequivalentwhenhidden

172 Honorable Mentions NSSegmentedControl alignment and distribution properties NSLevelIndicator new look and API refinements NSMenuItem allowskeyequivalentwhenhidden NSTableView automatic variable row heights

173 Honorable Mentions NSSegmentedControl alignment and distribution properties NSLevelIndicator new look and API refinements NSMenuItem allowskeyequivalentwhenhidden NSTableView automatic variable row heights Asynchronous restorable state encoding

174 Honorable Mentions NSSegmentedControl alignment and distribution properties NSLevelIndicator new look and API refinements NSMenuItem allowskeyequivalentwhenhidden NSTableView automatic variable row heights Asynchronous restorable state encoding Improved handling of large items during dragging

175 Honorable Mentions NSSegmentedControl alignment and distribution properties NSLevelIndicator new look and API refinements NSMenuItem allowskeyequivalentwhenhidden NSTableView automatic variable row heights Asynchronous restorable state encoding Improved handling of large items during dragging Drawers - drop them

176 Container Views in Cocoa

177 Container Views in Cocoa NSBrowser NSTableView NSOutlineView NSCollectionView NSStackView NSGridView

178 Container Views in Cocoa NSBrowser NSTableView NSOutlineView NSCollectionView NSStackView NSGridView Choosing the Right Cocoa Container View Grand Ballroom A Wednesday 3:10PM

179

180 print(obj)

181

182 NSView and NSWindow.print() Renamed open class NSView... { }... open func printview(_ sender: Any?) open class NSWindow... { }... open func printwindow(_ sender: Any?)

183 NSView and NSWindow.print() Renamed open class NSView... { }... open func printview(_ sender: Any?) open class NSWindow... { }... open func printwindow(_ sender: Any?) Cocoa Development Tips Hall 2 Friday 9:00AM

184 Tweet Your Tips! Cocoa Development Tips Hall 2 Friday 9:00AM

185 Tweet Your Tips! Use #WWDC17 and #cocoatip Cocoa Development Tips Hall 2 Friday 9:00AM

186 Foundation Daphne Larose, Foundation

187 What s New in Foundation

188 What s New in Foundation Better support for key paths

189 What s New in Foundation Better support for key paths Encoding and Decoding in Swift

190 Improved Key Paths

191 Improved Key Paths New literal syntax

192 Improved Key Paths New literal syntax Type-safe

193 Improved Key Paths New literal syntax Type-safe Performant

194 Improved Key Paths New literal syntax Type-safe Performant #keypath(basetype.propertyname)

195 Improved Key Paths New literal syntax Type-safe Performant #keypath(basetype.propertyname) \BaseType.propertyName

196 Block-based Key-Value class DogOwner : NSObject dynamic var name: dynamic var dog: Dog? } var daphne = DogOwner(name: "Daphne") let observation = daphne.observe(\dogowner.dog) { (observed, change) in print("congrats on your new puppy \(observed.dogname)!") }

197 Block-based Key-Value class DogOwner : NSObject dynamic var name: dynamic var dog: Dog? } var daphne = DogOwner(name: "Daphne") let observation = daphne.observe(\dogowner.dog) { (observed, change) in print("congrats on your new puppy \(observed.dogname)!") }

198 Encoding and Decoding in Swift

199 Encoding and Decoding in Swift Swift types JSON, Property lists, etc.

200 Encoding and Decoding in Swift Swift types JSON, Property lists, etc. Deeply customizable

201 Encoding and Decoding in Swift Swift types JSON, Property lists, etc. Deeply customizable Easy to use

202 Encoding and Decoding in Swift Swift types JSON, Property lists, etc. Deeply customizable Easy to use struct Dog : Codable { let dogname: String let breed: BreedType }

203 Encoding and Decoding in Swift Swift types JSON, Property lists, etc. Deeply customizable Easy to use struct Dog : Codable { let dogname: String let breed: BreedType }

204 Related Session What s New in Foundation Hall 2 Wednesday 11:00AM

205 What s New in Foundation What s New in Foundation Hall 2 Wednesday 11:00AM

206 What Else is New in Foundation

207 What Else is New in Foundation New and enhanced API Available on both macos and ios

208 NSXPCConnection Can advertise intent to publish progress

209 NSXPCConnection Can advertise intent to publish MyServerProtocol -(void)performrequestwithreply:(void(^)(bool

210 NSXPCConnection Can advertise intent to publish MyServerProtocol -(NSProgress *)performrequestwithreply:(void(^)(bool

211 NSXPCConnection Can advertise intent to publish MyServerProtocol -(NSProgress *)performrequestwithreply:(void(^)(bool

212 NSXPCConnection Can advertise intent to publish MyServerProtocol -(NSProgress *)performrequestwithreply:(void(^)(bool Return progress before you reply

213 NSXPCConnection Can advertise intent to publish MyServerProtocol -(NSProgress *)performrequestwithreply:(void(^)(bool Return progress before you reply Updates performed asynchronously

214 URLSession

215 URLSession var sessionconfig = URLSessionConfiguration.default sessionconfig.waitsforconnectivity = true

216 URLSession var sessionconfig = URLSessionConfiguration.default sessionconfig.waitsforconnectivity = true Multipath TCP now available on ios

217 URLSession var sessionconfig = URLSessionConfiguration.default sessionconfig.waitsforconnectivity = true Multipath TCP now available on ios URLSessionTask supports NSProgressReporting protocol

218 URLSession var sessionconfig = URLSessionConfiguration.default sessionconfig.waitsforconnectivity = true Multipath TCP now available on ios URLSessionTask supports NSProgressReporting protocol Advances in Networking, Part 2 Executive Ballroom Wednesday 4:10PM

219 NSFileProviderService

220 NSFileProviderService Apps File Providers

221 NSFileProviderService Apps File Providers Discover file providers for any URL with NSFileManager

222 NSFileProviderService Apps File Providers Discover file providers for any URL with NSFileManager Apps can use file provider s specialized services

223 NSFileProviderService Apps File Providers Discover file providers for any URL with NSFileManager Apps can use file provider s specialized services File Provider Enhancements Hall 3 Friday 11:00AM

224 File Provider Communication

225 File Provider MyServerProtocol -(NSProgress *)performrequestwithreply:(void(^)(bool

226 File Provider Communication App File Provider

227 File Provider Communication App performrequestwithreply: File Provider

228 File Provider Communication App File Provider

229 File Provider Communication App Returns NSProgress File Provider

230 File Provider Communication App File Provider

231 File Provider Communication Downloads file App File Provider

232 File Provider Communication Downloads file App Updates progress File Provider

233 File Provider Communication App File Provider

234 File Provider Communication Download finishes App File Provider

235 File Provider Communication Download finishes App Updates progress File Provider

236 File Provider Communication App File Provider

237 File Provider Communication App File Provider Replies with requested file

238 Improved Available Storage Space API Check for available space more accurately public struct URLResourceValues { public var volumeavailablecapacityforimportantusage: Int64? { get } public var volumeavailablecapacityforopportunisticusage: Int64? { get } }

239 Improved Available Storage Space API Free Opportunistic Important

240 Improved Available Storage Space API Free Opportunistic Important

241 Improved Available Storage Space API Free Opportunistic Important

242 Improved Available Storage Space API Free Opportunistic Important

243 Improved Available Storage Space API Preflight check let fileurl = URL(fileURLWithPath: "/Path/to/file") let set: Set<URLResourceKey> = [URLResourceKey.volumeAvailableCapacityForOpportunisticUsageKey] if let fileresourcevalues = try? fileurl.resourcevalues(forkeys: set) { if (fileresourcevalues.volumeavailablecapacityforopportunisticusagekey > ) { // download additional file } }

244 Improved Available Storage Space API Preflight check let fileurl = URL(fileURLWithPath: "/Path/to/file") let set: Set<URLResourceKey> = [URLResourceKey.volumeAvailableCapacityForOpportunisticUsageKey] if let fileresourcevalues = try? fileurl.resourcevalues(forkeys: set) { if (fileresourcevalues.volumeavailablecapacityforopportunisticusagekey > ) { // download additional file } }

245 NSLinguisticTagger

246 NSLinguisticTagger Tagging a unit

247 NSLinguisticTagger Tagging a unit "Foundation is really cool. We write lots of code.\n"

248 NSLinguisticTagger Tagging a unit "Foundation is really cool. We write lots of code.\n" Word

249 NSLinguisticTagger Tagging a unit "Foundation is really cool. We write lots of code.\n" Sentence

250 NSLinguisticTagger Tagging a unit "Foundation is really cool. We write lots of code.\n" Paragraph

251 NSLinguisticTagger Tagging a unit be lot "Foundation is really cool. We write lots of code.\n" Lemmatization

252 NSLinguisticTagger

253 NSLinguisticTagger Redone and improved

254 NSLinguisticTagger Redone and improved Common case convenience methods added

255 NSLinguisticTagger Redone and improved Common case convenience methods added let text = "Ich weiß nicht was soll es bedeuten." let language = NSLinguisticTagger.dominantLanguage(for: text) // "de"

256 NSLinguisticTagger Redone and improved Common case convenience methods added let text = "Ich weiß nicht was soll es bedeuten." let language = NSLinguisticTagger.dominantLanguage(for: text) // "de" Natural Language Processing and your Apps Hall 3 Wednesday 9:00AM

257 JSONSerialization Supports sorted keys

258 JSONSerialization Supports sorted keys let dict = ["a": 1, "b": 2, "c": 3, "d": 4]

259 JSONSerialization Supports sorted keys let dict = ["a": 1, "b": 2, "c": 3, "d": 4] var data = try JSONSerialization.data(withJSONObject: dict, options: []) // {"b":2,"a":1,"c":3,"d":4}

260 JSONSerialization Supports sorted keys let dict = ["a": 1, "b": 2, "c": 3, "d": 4] var data = try JSONSerialization.data(withJSONObject: dict, options: []) // {"b":2,"a":1,"c":3,"d":4} data = try JSONSerialization.data(withJSONObject: dict, options:.sortedkeys)

261 JSONSerialization Supports sorted keys let dict = ["a": 1, "b": 2, "c": 3, "d": 4] var data = try JSONSerialization.data(withJSONObject: dict, options: []) // {"b":2,"a":1,"c":3,"d":4} data = try JSONSerialization.data(withJSONObject: dict, options:.sortedkeys) // {"a":1,"b":3,"c":4,"d":2}

262 NSItemProvider More explicit operations Supports progress and cancellation Enhance your custom classes to work with multiple representations

263 NSItemProvider More explicit operations Supports progress and cancellation Enhance your custom classes to work with multiple representations Data Delivery with Drag and Drop Hall 2 Thursday 10:00AM

264 NSUserActivity open class NSUserActivity : NSObject { open var webpageurl: URL?

265 NSUserActivity open class NSUserActivity : NSObject { open var webpageurl: URL? open var referrerurl: URL? // Set URL of webpage that referred webpageurl }

266 Failable APIs Better error handling Additional convenience methods that take URLs

267 Process Launching // NSTask +(nullable NSTask *)launchedtaskwithexecutableurl:(nsurl *)url arguments:(nsarray<nsstring *> *)arguments error:(out NSError ** _Nullable)error terminationhandler:(void(^_nullable)(nstask *))terminationhandler; // Process, Swift 4 open class func run(_ url: URL, arguments: [String], terminationhandler: ((Process) -> Void)? = nil) throws -> Process

268 NSDictionary and NSArray +(nullable NSDictionary<NSString*, ObjectType>*)dictionaryWithContentsOfURL:(NSURL *)url error:(nserror **)error; +(nullable NSArray<ObjectType>*)arrayWithContentsOfURL:(NSURL *)url error:(nserror **)error; -(BOOL)writeToURL:(NSURL *)url error:(nserror **)error;

269 NSLocalizedFailureErrorKey Customize what failed while keeping why it failed

270 NSLocalizedFailureErrorKey Customize what failed while keeping why it failed

271 NSLocalizedFailureErrorKey Customize what failed while keeping why it failed

272 NSRange Range let greeting: String = "hello there swift" let re = NSRegularExpression(pattern: "[sw]ift") var found: String = ""

273 NSRange Range let greeting: String = "hello there swift" let re = NSRegularExpression(pattern: "[sw]ift") var found: String = "" let nsrange = NSRange(string.indices, in: string) for match in re.matches(in: string, range: nsrange) {

274 NSRange Range let greeting: String = "hello there swift" let re = NSRegularExpression(pattern: "[sw]ift") var found: String = "" let nsrange = NSRange(string.indices, in: string) for match in re.matches(in: string, range: nsrange) {

275 NSRange Range let greeting: String = "hello there swift" let re = NSRegularExpression(pattern: "[sw]ift") var found: String = "" let nsrange = NSRange(string.indices, in: string) for match in re.matches(in: string, range: nsrange) {

276 NSRange Range let greeting: String = "hello there swift" let re = NSRegularExpression(pattern: "[sw]ift") var found: String = "" let nsrange = NSRange(string.indices, in: string) for match in re.matches(in: string, range: nsrange) {

277 NSRange Range let greeting: String = "hello there swift" let re = NSRegularExpression(pattern: "[sw]ift") var found: String = "" let nsrange = NSRange(string.indices, in: string) for match in re.matches(in: string, range: nsrange) {

278 NSRange Range let greeting: String = "hello there swift" let re = NSRegularExpression(pattern: "[sw]ift") var found: String = "" let nsrange = NSRange(string.indices, in: string) for match in re.matches(in: string, range: nsrange) { found.append(range(match.rangeat(1), in: string)!) }

279 Performance Improvements

280 Performance Improvements Copy-on-write NSArray, NSDictionary, NSSet

281 Performance Improvements Copy-on-write NSArray, NSDictionary, NSSet struct Data inlining

282 Performance Improvements Copy-on-write NSArray, NSDictionary, NSSet struct Data inlining Faster calendrical calculations with lower peak memory

283 Performance Improvements Copy-on-write NSArray, NSDictionary, NSSet struct Data inlining Faster calendrical calculations with lower peak memory Faster bridging of NSNumber to and from Swift

284 Performance Improvements Copy-on-write NSArray, NSDictionary, NSSet struct Data inlining Faster calendrical calculations with lower peak memory Faster bridging of NSNumber to and from Swift Efficient Interactions with Frameworks Hall 2 Friday 1:50PM

285 NSArchiver and NSUnarchiver NSArchiver and NSUnarchiver replaced in 10.4 Now formally deprecated Old formats still supported Use NSKeyedArchiver

286 Additional Mentions

287 Additional Mentions Core Data highlights

288 Additional Mentions Core Data highlights Core Spotlight available on macos

289 Additional Mentions Core Data highlights Core Spotlight available on macos Thermal Notifications available on ios

290 Additional Mentions Core Data highlights Core Spotlight available on macos Thermal Notifications available on ios What s New in Cocoa Touch Hall 3 Tuesday 10:20AM What s New in Core Data Grand Ballroom B Wednesday 10:00AM What's New in Core Spotlight for ios and macos Grand Ballroom B Thursday 4:10PM

291 Wrap-Up API Refinements AppKit Foundation

292 Wrap-Up API Refinements AppKit Foundation Release Notes

293 More Information

294 Reminder Tweet your Cocoa development tips! Use #WWDC17 and #cocoatip Cocoa Development Tips Hall 2 Friday 9:00AM

295 Related Sessions What s New in Swift Hall 3 Tuesday 1:50PM Natural Language Processing and your Apps Hall 3 Wednesday 9:00AM What s New in Core Data Grand Ballroom B Wednesday 10:00AM Touch Bar Fundamentals Grand Ballroom A Wednesday 10:00AM What s New in Foundation Hall 2 Wednesday 11:00AM Choosing the Right Cocoa Container View Grand Ballroom A Wednesday 3:10PM Advances in Networking, Part 2 Executive Ballroom Wednesday 4:10PM

296 Related Sessions Advanced Touch Bar Grand Ballroom A Wednesday 5:10PM What's New in Core Spotlight for ios and macos Grand Ballroom B Thursday 4:10PM Cocoa Development Tips Hall 2 Friday 9:00AM File Provider Enhancements Hall 3 Friday 11:00AM Efficient Interactions with Frameworks Hall 2 Friday 1:50PM

297 Labs Cocoa Lab Technology Lab C Wed 11:00AM-1:00PM Foundation Lab Technology Lab C Wed 1:00-3:10PM Core Data Lab Technology Lab C Wed 3:10-5:30PM Cocoa Touch Bar Lab Technology Lab C Thu 9:00-11:00AM Text and Fonts Lab Technology Lab H Thu 1:50-3:50PM Core Data Lab Technology Lab H Thu 4:10-6:00PM Cocoa Lab Technology Lab B Fri 1:50-3:30PM

298

What s New in Cocoa for macos

What s New in Cocoa for macos Session #WWDC18 What s New in Cocoa for macos 209 Ali Ozer, Cocoa Frameworks Chris Dreessen, Cocoa Frameworks Jesse Donaldson, Cocoa Frameworks 2018 Apple Inc. All rights reserved. Redistribution or public

More information

What s New in Cocoa #WWDC16. App Frameworks. Session 203

What s New in Cocoa #WWDC16. App Frameworks. Session 203 App Frameworks #WWDC16 What s New in Cocoa Session 203 Ali Ozer Director, Cocoa Frameworks Raleigh Ledet Event Wrangler, Cocoa Frameworks Taylor Kelly Engineer, Cocoa Frameworks 2016 Apple Inc. All rights

More information

Touch Bar Fundamentals

Touch Bar Fundamentals Session App Frameworks #WWDC17 Touch Bar Fundamentals 211 Chris Dreessen John Tegtmeyer 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from

More information

Using and Extending the Xcode Source Editor

Using and Extending the Xcode Source Editor Developer Tools #WWDC16 Using and Extending the Xcode Source Editor Session 414 Mike Swingler Xcode Infrastructure and Editors Chris Hanson Xcode Infrastructure and Editors 2016 Apple Inc. All rights reserved.

More information

Cocoa Development Tips

Cocoa Development Tips Session App Frameworks #WWDC17 Cocoa Development Tips Twenty-nine things you may not know about Cocoa 236 Rachel Goldeen, Cocoa Engineer Vincent Hittson, Cocoa Engineer 2017 Apple Inc. All rights reserved.

More information

What s New in Core Data?

What s New in Core Data? Session App Frameworks #WWDC17 What s New in Core? Persisting since 2004 210 Melissa Turner, Core Engineer Rishi Verma, Core Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display

More information

Data Delivery with Drag and Drop

Data Delivery with Drag and Drop Session App Frameworks #WWDC17 Data Delivery with Drag and Drop 227 Dave Rahardja, UIKit Tanu Singhal, UIKit 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Adopting Advanced Features of the New UI

Adopting Advanced Features of the New UI Frameworks #WWDC14 Adopting Advanced Features of the New UI Session 220 Chris Dreessen AppKit Software Engineer! Corbin Dunn AppKit Software Engineer 2014 Apple Inc. All rights reserved. Redistribution

More information

What s New in Cocoa #WWDC14. Frameworks. Session 204 Ali Ozer Director of Cocoa Frameworks

What s New in Cocoa #WWDC14. Frameworks. Session 204 Ali Ozer Director of Cocoa Frameworks Frameworks #WWDC14 What s New in Cocoa Session 204 Ali Ozer Director of Cocoa Frameworks 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from

More information

What s New in NSCollectionView Session 225

What s New in NSCollectionView Session 225 App Frameworks #WWDC15 What s New in NSCollectionView Session 225 Troy Stephens Application Frameworks Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

What s New in Foundation for Swift Session 207

What s New in Foundation for Swift Session 207 App Frameworks #WWDC16 What s New in Foundation for Swift Session 207 Tony Parker Foundation, Apple Michael LeHew Foundation, Apple 2016 Apple Inc. All rights reserved. Redistribution or public display

More information

Mastering Drag and Drop

Mastering Drag and Drop Session App Frameworks #WWDC17 Mastering Drag and Drop 213 Tom Adriaenssen, UIKit Wenson Hsieh, WebKit Robb Böhnke, UIKit 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Enhancing your apps for the next dimension of touch

Enhancing your apps for the next dimension of touch App Frameworks #WWDC16 A Peek at 3D Touch Enhancing your apps for the next dimension of touch Session 228 Tyler Fox UIKit Frameworks Engineer Peter Hajas UIKit Frameworks Engineer 2016 Apple Inc. All rights

More information

Getting the Most out of Playgrounds in Xcode

Getting the Most out of Playgrounds in Xcode #WWDC18 Getting the Most out of Playgrounds in Xcode Session 402 Tibet Rooney-Rabdau, Xcode Engineer Alex Brown, Core OS Engineer TJ Usiyan, Xcode Engineer 2018 Apple Inc. All rights reserved. Redistribution

More information

What s New in imessage Apps

What s New in imessage Apps Session App Frameworks #WWDC17 What s New in imessage Apps 234 Eugene Bistolas, Messages Engineer Jay Chae, Messages Engineer Stephen Lottermoser, Messages Engineer 2017 Apple Inc. All rights reserved.

More information

Introducing On Demand Resources

Introducing On Demand Resources App Frameworks #WWDC15 Introducing On Demand Resources An element of App Thinning Session 214 Steve Lewallen Frameworks Engineering Tony Parker Cocoa Frameworks 2015 Apple Inc. All rights reserved. Redistribution

More information

Swift API Design Guidelines

Swift API Design Guidelines Developer Tools #WWDC16 Swift API Design Guidelines The Grand Renaming Session 403 Doug Gregor Swift Engineer Michael Ilseman Swift Engineer 2016 Apple Inc. All rights reserved. Redistribution or public

More information

Creating Audio Apps for watchos

Creating Audio Apps for watchos Session #WWDC18 Creating Audio Apps for watchos 504 Neil Desai, watchos Frameworks Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

CS 371L - Mobile Computing (ios) Dr. William C. Bulko. CS 371L Mobile Computing (ios) Introduction

CS 371L - Mobile Computing (ios) Dr. William C. Bulko. CS 371L Mobile Computing (ios) Introduction CS 371L - Mobile Computing (ios) Dr. William C. Bulko CS 371L Mobile Computing (ios) Introduction 2014 The Evolution of Computing Mainframes Minicomputers - fridge-size PCs - desktop and deskside Laptops

More information

Introducing the Photos Frameworks

Introducing the Photos Frameworks Media #WWDC14 Introducing the Photos Frameworks Session 511 Adam Swift ios Photos Frameworks 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

What s New in Xcode App Signing

What s New in Xcode App Signing Developer Tools #WWDC16 What s New in Xcode App Signing Developing and distributing Session 401 Joshua Pennington Tools Engineering Manager Itai Rom Tools Engineer 2016 Apple Inc. All rights reserved.

More information

Quick Interaction Techniques for watchos

Quick Interaction Techniques for watchos App Frameworks #WWDC16 Quick Interaction Techniques for watchos Session 211 Tom Witkin watchos Engineer Miguel Sanchez watchos Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display

More information

What s New in watchos

What s New in watchos Session App Frameworks #WWDC17 What s New in watchos 205 Ian Parks, watchos Engineering 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from

More information

Finding Bugs Using Xcode Runtime Tools

Finding Bugs Using Xcode Runtime Tools Session Developer Tools #WWDC17 Finding Bugs Using Xcode Runtime Tools 406 Kuba Mracek, Program Analysis Engineer Vedant Kumar, Compiler Engineer 2017 Apple Inc. All rights reserved. Redistribution or

More information

Seamless Linking to Your App

Seamless Linking to Your App App Frameworks #WWDC15 Seamless Linking to Your App Session 509 Conrad Shultz Safari and WebKit Software Engineer Jonathan Grynspan Core Services Software Engineer 2015 Apple Inc. All rights reserved.

More information

Using Grouped Notifications

Using Grouped Notifications #WWDC18 Using Grouped Notifications Session 711 Michele Campeotto, ios User Notifications 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

What s New in LLDB. Debug your way to fame and glory #WWDC15. Developer Tools. Session 402

What s New in LLDB. Debug your way to fame and glory #WWDC15. Developer Tools. Session 402 Developer Tools #WWDC15 What s New in LLDB Debug your way to fame and glory Session 402 Kate Stone Software Behavioralist Sean Callanan Master of Expressions Enrico Granata Data Wizard 2015 Apple Inc.

More information

Modern User Interaction on ios

Modern User Interaction on ios App Frameworks #WWDC17 Modern User Interaction on ios Mastering the UIKit UIGesture System Session 219 Dominik Wagner, UIKit Engineer Michael Turner, UIKit Engineer Glen Low, UIKit Engineer 2017 Apple

More information

Understanding Undefined Behavior

Understanding Undefined Behavior Session Developer Tools #WWDC17 Understanding Undefined Behavior 407 Fred Riss, Clang Team Ryan Govostes, Security Engineering and Architecture Team Anna Zaks, Program Analysis Team 2017 Apple Inc. All

More information

CS193E Lecture 7. Document-based Applications NSTableView Key-Value Coding

CS193E Lecture 7. Document-based Applications NSTableView Key-Value Coding CS193E Lecture 7 Document-based Applications NSTableView Key-Value Coding Agenda Questions? Review: delegates, MVC Document-based apps Table views Key Value Coding Model, View, Controller Controller Model

More information

Introduction to Siri Shortcuts

Introduction to Siri Shortcuts #WWDC8 Introduction to Siri Shortcuts Session 2 Ari Weinstein, Siri Willem Mattelaer, Siri 208 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Accessibility on OS X

Accessibility on OS X Frameworks #WWDC14 Accessibility on OS X New Accessibility API Session 207 Patti Hoa Accessibility Engineer! Chris Dolan Accessibility Engineer 2014 Apple Inc. All rights reserved. Redistribution or public

More information

Enabling Your App for CarPlay

Enabling Your App for CarPlay Session App Frameworks #WWDC17 Enabling Your App for CarPlay 719 Albert Wan, CarPlay Engineering 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

What's New in Core Spotlight

What's New in Core Spotlight Session System Frameworks #WWDC17 What's New in Core Spotlight Search on macos and ios 231 John Hörnkvist, Spotlight Lyn Fong, Spotlight 2017 Apple Inc. All rights reserved. Redistribution or public display

More information

lecture 6 Closures, Networking, CocoaPods

lecture 6 Closures, Networking, CocoaPods lecture 6 Closures, Networking, CocoaPods cs198-001 : spring 2018 announcements no new lab this week - continuation of Pokedex lab + custom app workday (attendance still required) Pokedex due Wednesday

More information

WatchKit In-Depth, Part 2

WatchKit In-Depth, Part 2 App Frameworks #WWDC15 WatchKit In-Depth, Part 2 Session 208 Nathan de Vries watchos Engineer Chloe Chang watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Building Faster in Xcode

Building Faster in Xcode #WWDC18 Building Faster in Xcode Session 408 David Owens, Xcode Engineer Jordan Rose, Swift Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

Cross Platform Nearby Networking

Cross Platform Nearby Networking Core OS #WWDC14 Cross Platform Nearby Networking Session 709 Demijan Klinc Software Engineer 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Adapting to the New UI of OS X Yosemite

Adapting to the New UI of OS X Yosemite Frameworks #WWDC14 Adapting to the New UI of OS X Yosemite Session 209 Mike Stern User Experience Evangelist! Rachel Goldeen Cocoa Software Engineer! Patrick Heynen Cocoa Engineering Manager 2014 Apple

More information

Accessibility on ios. Developing for everyone. Frameworks #WWDC14. Session 210 Clare Kasemset ios Accessibility

Accessibility on ios. Developing for everyone. Frameworks #WWDC14. Session 210 Clare Kasemset ios Accessibility Frameworks #WWDC14 Accessibility on ios Developing for everyone Session 210 Clare Kasemset ios Accessibility 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

What s New in MapKit. App Frameworks #WWDC17. Fredrik Olsson

What s New in MapKit. App Frameworks #WWDC17. Fredrik Olsson Session App Frameworks #WWDC17 What s New in MapKit 237 Fredrik Olsson 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. MKMapView.mapType.standard

More information

imessage Apps and Stickers, Part 2

imessage Apps and Stickers, Part 2 App Frameworks #WWDC16 imessage Apps and Stickers, Part 2 Interactive Messages Session 224 Alex Carter Messages Engineer Stephen Lottermoser Messages Engineer 2016 Apple Inc. All rights reserved. Redistribution

More information

What s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer

What s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer App Frameworks #WWDC16 What s New in tvos Session 206 Hans Kim tvos Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Welcome

More information

CS193E Lecture 12. Formatters Cocoa Text More View Drawing

CS193E Lecture 12. Formatters Cocoa Text More View Drawing CS193E Lecture 12 Formatters Cocoa Text More View Drawing Quick Scroll View Demo Announcements Questions on previous material or assignment? If you don t get a grade by Sunday, please let us know Some

More information

Monetize and Promote Your App with iad

Monetize and Promote Your App with iad Media #WWDC15 Monetize and Promote Your App with iad From design to launch Session 503 Carol Teng Shashank Phadke 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Storyboards and Controllers on OS X

Storyboards and Controllers on OS X Frameworks #WWDC14 Storyboards and Controllers on OS X Contain yourself Session 212 Mike Swingler Interface Builder Engineer Raleigh Ledet AppKit Engineer 2014 Apple Inc. All rights reserved. Redistribution

More information

What s New in Notifications

What s New in Notifications System Frameworks #WWDC15 What s New in Notifications Session 720 Michele Campeotto ios Notifications Gokul Thirumalai Apple Push Notification Service 2015 Apple Inc. All rights reserved. Redistribution

More information

Core Data Best Practices

Core Data Best Practices #WWDC18 Core Data Best Practices Session 224 Scott Perry, Engineer Nick Gillett, Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Media and Gaming Accessibility

Media and Gaming Accessibility Session System Frameworks #WWDC17 Media and Gaming Accessibility 217 Greg Hughes, Software Engineering Manager Charlotte Hill, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public

More information

Introducing the Modern WebKit API

Introducing the Modern WebKit API Frameworks #WWDC14 Introducing the Modern WebKit API Session 206 Anders Carlsson Safari and WebKit Engineer 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

Core ML in Depth. System Frameworks #WWDC17. Krishna Sridhar, Core ML Zach Nation, Core ML

Core ML in Depth. System Frameworks #WWDC17. Krishna Sridhar, Core ML Zach Nation, Core ML System Frameworks #WWDC17 Core ML in Depth Krishna Sridhar, Core ML Zach Nation, Core ML 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from

More information

Introducing Password AutoFill for Apps

Introducing Password AutoFill for Apps Session App Frameworks #WWDC17 Introducing Password AutoFill for Apps Reducing friction for your users 206 Ricky Mondello, ios Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display

More information

Designing for Apple Watch

Designing for Apple Watch Design #WWDC15 Designing for Apple Watch Session 802 Mike Stern User Experience Evangelist 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Extending Your Apps with SiriKit

Extending Your Apps with SiriKit App Frameworks #WWDC16 Extending Your Apps with SiriKit Session 225 Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering Scott Andrus SiriKit Engineering 2016 Apple Inc. All rights reserved.

More information

User Interfaces. Lecture 15. Application Programming on Mac OS. Hamza Bennani September 4, 2018

User Interfaces. Lecture 15. Application Programming on Mac OS. Hamza Bennani September 4, 2018 User Interfaces Lecture 15 Application Programming on Mac OS Hamza Bennani hamza@hamzabennani.com September 4, 2018 Logistics Office hours: Tue/Thu, 2pm to 3pm. Office: 250 Geoff Wyvill. Acknowledgment:

More information

Advanced Notifications

Advanced Notifications System Frameworks #WWDC16 Advanced Notifications Session 708 Michele Campeotto ios Notifications 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

CloudKit Tips And Tricks

CloudKit Tips And Tricks System Frameworks #WWDC15 CloudKit Tips And Tricks Session 715 Nihar Sharma CloudKit Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

When we re first learning Cocoa (or Java, or Qt, or any other application framework),

When we re first learning Cocoa (or Java, or Qt, or any other application framework), MacDevCenter http://www.macdevcenter.com/lpt/a/4752 6 April 2004 The Cocoa Controller Layer by Michael Beam When we re first learning Cocoa (or Java, or Qt, or any other application framework), one of

More information

Building for Voice with Siri Shortcuts

Building for Voice with Siri Shortcuts #WWDC18 Building for Voice with Siri Shortcuts Session 214 Amit Jain, Siri Ayaka Nonaka, Siri 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Engineering for Testability

Engineering for Testability Session Developer Tools #WWDC17 Engineering for Testability 414 Brian Croom, Xcode Engineer Greg Tracy, Xcode Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

JavaScript for Automation

JavaScript for Automation Services #WWDC14 JavaScript for Automation Session 306 Sal Soghoian Product Manger Automation Technologies 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

Objective-C Primer. iphone Programmer s Association. Lorenzo Swank September 10, 2008

Objective-C Primer. iphone Programmer s Association. Lorenzo Swank September 10, 2008 Objective-C Primer iphone Programmer s Association Lorenzo Swank September 10, 2008 Disclaimer Content was blatantly and unapologetically stolen from the WWDC 2007 Fundamentals of Cocoa session, as well

More information

Introducing MusicKit. Media #WWDC17. Tim Parthemore, MusicKit Services Joel Lopes Da Silva, ios Music

Introducing MusicKit. Media #WWDC17. Tim Parthemore, MusicKit Services Joel Lopes Da Silva, ios Music Session Media #WWDC17 Introducing MusicKit 502 Tim Parthemore, MusicKit Services Joel Lopes Da Silva, ios Music 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Getting the Most Out of HealthKit

Getting the Most Out of HealthKit App Frameworks #WWDC16 Getting the Most Out of HealthKit What s new and best practices Session 209 Matthew Salesi ios Software Engineer Joefrey Kibuule ios Software Engineer 2016 Apple Inc. All rights

More information

What s New in Swift #WWDC18. Ted Kremenek, Languages & Runtimes Manager Slava Pestov, Swift Compiler Engineer

What s New in Swift #WWDC18. Ted Kremenek, Languages & Runtimes Manager Slava Pestov, Swift Compiler Engineer Session #WWDC18 What s New in Swift 401 Ted Kremenek, Languages & Runtimes Manager Slava Pestov, Swift Compiler Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Advanced Cocoa Text Tips and Tricks. Aki Inoue Cocoa Engineer

Advanced Cocoa Text Tips and Tricks. Aki Inoue Cocoa Engineer Advanced Cocoa Text Tips and Tricks Aki Inoue Cocoa Engineer 2 Introduction Only on Mac OS Diving deeper Understanding the layout process Getting comfortable with extending and customizing base functionalities

More information

Building Apps with Dynamic Type

Building Apps with Dynamic Type Session App Frameworks #WWDC17 Building Apps with Dynamic Type 245 Clare Kasemset, Software Engineering Manager Nandini Sundar, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or

More information

Cocoa Tips and Tricks

Cocoa Tips and Tricks Cocoa Tips and Tricks Cool Cocoa code Corbin Dunn Cocoa Software Engineer 2 Introduction Quick and cool Cocoa tips and tricks Learn new things you may not know Focused mostly on AppKit classes 3 What You

More information

Managing Documents In Your ios Apps

Managing Documents In Your ios Apps Session #WWDC18 Managing Documents In Your ios Apps 216 Brandon Tennant, Software Engineer Thomas Deniau, Software Engineer Rony Fadel, Software Engineer 2018 Apple Inc. All rights reserved. Redistribution

More information

CUSTOM VIEWS. The View Hierarchy. Chapter 12

CUSTOM VIEWS. The View Hierarchy. Chapter 12 Chapter 12 CUSTOM VIEWS A ll the visible objects in an application are either windows or views. In this chapter, you will create a subclass of NSView. From time to time, you will create a custom view to

More information

What s New in Swift Playgrounds

What s New in Swift Playgrounds Session Developer Tools #WWDC17 What s New in Swift Playgrounds 408 Connor Wakamo, Playgrounds Engineer Grace Kendall, Playgrounds Engineer Najla Bulous, Playgrounds Engineer 2017 Apple Inc. All rights

More information

Your Apps and the Future of macos Security

Your Apps and the Future of macos Security #WWDC18 Your Apps and the Future of macos Security Pierre-Olivier Martel, Security Engineering Manager Kelly Yancey, OS Security Garrett Jacobson, Trusted Execution 2018 Apple Inc. All rights reserved.

More information

Building Visually Rich User Experiences

Building Visually Rich User Experiences Session App Frameworks #WWDC17 Building Visually Rich User Experiences 235 Noah Witherspoon, Software Engineer Warren Moore, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public

More information

What s New in Core Bluetooth

What s New in Core Bluetooth Session System Frameworks #WWDC17 What s New in Core Bluetooth 712 Craig Dooley, Bluetooth Engineer Duy Phan, Bluetooth Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display not

More information

Creating Complications with ClockKit Session 209

Creating Complications with ClockKit Session 209 App Frameworks #WWDC15 Creating Complications with ClockKit Session 209 Eliza Block watchos Engineer Paul Salzman watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display

More information

Advanced Scrollviews and Touch Handling Techniques

Advanced Scrollviews and Touch Handling Techniques Frameworks #WWDC14 Advanced Scrollviews and Touch Handling Techniques Session 235 Josh Shaffer ios Apps and Frameworks Engineer Eliza Block ios Apps and Frameworks Engineer 2014 Apple Inc. All rights reserved.

More information

Apple offers a number of resources where you can get Xcode development support:!

Apple offers a number of resources where you can get Xcode development support:! Xcode Release Notes About Xcode 6.1 beta 2 Supported Configurations Xcode 6.1 requires a Mac running OS X 10.9.4 or OS X 10.10. It includes SDKs for ios 8 and OS X versions 10.9 and 10.10. To develop apps

More information

Thread Sanitizer and Static Analysis

Thread Sanitizer and Static Analysis Developer Tools #WWDC16 Thread Sanitizer and Static Analysis Help with finding bugs in your code Session 412 Anna Zaks Manager, Program Analysis Team Devin Coughlin Engineer, Program Analysis Team 2016

More information

Advances in AVFoundation Playback

Advances in AVFoundation Playback Media #WWDC16 Advances in AVFoundation Playback Waiting, looping, switching, widening, optimizing Session 503 Sam Bushell Media Systems Architect 2016 Apple Inc. All rights reserved. Redistribution or

More information

Localizing with Xcode 9

Localizing with Xcode 9 Session Developer Tools #WWDC17 Localizing with Xcode 9 401 Sara Radi, Software Engineer Aya Siblini, Software Engineer Chris Hanson, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution

More information

Mysteries of Auto Layout, Part 1

Mysteries of Auto Layout, Part 1 App Frameworks #WWDC15 Mysteries of Auto Layout, Part 1 Session 218 Jason Yao Interface Builder Engineer Kasia Wawer ios Keyboards Engineer 2015 Apple Inc. All rights reserved. Redistribution or public

More information

SWIFT! init(title: String) { self.title = title } // required initializer w/ named parameter

SWIFT! init(title: String) { self.title = title } // required initializer w/ named parameter SWIFT! class Session { let title: String // constant non-optional field: can never be null and can never be changed var instruktør: Person? // variable optional field: null is permitted var attendees:

More information

Improving your Existing Apps with Swift

Improving your Existing Apps with Swift Developer Tools #WWDC15 Improving your Existing Apps with Swift Getting Swifty with It Session 403 Woody L. in the Sea of Swift 2015 Apple Inc. All rights reserved. Redistribution or public display not

More information

What s New in SpriteKit

What s New in SpriteKit Graphics and Games #WWDC16 What s New in SpriteKit Session 610 Ross Dexter Games Technologies Engineer Clément Boissière Games Technologies Engineer 2016 Apple Inc. All rights reserved. Redistribution

More information

Monday, 1 November The ios System

Monday, 1 November The ios System The ios System System Overview System Overview System Overview System Overview System Overview System Overview Foundation Classes (Useful) Foundation Framework Value and collection classes User defaults

More information

Leveraging Touch Input on ios

Leveraging Touch Input on ios App Frameworks #WWDC16 Leveraging Touch Input on ios And getting the most out of Apple Pencil Session 220 Dominik Wagner UIKit Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display

More information

Stanford CS193p. Developing Applications for ios Fall Stanford CS193p. Fall 2013

Stanford CS193p. Developing Applications for ios Fall Stanford CS193p. Fall 2013 Developing Applications for ios -14 Today What is this class all about? Description Prerequisites Homework / Final Project ios Overview What s in ios? MVC Object-Oriented Design Concept Objective C (Time

More information

Introduction to PyObjC

Introduction to PyObjC Author Bob Ippolito Conference Introduction to PyObjC PyCon DC, March 2005 Intended Audience Python developers using Mac OS X 10.3 or later Spies from the Linux and Win32 camps Hopefully a GNUstep porter/maintainer

More information

COMP327 Mobile Computing Session: Lecture Set 1a - Swift Introduction and the Foundation Framework Part 2

COMP327 Mobile Computing Session: Lecture Set 1a - Swift Introduction and the Foundation Framework Part 2 COMP327 Mobile Computing Session: 2018-2019 Lecture Set 1a - Swift Introduction and the Foundation Framework Part 2 73 Other Swift Guard Already seen that for optionals it may be necessary to test that

More information

Localization Best Practices on tvos

Localization Best Practices on tvos Session App Frameworks #WWDC17 Localization Best Practices on tvos 248 Joaquim Lobo Silva, Internationalization Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display not

More information

ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility

ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility App Frameworks #WWDC15 ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

Porting Objective-C to Swift. Richard Ekle

Porting Objective-C to Swift. Richard Ekle Porting Objective-C to Swift Richard Ekle rick@ekle.org Why do we need this? 1.2 million apps in the ios App Store http://www.statista.com/statistics/276623/numberof-apps-available-in-leading-app-stores/

More information

Introducing Metal 2. Graphics and Games #WWDC17. Michal Valient, GPU Software Engineer Richard Schreyer, GPU Software Engineer

Introducing Metal 2. Graphics and Games #WWDC17. Michal Valient, GPU Software Engineer Richard Schreyer, GPU Software Engineer Session Graphics and Games #WWDC17 Introducing Metal 2 601 Michal Valient, GPU Software Engineer Richard Schreyer, GPU Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display

More information

Building Watch Apps #WWDC15. Featured. Session 108. Neil Desai watchos Engineer

Building Watch Apps #WWDC15. Featured. Session 108. Neil Desai watchos Engineer Featured #WWDC15 Building Watch Apps Session 108 Neil Desai watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Agenda

More information

Developing Applications for ios

Developing Applications for ios Developing Applications for ios Lecture 10: Managing and Storing Data Radu Ionescu raducu.ionescu@gmail.com Faculty of Mathematics and Computer Science University of Bucharest Content Property Lists Archiving

More information

What s New in tvos 12

What s New in tvos 12 #WWDC18 What s New in tvos 12 Session 208 Hans Kim, tvos Engineering 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Agenda Agenda

More information

ios Application Development Lecture 2: Seminar and Unit 1

ios Application Development Lecture 2: Seminar and Unit 1 ios Application Development Lecture 2: Seminar and Unit 1 Dr. Simon Völker & Philipp Wacker Media Computing Group RWTH Aachen University Winter Semester 2017/2018 http://hci.rwth-aachen.de/ios Swift 18

More information

Creating Extensions for Safari

Creating Extensions for Safari Creating Extensions for Safari Part One Timothy Hatcher Safari and WebKit Engineer 2 3 HTML5 CSS3 JavaScript Native Code 4 Cross Platform Secure Crashes 5 What You ll Learn When to make a Safari Extension

More information

What s New in CloudKit

What s New in CloudKit System Frameworks #WWDC15 What s New in CloudKit Session 704 Olivier Bonnet icloud Client Eric Krugler icloud Server 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

What s New in SiriKit

What s New in SiriKit Session App Frameworks #WWDC17 What s New in SiriKit 214 Sirisha Yerroju, SiriKit Engineer Tin Tran, SiriKit Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information