Advanced Notifications
|
|
- Jessica Griffith
- 5 years ago
- Views:
Transcription
1 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 from Apple.
2 Agenda Notifications User Interface Media Attachments Customization
3 Notifications User Interface
4
5
6
7
8
9
10
11
12
13
14 Media Attachments
15 Media Attachments Push Payload
16 Media Attachments Push Payload { aps: { alert: {, mutable-content: 1 my-attachment: "
17 Media Attachments Push Payload { aps: { alert: {, mutable-content: 1 my-attachment: "
18 Media Attachments Push Payload { aps: { alert: {, mutable-content: 1 my-attachment: "
19 Media Attachments Push Payload Service Extension
20 Media Attachments Push Payload Service Extension
21 // Adding an attachment to a user notification public class NotificationService: UNNotificationServiceExtension { override public func didreceive(_ request: UNNotificationRequest, withcontenthandler contenthandler: (UNNotificationContent) -> Void) { let fileurl = //... let attachment = UNNotificationAttachment(identifier: "image", url: fileurl, options: nil) let content = request.content.mutablecopy as! UNMutableNotificationContent content.attachments = [ attachment ] contenthandler(content)
22 // Adding an attachment to a user notification public class NotificationService: UNNotificationServiceExtension { override public func didreceive(_ request: UNNotificationRequest, withcontenthandler contenthandler: (UNNotificationContent) -> Void) { let fileurl = //... let attachment = UNNotificationAttachment(identifier: "image", url: fileurl, options: nil) let content = request.content.mutablecopy as! UNMutableNotificationContent content.attachments = [ attachment ] contenthandler(content)
23 // Adding an attachment to a user notification public class NotificationService: UNNotificationServiceExtension { override public func didreceive(_ request: UNNotificationRequest, withcontenthandler contenthandler: (UNNotificationContent) -> Void) { let fileurl = //... let attachment = UNNotificationAttachment(identifier: "image", url: fileurl, options: nil) let content = request.content.mutablecopy as! UNMutableNotificationContent content.attachments = [ attachment ] contenthandler(content)
24 // Adding an attachment to a user notification public class NotificationService: UNNotificationServiceExtension { override public func didreceive(_ request: UNNotificationRequest, withcontenthandler contenthandler: (UNNotificationContent) -> Void) { let fileurl = //... let attachment = UNNotificationAttachment(identifier: "image", url: fileurl, options: nil) let content = request.content.mutablecopy as! UNMutableNotificationContent content.attachments = [ attachment ] contenthandler(content)
25 // Adding an attachment to a user notification public class NotificationService: UNNotificationServiceExtension { override public func didreceive(_ request: UNNotificationRequest, withcontenthandler contenthandler: (UNNotificationContent) -> Void) { let fileurl = //... let attachment = UNNotificationAttachment(identifier: "image", url: fileurl, options: nil) let content = request.content.mutablecopy as! UNMutableNotificationContent content.attachments = [ attachment ] contenthandler(content)
26 // Adding an attachment to a user notification public class NotificationService: UNNotificationServiceExtension { override public func didreceive(_ request: UNNotificationRequest, withcontenthandler contenthandler: (UNNotificationContent) -> Void) { let fileurl = //... let attachment = UNNotificationAttachment(identifier: "image", url: fileurl, options: nil) let content = request.content.mutablecopy as! UNMutableNotificationContent content.attachments = [ attachment ] contenthandler(content)
27
28 Media Attachments
29 Media Attachments Local and remote notifications
30 Media Attachments Local and remote notifications Image, audio, video
31 Media Attachments Local and remote notifications Image, audio, video Download in the service extension
32 Media Attachments Local and remote notifications Image, audio, video Download in the service extension Limited processing time and size
33 Media Attachments Local and remote notifications Image, audio, video Download in the service extension Limited processing time and size Add attachment to notification
34 Media Attachments Local and remote notifications Image, audio, video Download in the service extension Limited processing time and size Add attachment to notification File is moved and managed by the system
35
36 Custom User Interface
37 Custom User Interface
38 Custom User Interface Notification content extension
39 Custom User Interface Notification content extension Custom views
40 Custom User Interface Notification content extension Custom views No interaction
41 Custom User Interface Notification content extension Custom views No interaction Respond to notification actions
42
43
44
45
46
47
48 Notification Content Extension
49
50
51
52
53 // Minimal Content Extension class NotificationViewController: UIViewController, UNNotificationContentExtension var label: UILabel? override func viewdidload() { super.viewdidload() // Do any required interface initialization here. func didreceive(_ notification: UNNotification) { label?.text = notification.request.content.body
54 // Minimal Content Extension class NotificationViewController: UIViewController, UNNotificationContentExtension var label: UILabel? override func viewdidload() { super.viewdidload() // Do any required interface initialization here. func didreceive(_ notification: UNNotification) { label?.text = notification.request.content.body
55 // Minimal Content Extension class NotificationViewController: UIViewController, UNNotificationContentExtension var label: UILabel? override func viewdidload() { super.viewdidload() // Do any required interface initialization here. func didreceive(_ notification: UNNotification) { label?.text = notification.request.content.body
56 // Extension Info.plist <plist version="1.0"> <dict> //... <key>nsextension</key> <dict> <key>nsextensionattributes</key> <dict> <key>unnotificationextensioncategory</key> <string>event-invite</string> </dict> //... </dict> </dict> </plist>
57 // Extension Info.plist <plist version="1.0"> <dict> //... <key>nsextension</key> <dict> <key>nsextensionattributes</key> <dict> <key>unnotificationextensioncategory</key> <string>event-invite</string> </dict> //... </dict> </dict> </plist>
58 // Extension Info.plist <plist version="1.0"> <dict> //... <key>nsextension</key> <dict> <key>nsextensionattributes</key> <dict> <key>unnotificationextensioncategory</key> <array> <string>event-invite</string> <string>event-changed</string> </array> </dict> //... </dict> </dict> </plist>
59 Custom Views
60 // Notification Content Extension class NotificationViewController: UIViewController, UNNotificationContentExtension var eventtitle: var eventdate: var eventlocation: var eventmessage: UILabel! func didreceive(_ notification: UNNotification) { let content = notification.request.content eventtitle.text = content.title eventdate.text = content.subtitle eventmessage.text = content.body if let location = content.userinfo["location"] as? String { eventlocation.text = location
61 // Notification Content Extension class NotificationViewController: UIViewController, UNNotificationContentExtension var eventtitle: var eventdate: var eventlocation: var eventmessage: UILabel! func didreceive(_ notification: UNNotification) { let content = notification.request.content eventtitle.text = content.title eventdate.text = content.subtitle eventmessage.text = content.body if let location = content.userinfo["location"] as? String { eventlocation.text = location
62 // Notification Content Extension class NotificationViewController: UIViewController, UNNotificationContentExtension var eventtitle: var eventdate: var eventlocation: var eventmessage: UILabel! func didreceive(_ notification: UNNotification) { let content = notification.request.content eventtitle.text = content.title eventdate.text = content.subtitle eventmessage.text = content.body if let location = content.userinfo["location"] as? String { eventlocation.text = location
63 // Notification Content Extension class NotificationViewController: UIViewController, UNNotificationContentExtension var eventtitle: var eventdate: var eventlocation: var eventmessage: UILabel! func didreceive(_ notification: UNNotification) { let content = notification.request.content eventtitle.text = content.title eventdate.text = content.subtitle eventmessage.text = content.body if let location = content.userinfo["location"] as? String { eventlocation.text = location
64 // Notification Content Extension class NotificationViewController: UIViewController, UNNotificationContentExtension var eventtitle: var eventdate: var eventlocation: var eventmessage: UILabel! func didreceive(_ notification: UNNotification) { let content = notification.request.content eventtitle.text = content.title eventdate.text = content.subtitle eventmessage.text = content.body if let location = content.userinfo["location"] as? String { eventlocation.text = location
65
66
67
68
69 // Extension Info.plist <key>nsextensionattributes</key> <dict> <key>unnotificationextensioncategory</key> <string>event-invite</string> <key>unnotificationextensiondefaultcontenthidden</key> <true/> </dict>
70 // Extension Info.plist <key>nsextensionattributes</key> <dict> <key>unnotificationextensioncategory</key> <string>event-invite</string> <key>unnotificationextensiondefaultcontenthidden</key> <true/> </dict>
71 // Notification Content Extension class NotificationViewController: UIViewController, UNNotificationContentExtension { override func viewdidload() { super.viewdidload() let size = view.bounds.size preferredcontentsize = CGSize(width: size.width, height: size.width / 2) func didreceive(_ notification: UNNotification) { //...
72 // Notification Content Extension class NotificationViewController: UIViewController, UNNotificationContentExtension { override func viewdidload() { super.viewdidload() let size = view.bounds.size preferredcontentsize = CGSize(width: size.width, height: size.width / 2) func didreceive(_ notification: UNNotification) { //...
73
74 // Extension Info.plist <key>nsextensionattributes</key> <dict> <key>unnotificationextensioncategory</key> <string>event-invite</string> <key>unnotificationextensiondefaultcontenthidden</key> <true/> <key>unnotificationextensioninitialcontentsizeratio</key> <real>0.5</real> </dict>
75 // Extension Info.plist <key>nsextensionattributes</key> <dict> <key>unnotificationextensioncategory</key> <string>event-invite</string> <key>unnotificationextensiondefaultcontenthidden</key> <true/> <key>unnotificationextensioninitialcontentsizeratio</key> <real>0.5</real> </dict>
76
77 Custom Notification UI
78 Custom Notification UI Presentation size UNNotificationExtensionInitialContentSizeRatio
79 Custom Notification UI Presentation size UNNotificationExtensionInitialContentSizeRatio Default content UNNotificationExtensionDefaultContentHidden
80 Custom Notification UI Presentation size UNNotificationExtensionInitialContentSizeRatio Default content UNNotificationExtensionDefaultContentHidden
81 Media Attachments
82 // Notification Content Extension Attachments class NotificationViewController: UIViewController, UNNotificationContentExtension var eventimage: UIImageView! func didreceive(_ notification: UNNotification) { let content = notification.request.content if let attachment = content.attachments.first { if attachment.url.startaccessingsecurityscopedresource() { eventimage.image = UIImage(contentsOfFile: attachment.url.path!) attachment.url.stopaccessingsecurityscopedresource()
83 // Notification Content Extension Attachments class NotificationViewController: UIViewController, UNNotificationContentExtension var eventimage: UIImageView! func didreceive(_ notification: UNNotification) { let content = notification.request.content if let attachment = content.attachments.first { if attachment.url.startaccessingsecurityscopedresource() { eventimage.image = UIImage(contentsOfFile: attachment.url.path!) attachment.url.stopaccessingsecurityscopedresource()
84 // Notification Content Extension Attachments class NotificationViewController: UIViewController, UNNotificationContentExtension var eventimage: UIImageView! func didreceive(_ notification: UNNotification) { let content = notification.request.content if let attachment = content.attachments.first { if attachment.url.startaccessingsecurityscopedresource() { eventimage.image = UIImage(contentsOfFile: attachment.url.path!) attachment.url.stopaccessingsecurityscopedresource()
85 // Notification Content Extension Attachments class NotificationViewController: UIViewController, UNNotificationContentExtension var eventimage: UIImageView! func didreceive(_ notification: UNNotification) { let content = notification.request.content if let attachment = content.attachments.first { if attachment.url.startaccessingsecurityscopedresource() { eventimage.image = UIImage(contentsOfFile: attachment.url.path!) attachment.url.stopaccessingsecurityscopedresource()
86
87
88 Actions
89 Default Action Handling
90 Default Action Handling Delivered to the app Notification gets dismissed immediately
91 Intercepting Action Response
92 Intercepting Action Response Delivered to the extension Can delay dismissal
93 // Intercepting notification action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { server.posteventresponse(response.actionidentifier) { if response.actionidentifier == "accept" { eventresponse.text = "Going!" eventresponse.textcolor = UIColor.green() else if response.actionidentifier == "decline" { eventresponse.text = "Not going :(" eventresponse.textcolor = UIColor.red() done(.dismiss)
94 // Intercepting notification action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { server.posteventresponse(response.actionidentifier) { if response.actionidentifier == "accept" { eventresponse.text = "Going!" eventresponse.textcolor = UIColor.green() else if response.actionidentifier == "decline" { eventresponse.text = "Not going :(" eventresponse.textcolor = UIColor.red() done(.dismiss)
95 // Intercepting notification action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { server.posteventresponse(response.actionidentifier) { if response.actionidentifier == "accept" { eventresponse.text = "Going!" eventresponse.textcolor = UIColor.green() else if response.actionidentifier == "decline" { eventresponse.text = "Not going :(" eventresponse.textcolor = UIColor.red() done(.dismiss)
96 // Intercepting notification action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { server.posteventresponse(response.actionidentifier) { if response.actionidentifier == "accept" { eventresponse.text = "Going!" eventresponse.textcolor = UIColor.green() else if response.actionidentifier == "decline" { eventresponse.text = "Not going :(" eventresponse.textcolor = UIColor.red() done(.dismiss)
97 // Intercepting notification action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { server.posteventresponse(response.actionidentifier) { if response.actionidentifier == "accept" { eventresponse.text = "Going!" eventresponse.textcolor = UIColor.green() else if response.actionidentifier == "decline" { eventresponse.text = "Not going :(" eventresponse.textcolor = UIColor.red() done(.dismiss)
98 // Intercepting notification action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { server.posteventresponse(response.actionidentifier) { if response.actionidentifier == "accept" { eventresponse.text = "Going!" eventresponse.textcolor = UIColor.green() else if response.actionidentifier == "decline" { eventresponse.text = "Not going :(" eventresponse.textcolor = UIColor.red() done(.dismissandforwardaction)
99
100 Text Input Action
101 // Text Input Action private func makeeventextensioncategory() -> UNNotificationCategory { let commentaction = UNTextInputNotificationAction( identifier: "comment", title: "Comment", options: [], textinputbuttontitle: "Send", textinputplaceholder: "Type here ") return UNNotificationCategory(identifier: "event-invite", actions: [ acceptaction, declineaction, commentaction ], minimalactions: [ acceptaction, declineaction ], intentidentifiers: [], options: [])
102 // Text Input Action private func makeeventextensioncategory() -> UNNotificationCategory { let commentaction = UNTextInputNotificationAction( identifier: "comment", title: "Comment", options: [], textinputbuttontitle: "Send", textinputplaceholder: "Type here ") return UNNotificationCategory(identifier: "event-invite", actions: [ acceptaction, declineaction, commentaction ], minimalactions: [ acceptaction, declineaction ], intentidentifiers: [], options: [])
103 // Text Input Action private func makeeventextensioncategory() -> UNNotificationCategory { let commentaction = UNTextInputNotificationAction( identifier: "comment", title: "Comment", options: [], textinputbuttontitle: "Send", textinputplaceholder: "Type here ") return UNNotificationCategory(identifier: "event-invite", actions: [ acceptaction, declineaction, commentaction ], minimalactions: [ acceptaction, declineaction ], intentidentifiers: [], options: [])
104 // Text Input Action private func makeeventextensioncategory() -> UNNotificationCategory { let commentaction = UNTextInputNotificationAction( identifier: "comment", title: "Comment", options: [], textinputbuttontitle: "Send", textinputplaceholder: "Type here ") return UNNotificationCategory(identifier: "event-invite", actions: [ acceptaction, declineaction, commentaction ], minimalactions: [ acceptaction, declineaction ], intentidentifiers: [], options: [])
105
106 // Text input action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { if let textresponse = response as? UNTextInputNotificationResponse { server.send(textresponse.usertext) { done(.dismiss)
107 // Text input action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { if let textresponse = response as? UNTextInputNotificationResponse { server.send(textresponse.usertext) { done(.dismiss)
108 // Text input action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { if let textresponse = response as? UNTextInputNotificationResponse { server.send(textresponse.usertext) { done(.dismiss)
109 // Text input action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { if let textresponse = response as? UNTextInputNotificationResponse { server.send(textresponse.usertext) { done(.dismiss)
110 // Text input action response class NotificationViewController: UIViewController, UNNotificationContentExtension { func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { if let textresponse = response as? UNTextInputNotificationResponse { server.send(textresponse.usertext) { done(.dismiss)
111
112
113
114 // Custom input accessory view class NotificationViewController: UIViewController, UNNotificationContentExtension { override func canbecomefirstresponder() -> Bool { return true override var inputaccessoryview: UIView { get { return inputview func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { if response.actionidentifier == "comment" { becomefirstresponder() textfield.becomefirstresponder()
115 // Custom input accessory view class NotificationViewController: UIViewController, UNNotificationContentExtension { override func canbecomefirstresponder() -> Bool { return true override var inputaccessoryview: UIView { get { return inputview func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { if response.actionidentifier == "comment" { becomefirstresponder() textfield.becomefirstresponder()
116 // Custom input accessory view class NotificationViewController: UIViewController, UNNotificationContentExtension { override func canbecomefirstresponder() -> Bool { return true override var inputaccessoryview: UIView { get { return inputview func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { if response.actionidentifier == "comment" { becomefirstresponder() textfield.becomefirstresponder()
117 // Custom input accessory view class NotificationViewController: UIViewController, UNNotificationContentExtension { override func canbecomefirstresponder() -> Bool { return true override var inputaccessoryview: UIView { get { return inputview func didreceive(_ response: UNNotificationResponse, completionhandler done: (UNNotificationContentExtensionResponseOption) -> Void) { if response.actionidentifier == "comment" { becomefirstresponder() textfield.becomefirstresponder()
118
119 Summary Attachments and custom UI Attachments with service extension Custom UI with content extension Media attachments User interaction
120 More Information
121 Related Sessions Introduction to Notifications Pacific Heights Wednesday 9:00AM
122 Labs Notifications Lab Frameworks Lab C Wednesday 11:00AM Notifications Lab Graphics, Games, and Media Lab B Friday 9:00AM
123
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 informationEnhancing 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 informationWhat 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 informationUsing 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 informationExtending 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 informationImplementing UI Designs in Interface Builder
Developer Tools #WWDC15 Implementing UI Designs in Interface Builder Session 407 Kevin Cathey Interface Builder Engineer Tony Ricciardi Interface Builder Engineer 2015 Apple Inc. All rights reserved. Redistribution
More informationMedia 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 informationWhat 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 informationCocoa Touch Best Practices
App Frameworks #WWDC15 Cocoa Touch Best Practices Session 231 Luke Hiesterman UIKit Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationWhat 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 informationWhat 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 informationMastering UIKit on tvos
App Frameworks #WWDC16 Mastering UIKit on tvos Session 210 Justin Voss UIKit Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from
More informationGetting 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 informationLeveraging 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 informationWhat 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 informationWhat 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 informationWhat 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 informationQuick 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 informationINTRODUCTION TO ARCHITECTING YOUR IOS APP
INTRODUCTION TO ARCHITECTING YOUR IOS APP AGENDA Goals of software architecture Design guidelines Practical tips GOALS OF SOFTWARE ARCHITECTURE GOALS OF SOFTWARE ARCHITECTURE Code is comprehensible for
More informationlecture 10 UI/UX and Programmatic Design cs : spring 2018
lecture 10 UI/UX and Programmatic Design cs198-001 : spring 2018 1 Announcements custom app progress form due before lab (~1 minute) will be released after lecture only 2 labs left (both very important)
More information} override func didreceivememorywarning() { 26 super.didreceivememorywarning() 27 } 28 } Pause Stop
Chapter 30 30.1 App App MP3 Don t Download This Song [1] Finder MP3 Xcode UI 1 import UIKit 2 import AVFoundation 3 4 class ViewController: UIViewController { 5 6 var player: AVAudioPlayer? 7 8 override
More informationWatchKit 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 informationios Memory Deep Dive #WWDC18 Kyle Howarth, Software Engineer James Snee, Software Engineer Kris Markel, Software Engineer
Session #WWDC18 ios Memory Deep Dive 416 Kyle Howarth, Software Engineer James Snee, Software Engineer Kris Markel, Software Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display
More informationData 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 informationNotifications. Mobile Application Development in ios School of EECS Washington State University Instructor: Larry Holder
Notifications Mobile Application Development in ios School of EECS Washington State University Instructor: Larry Holder Mobile Application Development in ios 1 Outline Alerts Internal notifications Local
More informationBuilding 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 informationBuilding 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 informationCarPlay Audio and Navigation Apps
#WWDC18 CarPlay Audio and Navigation Apps Tunes and turns Jonathan Hersh, ios Car Experience Albert Wan, ios Car Experience Mike Knippers, ios Car Experience 2018 Apple Inc. All rights reserved. Redistribution
More informationWhat s New in Testing
#WWDC18 What s New in Testing Session 403 Honza Dvorsky, Xcode Engineer Ethan Vaughan, Xcode Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written
More informationEnabling 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 informationSeamless 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 informationGetting 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 informationStanford CS193p. Developing Applications for ios. Winter CS193p. Winter 2017
Stanford Developing Applications for ios Today Views Custom Drawing Demo FaceView Views A view (i.e. UIView subclass) represents a rectangular area Defines a coordinate space For drawing And for handling
More informationApp. Chapter 19 App. App (ViewController) App. Single View Application Single View Application View. (View Controller)
Chapter 19 App App (ViewController) App 19.1 App App Single View Application Single View Application View Controller View Controller Label Button Button (View Controller) 2 View Controller Utility Area
More informationIntroducing 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 informationCreating 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 informationAdvanced 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 informationStanford CS193p. Developing Applications for ios. Spring CS193p. Spring 2016
Stanford Developing Applications for ios Today Views Custom Drawing Demo FaceView Views A view (i.e. UIView subclass) represents a rectangular area Defines a coordinate space For drawing And for handling
More informationBuilding 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 informationIntroduction 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 informationApp Extension Best Practices
App Frameworks #WWDC15 App Extension Best Practices Session 224 Sophia Teutschler UIKit Engineer Ian Baird CoreOS Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationios 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 informationimessage 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 informationAdvances 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 informationWhat 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 informationMonetize 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 informationWhat 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 informationIntroducing 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 informationEvent Delivery: The Responder Chain
When you design your app, it s likely that you want to respond to events dynamically. For example, a touch can occur in many different objects onscreen, and you have to decide which object you want to
More informationStanford CS193p. Developing Applications for ios. Winter CS193p! Winter 2015
Stanford CS193p Developing Applications for ios Today Objective-C Compatibility Bridging Property List NSUserDefaults Demo: var program in CalculatorBrain Views Custom Drawing Demo FaceView Bridging Objective-C
More informationBuilding the App - Part 5 - Adding a Link
Unit 4 - Coding For Your App Copy and Paste the code below exactly where the tutorials tell you. DO NOT COPY TEXT IN RED. Building the App - Part 5 - Adding a Link XCODE 7 @IBAction func Button1(_ sender:
More informationEngineering 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 informationTouch 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 informationGerontechnology II. Collecting Smart Phone Sensor Data for Gerontechnology. Using ios
Gerontechnology II Collecting Smart Phone Sensor Data for Gerontechnology Using ios Introduction to ios ios devices and sensors Xcode Swift Getting started with Sensor App ios Devices ipad iphone Apple
More informationStanford CS193p. Developing Applications for ios. Fall CS193p. Fall
Stanford Developing Applications for ios Today Emoji Art Demo continued UITextField Editable text input control Demo: Add a text field to Emoji Art Demo Emoji Art Make our Emoji Art scrollable/zoomable/centered
More informationView Controllers CPRE 388
View Controllers CPRE 388 View Controllers Manage views in model view controller design template. Many types: custom view controller; container view controller; modal view controller. Custom View controllers
More informationMastering 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 informationLecture 8 Demo Code: Cassini Multithreading
Lecture 8 Demo Code: Cassini Multithreading Objective Included below is the source code for the demo in lecture. It is provided under the same Creative Commons licensing as the rest of CS193p s course
More informationIntro to Native ios Development. Dave Koziol Arbormoon Software, Inc.
Intro to Native ios Development Dave Koziol Arbormoon Software, Inc. About Me Long time Apple Developer (20 WWDCs) Organizer Ann Arbor CocoaHeads President & ios Developer at Arbormoon Software Inc. Wunder
More informationCloudKit 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 informationNews- ipad: ios(swift) Application
News- ipad: ios(swift) Application Document Version 1.0.1 Date: 9 th Nov, 2014 2 [NEWS- IPAD: APP DOCUMENTATION] Important Notes:... 6 AppDelegate Class Reference... 7 Tasks... 7 Instance Methods... 7
More informationMobile Development Lab 3
Mobile Development Lab 3 Objectives Illustrate closures through examples Have fun with maps, location and geolocation Have fun with animations Closures implemented in Swift Closures are self-contained
More informationRx in the real world. 1 Rob Ciolli
Rx in the real world 1 Rob Ciolli 2 Rob Ciolli 3 Rob Ciolli The App 4 Rob Ciolli Quick architecture overview 5 Rob Ciolli MV - WTF 6 Rob Ciolli Model Simple, immutable data struct returned from DB or APIs
More informationGetting Started with CareKit
App Frameworks #WWDC16 Getting Started with CareKit Session 237 Umer Khan Software Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationNew UIKit Support for International User Interfaces
App Frameworks #WWDC15 New UIKit Support for International User Interfaces Session 222 Sara Radi Internationalization Software Engineer Aaltan Ahmad Internationalization Software Engineer Paul Borokhov
More informationSocial Pinboard: ios(swift) Application
Social Pinboard: ios(swift) Application Document Version 1.0.1 Date: 15 th May, 2015 2 [SOCIAL PINBOARD: APP DOCUMENTATION] Important Notes:... 5 AppDelegate Class Reference... 6 Tasks... 6 Instance Methods...
More informationManaging 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 informationWhat 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 informationChapter 22 TableView TableView. TableView ios. ViewController. Cell TableViewCell TableView
Chapter 22 TableView TableView Android TableView ListView App 22.1 TableView TableView Storyboard Table View ViewController TableView ios Cell TableViewCell TableView Table View Cell Cell ImageView (imageview)
More informationUI Design and Storyboarding
UI Design and Storyboarding Mobile Application Development in ios School of EECS Washington State University Instructor: Larry Holder Mobile Application Development in ios 1 Outline Model-View-Controller
More informationMobile Development - Lab 2
Mobile Development - Lab 2 Objectives Illustrate the delegation mechanism through examples Use a simple Web service Show how to simply make a hybrid app Display data with a grid layout Delegation pattern
More informationIntroducing 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 informationIntroducing SiriKit. Hey Siri, say hello to apps #WWDC16. App Frameworks. Session 217
App Frameworks #WWDC16 Introducing SiriKit Hey Siri, say hello to apps Session 217 Robby Walker SiriKit Engineering Brandon Newendorp SiriKit Engineering Corey Peterson SiriKit Design 2016 Apple Inc. All
More informationStanford CS193p. Developing Applications for ios. Fall CS193p. Fall
Stanford Developing Applications for ios Today Miscellaneous Error Handling Any Other Interesting Classes Views Custom Drawing Demo: Draw a Playing Card enum Thrown Errors In Swift, methods can throw errors
More informationDocument Version Date: 1st March, 2015
7 Minute Fitness: ios(swift) Application Document Version 1.0.1 Date: 1st March, 2015 2 [7 MINUTE FITNESS: APP DOCUMENTATION] Important Notes:... 5 AppDelegate Class Reference... 6 Tasks... 6 Instance
More informationAccessibility 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 informationA Mad Libs app that you will navigate through 3 UIViewControllers to add text that will be shown in a story on the fourth UIViewController.
WordPlay App: A Mad Libs app that you will navigate through 3 UIViewControllers to add text that will be shown in a story on the fourth UIViewController. Create a new project Create a new Xcode project
More informationWhat'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 informationWriting Energy Efficient Apps
Session App Frameworks #WWDC17 Writing Energy Efficient Apps 238 Daniel Schucker, Software Power Engineer Prajakta Karandikar, Software Power Engineer 2017 Apple Inc. All rights reserved. Redistribution
More informationWhat 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 informationPatterns & practices for unit-testing Swift-ly. Jakub Turek 18th June, 2018
Patterns & practices for unit-testing Swift-ly Jakub Turek 18th June, 2018 About me Jakub Turek https://jakubturek.com @KubaTurek turekj EL Passion 1 Agenda 1. Introduction to unit-testing. Test Driven
More informationBuilding 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 informationHigh Performance Auto Layout
#WWDC18 High Performance Auto Layout Ken Ferry, ios System Experience Kasia Wawer, ios Keyboards 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationTypes of Views. View category Purpose Examples of views. Display a particular type of content, such as an image or text.
ios UI Components Sisoft Technologies Pvt Ltd SRC E7, Shipra Riviera Bazar, Gyan Khand-3, Indirapuram, Ghaziabad Website: www.sisoft.in Email:info@sisoft.in Phone: +91-9999-283-283 Types of Views View
More informationIntroducing the Contacts Framework
App Frameworks #WWDC15 Introducing the Contacts Framework For OS X, ios, and watchos Session 223 Bruce Stadnyk ios Contacts Engineer Dave Dribin OS X Contacts Engineer Julien Robert ios Contacts Engineer
More informationIntegrating Apps and Content with AR Quick Look
Session #WWDC18 Integrating Apps and Content with AR Quick Look 603 David Lui, ARKit Engineering Dave Addey, ARKit Engineering 2018 Apple Inc. All rights reserved. Redistribution or public display not
More informationMultitasking Support on the ios Platform
Multitasking Support on the ios Platform Priya Rajagopal Invicara (www.invicara.com) @rajagp Multitasking on ios? Multitasking allows apps to perform certain tasks in the background while you're using
More informationModern 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 informationLESSONS LEARNED. SWIFT. Dagna Bieda, 7th April 2016
LESSONS LEARNED. SWIFT Dagna Bieda, 7th April 2016 SWIFT & XCODE Brief Intro Language that essentially marries the readability of Python with the speed of C++. @jeremyconkin SWIFT mix of good practices
More informationWhat s New in HomeKit
App Frameworks #WWDC15 What s New in HomeKit Session 210 Anush Nadathur HomeKit Engineer Naveen Kommareddi HomeKit Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationAnnouncements. Today s Topics
Announcements Lab 2 is due tonight by 11:59 PM Late policy is 10% of lab total per day late So -7.5 points per day late for lab 2 Labs 3 and 4 are posted on the course website Extensible Networking Platform
More informationWhat s New in Core Image
Media #WWDC15 What s New in Core Image Session 510 David Hayward Engineering Manager Tony Chu Engineer Alexandre Naaman Lead Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display
More informationSwift 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 informationStanford CS193p. Developing Applications for ios. Fall CS193p. Fall
Stanford Developing Applications for ios Today More about Documents Demo Use Codable to create a JSON representation of our document Store it in the filesystem Think better of that and let UIDocument store
More informationMysteries 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 informationWhat 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 informationIntroducing PDFKit on ios
Session App Frameworks #WWDC17 Introducing PDFKit on ios PDF on macos and ios 241 Jeremy Bridon, Software Engineer Nicki Brower, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or
More informationiphone Application Programming Lab 3: Swift Types and Custom Operator + A02 discussion
Lab 3: Swift Types and Custom Operator + A02 discussion Nur Al-huda Hamdan RWTH Aachen University Winter Semester 2015/2016 http://hci.rwth-aachen.de/iphone Learning Objectives Discuss A02 Another implementation
More informationITP 342 Mobile App Dev. Connections
ITP 342 Mobile App Dev Connections User Interface Interactions First project displayed information to the user, but there was no interaction. We want the users of our app to touch UI components such as
More informationIntroducing 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