Skip to content

Latest commit

 

History

History
708 lines (694 loc) · 32.6 KB

2016-WWDC.md

File metadata and controls

708 lines (694 loc) · 32.6 KB

WWDC 2016

I didn't attend DC. These notes are from watching the session videos.

101: Keynote

  • Tim Cook
    • Conference
      • 13 million registered devs, 2 million added in the past year
      • Over 5000 attendees
      • Over 74 countries
      • 70% are first-time attendees
      • 350 scholarships this year
      • 100 attendees under 18, youngest is 9
      • Over 1000 apple engineers on site
    • App Store
      • Recently passed 2 million apps on the store
      • 130 billion downloads
      • $50 billion paid to developers
    • Talking about 4 Apple platforms today
      • Mac
      • iPhone/iPad
      • Apple TV
      • Watch
  • Kevin Lynch: watchOS
    • Performance: series improvements in app launch time
      • Keep favorite apps in memory
      • Background updates of data, refreshed information
      • Instance lunch
    • Dock: favorite apps
    • Control center on watch face: swipe up from bottom
    • Scribble: write letters on watch face. Handles different language, showed Mandarin
    • Watch faces
      • Mini Mouse
      • Activity rings
      • Easier to switch faces by swiping
    • Stacey Lysek (sp?) demo
      • Showed off some updated apps, watch face swiping, dock
    • Back to Kevin
    • SOS on the watch, to call for help
      • Press and hold side button to dial 911 or select other emergencies
      • Automatically notifies emergency contacts
    • Activity and workout: Jay Blahnik (sp?)
      • Activity Sharing
      • See activity rings for other people
      • Wheelchair users: different motions used for movement
        • Time to Roll notifications
        • Two dedicated workouts in the workout app
        • Activity rings optimized for wheelchair users
      • New app: Breathe
        • Guide through deep breathing sessions
        • Option to use haptic feedback
    • Back to Kevin
    • Other new stuff:
      • Apple Pay within apps
      • Fitness apps can run in the background
      • SpriteKit, SceneKit
      • Native event support for crown and gestures
      • Embed audio and video
      • Game Center, CloudKit
      • Developer preview today
      • Free upgrade out this fall
  • Eddie Cue: tvOS
    • 1300 video channels, 6000 apps
    • New apps:
      • Sling (live TV) coming to Apple TV today
      • Fox Sports Go: four games at once, coming this summer
      • Molotov: French TV and on-demand, next month
      • Games: Minecraft story mode, Sketch Party (Pictionary, basically)
    • App TV remote app
      • Playback controls, all features of the Siri remote
      • Use accelerometer and gyroscope to play games
    • Option to search YouTube from Siri
    • Live Tune-in
      • Siri: “Watch ESPN 2"
      • Making available on iPad and Apple TV
      • Single Sign-on to simplify signing in with cable provider
    • Dark mode
    • Auto-downloads: download an iOS app, and it’ll download on the TV
    • Updates
      • ReplayKit: live broadcast, share gameplay video
      • PhotoKit
      • HomeKit
    • Developer preview today
    • Upgrade out this fall
  • Craig Federighi: OS X
    • "OS X” for over 15 years
    • Now macOS: Sierra
    • Auto Unlock
      • Nearby watch
    • Universal clipboard
      • Images, video, text: paste between devices
    • iCloud drive
      • Desktop files synced across macs and mobile devices
    • Optimized storage
      • Wipe unneeded/old files
    • Apple Pay
      • On the web: prompts you to authenticate the purchase with touch ID on your phone or watch
    • Tabs
      • Tabs everywhere
      • Available to devs out of the box without extra work
    • Picture in picture
      • Example: youtube
      • Works while other apps are in full-screen, too
    • Siri on the Mac
      • Can search files
      • Refine search results by narrowing criteria
      • Option to pin results into notification center
      • Request to play playlists
    • Big stuff
      • Continuity
      • Siri
    • Developer preview today, public beta in July (beta.apple.com), public release in the fall
  • Still Craig: iOS 10
    • 1: Redesigned lock screen and home stuff
      • Raise to wake: like Watch, phone wakes up without tapping a button, to see notifications since the Touch ID is so fast
      • 3D touch on notifications to get more detail
      • Control center
        • Redesigned
        • Separate Music controls when you swipe over
      • Camera from lock screen
        • Slide from the right
      • Slide from the left to see widgets: weather, calendar
      • Home screen 3D touch:
        • Messages to see what’s in there
        • Activity summary
      • Looks like Today view has moved to the swipe left search view
    • 2: Siri opened up to developers
      • Slack, weChat, Uber, Lyft, RunKeeper, Number 26, Square Cash, Skype
      • Same in CarPlay
    • 3: QuickType
      • Intelligent suggestions based on context
      • Multilingual typing
    • 4: Photos
      • Advanced Computer Vision
      • Deep learning techniques for facial recognition done locally on device
      • Object and scene recognition: powerful searching
      • Memories: generate movies with photos, videos, adds background music, option for length
    • Eddie Cue back
    • 5: Maps
      • All new design
      • Proactive: slide up from the bottom for suggestions, like calendar events, travel time to work
      • Improved navigation, showing traffic and automatic zoom in/out as appropriate
      • Easier to pan and zoom in navigation view to check traffic conditions
      • Controls to find things along the route, like a gas station
      • CarPlay: can include turn by turn navigation in the instrument cluster behind the wheel
      • Map Extensions
        • Example: make a dinner reservation in OpenTable right from maps
        • Option to book a ride with extensions like Uber
    • 6: Music
      • 15 million paid subscribers
      • All new design
      • Bozoma Saint John: demo
        • Downloaded section
        • Recently added section
        • For You section: recommended music
        • Lyrics when song is playing
    • 7: Apple News
      • 60 million monthly users reading news
      • Redesigned
      • Featured stories
      • Subscriptions
        • Wall Street Journal, National Geographic
      • Breaking news notifications to the lock screen
    • Back to Craig
    • 8: HomeKit
      • New accessory types: cameras, door locks, etc
      • All major manufacturers have HomeKit integration, some builders now doing it from scratch
      • New Home app on iOS
      • 3D touch to control light dimmer
      • Scenes: "good night” might turn off lights, lock the door, adjust thermostat
      • “Good morning siri” will start the morning scene
      • HomeKit built into Control Center
      • Built into Watch too
    • 9: Phone
      • Voicemail transcription
      • Phone extension for apps to help identify possible phone spam
      • New VOIP API for better incoming call notification: full screen instead of little push notification
      • Contact card enhanced to keep track of how you prefer to call someone
      • Cisco Spark app: can receive calls to work number on your iPhone
    • 10: Messages
      • Rich links
      • Inline video playing
      • Live camera feed when opening the photo option
      • Emoji appear 3x bigger
      • Emoji prediction in QuickType
      • Quick emoji-fication of existing words in the message
      • Bubble effects
        • Big loud, smaller more gentle
        • Invisible ink: slide finger across to reveal message or photo
      • Handwritten messages, drawing out like like Apple Watch drawing
        • Digital touch
        • Heartbeat
      • Whole-screen (“Happy new year” fireworks)
      • Demo: Bethany and Emron (?)
        • Emoji re-actions?
      • iMessage Apps
        • iMessage has an app drawer
        • Demo
          • Stickers: send alone, or stick them on existing messages
          • DoorDash: food orders. Group cart.
          • JibJab: faces on animations
    • Others
      • Notes collaboration
      • Conversation view in Mail
      • Live photos editing
      • Split view in Safari on iPad: two websites side by side
      • Dropping 4S support
    • Privacy
      • End to end encryption for things like FaceTime and messages
      • On-device intelligence for image recognition
      • No user profiling for searches in maps, spotlight, etc
      • Differential privacy: to recognize overall trends
    • Developer preview today, beta in July, public in Fall
  • Back to Tim
  • Swift Playgrounds on iPad
    • Sheryl Thomas to demo
    • Lessons for learning to code
    • Developer preview today, public beta July, public release same time as iOS 10
    • Free
  • Video about how developers got their start
  • Extensions: secure, sandboxed
  • iMessage apps (Darren Adler)
    • Message, session, conversation
    • Privacy: app does not have access to the larger conversation
    • App will display in compact mode the same size as the keyboard when user is swiping through them
    • Simulator includes a special Messages app to show both sides of a fake conversation
  • Siri (Robbie Walker)
    • App vocabulary: plist (specific to app)
    • User vocabulary: code (specific to an individual user)
    • Extension
      • Understand parameters
      • Confirm intent
      • Handle intent
    • Second extension to customize how Siri shows these options
    • Siri will say a lot more and show less if your in CarPlay
  • Swift (Chris Lattner)
    • Swift 3
      • Get early growing pains over with
      • Stability and compatibility
  • Swift playgrounds on iPad
    • Documentation on the file format available now
    • Lesson materials available later this year
  • Xcode
    • Swift color and image literals
    • Automatic doc blocks
    • Xcode App extensions
      • Starting with source editing
    • Unified API reference
    • Interface builder includes a toolbar to show each VC in different size classes and orientations
      • Toggle to edit in one size class, and the device context bar shows only the devices/orientations where that class will be used
      • Shows light/dark interface options for tvOS apps
    • IB supports canvas operations at any zoom level
    • New analyzers: localization, nullability, deallocation
    • xcodebuild run pre-built tests
    • Runtime Issues
      • UI
        • Ambiguous layouts
      • Threads
        • Thread sanitizer: able to detect common threading issues
      • Memory
        • Visualize and navigate object graph
        • Automatically finds leaks
    • Provisioning
      • Rebuilt the system in 8
      • Automatic code signing option: Xcode uses a dedicated profile
      • Disable automatic to use customized code signing, per build configuration
    • Development certs: now support multiple certs. No longer need to revoke/share when you get a new Mac
  • Platform technologies (Sebastian)
    • Compression: lzfse open sourced
    • Networking: prioritize high priority apps and devices. With Cisco.
    • Logging
      • Unified, fast, compact, privacy
    • File systems
      • HFS+ released 1998
      • Apple File System
        • Cloning: copied file doesn’t take up more space until modified
        • Snapshots: Full volume backup
    • Privacy
      • Differential privacy
      • Privacy budget
  • iOS
    • Share option for apps when using 3D touch
    • NSUserActivity is gateway to a whole lot of functionality
      • Adding in iOS 10: people and places
    • Widget
      • Compact fixed size
      • Widgets available in 3D touch from home screen
      • To use that
        • Update look
        • Build with iOS 10 SDK—that’s it
  • macOS
    • iCloud APIs no longer restricted to App Store apps (as long as the app is signed)
    • CloudKit
      • Permission model: public, or private to the user
      • New sharing feature to allow others to access data
  • watchOS
    • Glanceable: interactions are short
    • Actionable: simplify access to most common actions
    • Responsive: keep apps up to date and ready to act
    • Three interfaces for an app
      • Full screen
      • Complication
      • Notification
    • Glances: now in the dock, not a separate glance interface
    • Return to last app for up to 8 minutes after you last used it. After that, goes back to the watch face
    • Background app refresh
      • Workout apps run continually in the background
      • Heart rate and accelerometer now provide continuous values during workouts
    • Hardware APIs: Crown events, gesture recognizers, gyroscope
    • SpriteKit, SceneKit, speaker access, inline video
    • CloudKit
      • Works when phone isn’t present but near known wifi
    • Apple Pay
    • Watch face gallery in iOS 10 shows complications from their iPhone apps
    • Demo (Eliza)
  • tvOS (Jim Young)
    • Multipeer connectivity
    • May require game controller
  • Graphics
    • sRGB vs Wide Color (P3)
    • ReplayKit: introduced last year?
      • Streaming this year
      • ReplayKit streaming extension
      • About 3 lines of code to adopt if you already support ReplayKit
  • API Updates
    • Swift API Guidelines
      • NS_SWIFT_NAME for Obj-C code that's used in Swift
    • API Refinements
      • Nullability: mostly done last year, refined a bit this year
      • Class properties
      • @noescape, NS_NOESCAPE
  • AppKit
    • File promise dragging
    • NSGridView: like UIStackView
    • Simpler control constructors
  • Layout loop debugging support
  • Foundation
    • Dropping NS prefix in Swift
    • New value types in Swift
    • Unit, measurement, MeasurementFormatter
    • DateInterval, DateIntervalFormatter
    • ISO8601DateFormatter
  • Other updates
    • New URLSessionTaskMetrics class
  • Overview
    • Smooth scrolling
    • Improvements to self-sizing cells
    • Interactive reordering
  • Smooth scrolling
    • Do most of the work in cellForItemAtIndexPath
    • Do minimal work in willDisplayCell/didEndDisplayingCell
    • Note that a cell prepared in cellForItemAtIndexPath might never display, if the user changes scroll direction
    • Prefetching tips
      • Use GCD of NSOperationQueue
      • Adaptive technology: if the user is scrolling really fast, prefetching might not happen
      • Use cancelPrefetchingForItemsAt to de-prioritize data loading to better match current user focus
    • Prefetching availabile on UITableView too, in a similarly-named counterpart
  • Improvements to self-sizing cells
    • To use self-sizing cells, give the UICollectionViewFlowLayout an estimatedItemSize
    • Three methods to self-sizing cells:
      • Auto Layout
      • Override sizeThatFits
      • Override preferredLayoutAttributesFittingAttributes
    • New constant: UICollectionViewFlowLayoutAutomaticSize
    • This will adjust the estimated size for future cells based on a running average of cells that have been sized
  • Interactive reordering
    • beginInteractiveMovementForItem
    • updateInteractiveMovementTargetPosition
    • endInteractiveMovement
    • cancelInteractiveMovement
    • New: isPagingEnabled
  • Autoresize masks in IB
    • Translated to constraints at runtime, NOT build time
  • Views with constraints ignore autoresizing masks
  • Design and runtime constraints
    • Placeholder constraint: checkbox in IB. Removed at build time. Programmatically create actual constraint at runtime.
    • For custom views, use Intrinsic size: placeholder. Set a simulated size for use in IB. Provide real intrinsic content size from code.
    • Turn off ambiguity per view. For use when constraints will be added at runtime. Change ambiguity setting away from Always Verify.
  • NSGridView on macOS
    • NSGridRow, NSGridColumn
      • Automatic or explicit sizing
      • Optional padding/spacing
      • Hidden rows and columns
    • NSGridCell
      • Cells can be merged
    • Can be created by specifying the views in an array: NSGridView(views: [])
      • Automatically handles columns
    • Columns, rows, cells, and the grid view all have x and y placement properties
      • Inherited
    • rowAlignment: set to baseline
      • Takes precedent over the placement properties
    • Fetch a the cell for a subview with gridView.cell(for: subview)
    • topPadding and bottomPadding on cells
    • Padding is like margin in CSS. Spacing is like padding in CSS.
  • Layout feedback loop debugging
    • UIViewLayoutFeedbackLoopDebuggingThreshhold launch argument will raise an exception. Set to 50...1000
  • “Siri, remind me about this when I get home”—knows the context of what the user was doing at the time
  • Covering
    • NSUserActiviy: handoff
    • Spotlight search: iOS 9
    • Location suggestions: iOS 10
      • Shown in QuickType
    • Contextual Siri requests
    • Contact interactions
  • NSUserActivity for native apps, schema.org for web apps
  • NSUserActivity
    • Capture app state, in a way that can be restored later
  • Creating activities
    • Create NSUserActivity object, give it a user-facing title
    • Enable capabilities: isEligibleForHandoff, isEligibleForSearch, isEligibleForPublicIndexing
    • Specify userInfo: details to re-create state on restore
    • Provide metadata: CSSearchableItemAttributeSet
      • Thumbnail, keywords, webpage URL (for handoff to devices without the app installed)
    • becomeCurrent(): indicates that
  • application:continueUserActivity:restorationHandler
    • Check activity type
  • Items above allow for handoff, contextual Siri, location suggestion
  • MapKit based apps
    • Reuse the same user activity, and set mapItem property
  • Best practice
    • Lazy payload update
      • set needsSave on activity
      • Implement updateUserActivityState to provide updated payload when requested by the OS
    • Keep strong reference to the NSUserActivity object
      • userActivity property exists on UIResponder, so UIKit handles the reference
    • Transfer a small payload
      • Ex: don’t encode an image in the userInfo dictionary. Maybe use a URL for it instead
    • Use reverse-DNS for activity types, to avoid name collisions
      • Also: use multiple activity types, for different actions in the app
  • Location suggestions in QuickType
    • Text field can indicate if the expected content is a location
    • textField.textContentType = UITextContentTypeFullStreetAddress
      • Other types: person’s name, address/location, phone number, etc
    • Use the textContentType with the correct granularity, like FullStreetAddress vs CityAndState
  • Routing apps: direction request banner in app switcher
    • Register as a routing app
      • in the capabilities panel
      • optionally declare map regions that are supported (for local public transit, for example)
    • Handle launch with MKDirectionsRequest
      • App is launched with a URL
      • use MKDirectionsRequest.isDirectionsRequestURL
      • CLGeocoder().geocodeAddressDictionary to get place mark for the address
    • iOS learns which routing app the user wants to be offered
  • Media app suggestions
    • iOS promotes the app a user is likely to use based on behavior, in Spotlight and Today view
    • If they follow a particular trigger, may be elevated to the lock screen
      • For example, plug in headphones
    • MPPlayableContentManager
  • "The more the system knows about your app, the more opportunity it will have to promote it."
  • Fundamentals
    • Xcode uses codesign behind the scenes
    • Three things needed to sign apps:
      • Signing certificate
        • About the developer: identify you
        • Issued by Apple. Trust chain back to Apple.
        • Development (for build/run), distribution (auth with iTC or enterprise distro)
        • Requires a private key. Created when the certificate is generated.
      • Provisioning profiles
        • About the app: identifies the app
        • Issued by Apple
        • Allows running on devices, and allows entitlements (whitelist)
      • Entitlements
        • Declare support for capabilities
        • Fundamentally, just a string with associated value
        • Defined per target
        • plist is managed from the Capabilities tab
    • When signing an app:
      • Xcode builds the app
      • Looks at certificates on the machine, and picks the newest one matching the team
      • Looks provisioning profiles, and picks the newest one matching the bundle ID
      • Profile embedded in the app
      • Cert used to apply code seal to the app
  • Signing Certificate per Mac
    • Previously:
      • Development accounts have a limit of one development cert
      • Worked fine if you only had one machine. For more than one, you needed to sync your private key over.
    • In Xcode 8: you can have multiple development certificates
    • Distribution certs still have a limit of one
    • Cert can be created on developer site or in Xcode 8
  • Signing in Xcode
    • Fully redesigned in Xcode 8
      • Faster and more reliable
      • New workflows, and new interface in the General tab
      • Actionable messages when something goes wrong
      • Status reporting, when Xcode fixes a problem
    • Automatic signing
      • Takes care of everything for you in the background
      • Prompts only when necessary
        • eg: when you connect an unregistered device, it'll ask if that device should be registered
      • Signing report shows what Xcode did and why
        • Report Navigator, in left sidebar
        • Each row can be expanded by clicking disclosure at right
      • Only works with development signing
      • Limited to Xcode-created provisioning profiles
      • Distribution assets are not touched
    • Customized signing
      • Full control over signing
      • New error reporting shown alongside signing settings
      • Info button next to the provisioning profile dropdown displays details about the profile
      • Customized signing is limited to manually-created profiles. Xcode will never modify these.
      • Any type of profile—build or distribution
      • New build setting: PROVISIONING_PROFILE_SPECIFIER, references profiles by name (not unique ID)
      • Updating settings in the Capabilities tab will not modify your provisioning profile. A little error icon by the capability will explain what steps need to be taken manually, and they also display near the signing settings on the General tab.
  • Best Practices
    • Use automatic signing
    • Manual: don't use CODE_SIGNING_IDENTITY. This is specific to you, not the team.
  • Cmd+Opt+/ to add doc block
  • FIXME: comments now displayed in the document item list with a bandage icon
  • Code completion for image names. De-refs to UIImage(imageNamed). Also works for colors.
  • Ctl+Cmd+E: edit all in scope
  • Ctl+Cmd+G: jump to next search result in workspace. Like Cmd+G across all files
  • Source editor commands
    • Xcode extensions run in their own processes: don’t interfere with Xcode
    • Sandboxed and use entitlements to escape sandbox
    • Only get access to necessary text and metadata at runtime: don’t get project structure or user’s files on disk
    • Distributed though Mac App Store
    • Extensions are built into a host application. Good place for settings/configuration and any other UI, since they have no UI in Xcode.
    • Xcode automatically finds and starts extensions on launch, before they’re needed
    • Extension is kept alive as long as possible, not setup and torn down repeatedly
    • extensionDidFinishLaunching can be used for quick startup work
      • Asynchronous from Xcode and other extensions startups
    • Define commands in the Info.plist, or override that in commandDefinitions in the extension class (for dynamic commands)
    • Each extension gets it’s own submenu in the Editor menu
      • extensions listed alphabetically
      • commands ordered by extension, since commands might be ordered logically
    • Command object is initialized and sent an invocation call, with text buffer and meta data and a completion callback. Invocation includes:
      • commandIdentifier: to handle multiple commands from the same class
      • cancellationHandler: called if the user cancels your command
      • buffer: the text the user is working with. Another object with info about indentation, lines, selection, file type, etc
        • completeBuffer includes the entire file
    • Xcode prevents the user from modifying the file while a command is being run
      • This also means the user can cancel it, if it’s running too long, by showing a cancellation banner
      • Cancellation is immediate
    • Speed
      • Start up quickly
      • Use GCD
      • Don’t replace the whole buffer if you don’t have to
      • Handle cancellation quickly
  • Alert types
    • Visual
    • Sound/vibration
    • Badge
  • New look for banner badges
  • Background refresh
    • content-available
  • Existing API
    • UIApplication
      • Registration
      • Scheduling
    • Different callbacks for local and remote notifications
    • Limited control after notifications are scheduled
    • Different support across platforms
  • User Notification Framework
    • Familiar API with feature parity
    • Expanded content
    • Combined local/remote handling
    • Simplified delegate methods
    • Better notification management: pending or already delivered notifications
    • In-app presentation option
    • watchOS
      • Local notifications on the watch, for things like reaching a workout goal
    • tvOS
      • Badging app icons
  • Registration
    • Authorization for notification type
    • Repeat for both local and remote notifications
    • User selections can now be accessed
  • New notification look
    • Title, subtitle, and body
    • Media attachments (more info in the advanced session)
  • Triggers for notifications
    • Push (remote)
    • Time interval (local). Time from now, or recurring interval from now
    • Calendar (local). Specific date and time in the future.
    • Location (local). GPS or proximity to beacons
  • Notification handling
    • Application in foreground: Completion block on delegate method takes argument with presentation options, which allows you to specify how (or if) the notification is displayed
  • Notification management
    • Access pending and delivered notifications
    • Remove notifications
    • Update or “promote” notifications
      • Update: add (as normal) a notification with the same identifier as the existing one
    • Request identifier
      • Specify for local
      • Header in push payload for remote
  • Actions
    • Default action: when the user taps the notification to launch the app
    • Actionable notifications
      • Buttons with customizable title
        • Appear below the notification
      • Text input
      • Same thing on watchOS
      • Register action categories with the app
      • Presenting actions
        • Remote: set category identifier in the aps payload. Category must be registered already
        • Local: Set categoryIdentifier on content object
    • Dismiss action: swipe left, then tap Clear
      • Need to opt in for this
      • customDismissAction in options for the category reg?
  • Handling actions
    • Delegate method didReceive response withCompletionHandler
    • The response object contains info about the action
  • Remote notifications: Service extension
    • Augment or replace remote notifications before displayed to the user
    • Can be used for end-to-end encryption, add attachment
    • Extension gets short execution time: not for background task
    • To implement
      • Add a new Notification Service target
      • Implement subclass of UNNotificationServiceExtension
      • Method: didReceive, with a completion handler
        • Call completion handled with a new UNMutableNotificationContent with the body set
        • Also has serviceExtensionTimeWillExpire: must call completion handler here
    • From the server, include mutable-content key
  • New default app notifications in iOS 10
    • Touch notifications to show more default
    • Detail can be updated when you tap an action (like accepting a meeting event)
    • Messages notifications show the conversation and allow multiple responses
  • Media attachments
    • 4kb remote payload: not big enough for an image
    • Attachments added by service extension: include mutable-content flag
    • Extension class adds an attachment to the content object, using a local URL
      • Limited processing time and size
      • Probably want to download a scaled image or just a clip of the video, then download the full one if they launch the app
      • File is moved and handled by the OS?
    • Images, audio, video
  • Custom UI
    • Notification content extension
    • Custom views
    • Respond to actions
    • Notification detail display:
      • Header, with icon, app name, close button
      • Custom view
      • Default content: payload from the notification. Title, subtitle, body
      • Action buttons. Once tapped, the custom view can be updated
  • Implementation
    • Use template to add target: adds view controller and nib
    • ViewController
      • implements UNNotificationContentExtension
      • Requires didReceive method: gets the notification object, for updating the UI
    • Register different action categories in Info.plist
    • UNNotificationExtensionDefaultContentHidden option in Info.plist: set to YES to hide the default display of title/subtitle/body (if it’s shown in the custom view)
    • Can set preferredContentSize in the view controller to resize the custom view
  • Sizing
    • Extension is not running when the OS starts to display it
    • UNNotificationExtensionInitialContentSizeRatio in Info.plist to set starting ratio
  • Media attachments in content extension
  • Actions
    • Delivered to the app, and the notification is dismissed immediately
    • Intercept the action response to delay dismissal
      • In the didReceive: call the completion handler with the dismiss response option
  • Text input action
    • Can use inputAccessoryView to customize input
    • implement canBecomeFirstResponder on the view controller, return true
    • override the inputAccessoryView var in the view controller
    • In didReceive: make the view controller first responder so the input accessory view appears, then make the text field first responder so the keyboard appears

Questions

  • How much time does the extension have to download media attachments?
  • Can the extension use the same sandbox as the app, to cache files there for use later?
  • HTTP/2 provider API
  • Instant feedback
  • Larger payload
  • Simplified certificate handling. Same cert for:
    • Dev and prod environments
    • App, VoIP, and complication push
  • Token authentication
    • provider token instead of client cert
    • Can be generated programmatically, to avoid expired certs
    • Token signing key from the Apple developer account
  • Coming “later this year"
  • Structuring your app
    • Identify areas of your app: UI, data transform, networking, etc
    • Back each system with a dispatch queue
  • Chaining vs Grouping work
    • DispatchGroup
    • Add work to different queues, associated with the same group
    • Can receive notification when the group has completed executing all jobs
  • Quality of service
    • Using a higher QoS does not let you jump the line: it just elevates the work that’s in front of you in the queue in order to get to your job
  • Swift 3
    • Global vars initialized atomically
    • Class properties not atomic
    • Lazy properties not atomic