MacKuba

🍎 Kuba Suder's blog on Mac & iOS development

New stuff from WWDC 2019

Categories: Cocoa, Mac, SwiftUI, WWDC, iPhone Comments: 3 comments

WWDC 2019

As I’m writing these words, it’s the last day of November and the temperature has just dropped to close to 0°C here in Poland. But let’s move back to a better time for a moment, to the first days of June - the long days of warm sunny weather, inviting you to spend some time outside… and the huge pile of new stuff that Apple had just dropped on us on the WWDC keynote day, inviting you to try to frantically read and watch everything at once, and don’t leave the computer until you’ve read it all.

For the past 4 years I’ve been trying to cope with this crazy period by collecting notes from the WWDC talks, release notes, saving tweets, links to blog posts and so on, and organizing it all in a single ordered blog post. Writing things down this way is how I learn best, it helps me put together all loose pieces of information into a single picture, and gives me the peace of mind that I haven’t missed or forgotten anything important.

I usually finish this by July, but this year was different - first I got really hooked on SwiftUI and spent some time doing some experiments with it, and then I was busy working on and releasing my iOS content blocker app and doing some travelling. It didn’t help that the sheer amount of new APIs added this year was simply overwhelming.

So I finally got back to this in November, and I’m posting the list here on the half-anniversary of the 2019 keynote (yes, it’s really been 6 months already!) - hopefully it will still be of use to you.

Previous editions are available here - I’ve also done some slight formatting changes here and there, and updated the links to point to Web Archive 🗄️ versions if the page no longer exists or was overwritten:


Quick links:

macOS 10.15iOS 13watchOS 6tvOS 13

Shared FrameworksmacOS 10.15 SDKiOS 13 SDKwatchOS 6 SDKtvOS 13 SDK

Web APIs & AndroidDeveloper ToolsSafari 13Other


macOS 10.15 Catalina

https://www.apple.com/macos/catalina/
https://www.apple.com/macos/catalina/features/

  • Find My app (Catalyst-based)
    • combines “Find My iPhone” and “Find My Friends”
    • can find devices that are offline and in sleep mode - communicates through other devices nearby (article)
  • iTunes is split into:
    • Music app (includes iTunes Store)
    • Podcasts app (Catalyst-based)
    • TV app
    • device syncing section in Finder
  • redesigned Reminders app
  • Screen Time for Mac (it has some problems though)
  • Sidecar - using iPad as a second display, iPad with a pencil can act as a drawing tablet
  • App Store:
    • Apple Arcade section
  • Mail:
    • “classic layout” of the window (email contents below) and classic look of the email list (narrow rows with columns) are now two indepedent settings in the View menu
    • option to block emails from specific senders
    • muting notifications from specific threads
    • button for unsubscribing from newsletters in the email header
  • Maps:
    • completely rebuilt, much more detailed map content - entire US by the end of 2019, some other countries next year
  • Notes:
    • gallery view
    • sharing folders of notes through iCloud
    • sharing notes or folders as read-only
    • more powerful search, including text recognition in images
    • enhancements for checklists: reordering, moving checked items, uncheck all
  • Photos:
    • new years/months/days views
  • Preview:
    • signatures can be created using a nearby iPhone/iPad
  • QuickTime:
    • picture-in-picture button in the controls bar
    • more details in the Movie Inspector
    • creating a video from a sequence of images
  • Safari:
    • updated start page
    • easier access to picture-in-picture through the “playing audio” icon on the tab
    • when typing in the search bar, Safari suggests already open tabs to switch to
    • web history and open tabs in iCloud are now end-to-end encrypted
    • Cmd+T opens new tabs right after the active tab
    • removed support for legacy (JavaScript-based) extensions
  • option to switch light/dark mode automatically
  • new Apple ID and Family Sharing sections in the System Preferences
  • support for Xbox and PS4 controllers
  • accessibility:
    • “Hover Text” and “Voice Control” features
    • mirrored display can be zoomed independently of the main one
    • Siri voice can be used for VoiceOver and Speech
  • hovering over the zoom window button reveals options for tiling windows (tweet)
  • Apple Watch can be used to unlock things on Macs without TouchID
  • system suggests mobile hotspots to connect to if WiFi is unavailable (tweet)
  • activation lock for Macs with T2 chip
  • Gatekeeper now checks software for malware on every run
  • Gatekeeper will now also check binaries not launched directly, e.g. bundles and libraries loaded by an app
  • apps now need to ask for permission to:
    • record the screen or keyboard
    • access user’s Documents, Desktop, Downloads, iCloud Drive, external and network drives
    • access files in Trash (requires Full Disk Access); apps previously denied Full Disk Access will now appear on the list automatically, with the checkbox unchecked
  • the main disk partition is now divided into 2 logical volumes: system volume which is read only, and user data volume
    • system apps are now in /System/Applications, but Finder shows them in /Applications
  • default shell is now zsh (can be switched), dash is also included (docs)
  • Dashboard (the old screen with widgets) is finally gone completely
  • support for i386 (32-bit) apps is completely dropped
  • built-in Python, Ruby and Perl runtimes are deprecated, will be removed in a future version

iOS 13

https://www.apple.com/ios/ios-13/
https://www.apple.com/ios/ios-13/features/
https://www.apple.com/ipados/
https://www.apple.com/ipados/features/
https://support.apple.com/en-us/HT210393

  • Dark Mode
    • can be toggled from the Control Center or scheduled
  • App Store:
    • new Apple Arcade tab replaces Updates
    • Updates moved to the account popup (also accessible from the 3D Touch menu on the home screen)
    • you can quickly delete apps while browsing the Updates list (video)
  • Books:
    • reading goals
  • Calendar:
    • event attachments
  • Camera & Photos:
    • new lighting effects for portrait
    • new photo adjustments UI, new effects
    • rotating and cropping videos, photo filters & effects can be applied to videos too
    • redesigned Photos tab - intelligently selects best photos for days/months/years views
    • screen recordings smart album
    • when sharing photos, you can choose if you want to include location data and other info
    • photos can be imported from an SD card straight to a third-party app
    • fixed timezone handling (tweet)
  • CarPlay (article 1, article 2):
    • redesigned dashboard
    • redesigned home screen
    • redesigned Music app
    • redesigned Calendar app
    • Siri works with third party apps
    • Hey Siri support
    • smaller Siri screen
    • support for adjustable screen size, irregular screens and for showing some information on a second screen
    • Do Not Disturb while driving
    • settings screen
    • light mode
    • opening an app on the iPhone doesn’t affect what’s shown on CarPlay
  • Clock:
    • new timer UI
  • Files:
    • Downloads folder
    • iCloud Drive folder sharing (postponed to next year)
    • creating new folders in the On My iPhone/iPad section
    • built-in document scanner
    • support for USB drives and SMB file servers
    • new keyboard shortcuts on iPad
  • Find My app
    • combines “Find My iPhone” and “Find My Friends”
    • can find devices that are offline and in sleep mode - communicates through other devices nearby (article)
  • Health:
    • redesigned UI
    • menstrual cycle tracking
  • HomePod:
    • Handoff support
    • live radio
    • multi-user support
  • Mail:
    • better text formatting options
    • option to ignore blocked senders (blacklist is shared with Messages, FaceTime and Phone apps)
    • muting notifications from specific threads
    • moved most toolbar actions to an action menu
  • Maps:
    • completely rebuilt, much more detailed map content - entire US by the end of 2019, some other countries next year
    • favorite places
    • place collections
    • street view (Look Around)
    • sharing ETA with friends
    • real time flight/transit status
    • easier way to share feedback about the map
    • more natural sounding language in navigation
  • Messages:
    • name and avatars can be shared automatically when messaging unknown people
    • improved search
    • new animoji characters
    • memoji:
      • many new customizations
      • memoji stickers - all memoji are saved as stickers, can be used as emoji on the emoji keyboard, are synced between iOS devices
      • creating memoji is now available on all A9+ devices
  • Music:
    • time-synced lyrics
    • UI changes on the Now Playing screen and in action menus
  • Notes:
    • gallery view
    • sharing folders of notes through iCloud
    • sharing notes or folders as read-only
    • more powerful search, including text recognition in images
    • enhancements for checklists: reordering, moving checked items down, uncheck all
  • Phone:
    • silence unknown callers
  • Podcasts:
    • searching the content (transcripts) of podcasts
  • Reminders:
    • redesigned app
  • Safari:
    • new settings menu: changing font size, per site preferences
    • saving all open tabs as a bookmark folder
    • option to automatically close tabs after some period of time
    • web history and open tabs in iCloud are now end-to-end encrypted
    • search suggests pages currently open in other tabs
    • downloads manager, downloading files to the new Downloads folder
    • uploaded photos can be resized
    • when sharing a page, you have an option to send it as a PDF, Reader View or Web Archive
    • updated start page
    • desktop-class browsing on iPad
    • new keyboard shortcuts on iPad
    • in iPad split view, toolbar is displayed at the top
  • Screen Time:
    • 30 days of history
    • “one more minute” limit extension
    • communication limits for children (postponed)
  • Shortcuts:
    • Shortcuts app is now built in
    • conversational (parametrized) shortcuts
    • shortcuts automation: triggers for when to run shortcuts
  • Siri:
    • new, entirely computer-generated voice
    • playing audio from third party apps
  • system UI:
    • new share sheet with intelligent contact suggestions
    • redesigned screenshot markup screen
    • screenshots in some apps now have an option to generate a PDF of a full document (e.g. in Safari, Notes)
    • Haptic Touch mostly replaces 3D Touch (e.g. page preview from a link is now merged with URL preview in Safari)
    • QuickPath keyboard - swipe typing
    • separate emoji and language switch key on the keyboard (X phones only) (tweet)
    • choosing WiFi network and Bluetooth devices in the control center (video)
    • new QR code scanner in the control center (video)
    • changed the way of moving the text cursor (drag & drop the cursor)
    • changed some text selecting gestures (e.g. triple-tap, double-tap and drag)
    • tapping with three fingers during editing shows a new edit actions menu
    • quick scrolling in scroll views using the scrollbar indicator (video)
    • multi-select gesture in tables - by dragging a finger over checkboxes (video) or two fingers over the rows (video), also Shift+tap on an iPad external keyboard
    • new undo/redo gestures (video)
    • new three finger cut/copy/paste gestures
    • new volume UI (video)
    • new ringer switch UI (video)
    • changed some icon design throughout the OS (tweet, tweet)
  • iPad UI improvements (“iPad OS”):
    • tighter grid of icons
    • widgets can be pinned on the home screen
    • easy switching between apps in slideover
    • multi-window support - same app can be opened multiple times
    • expose for all views of a given app
    • column view in Files with file preview/info and Quick Actions
    • 2x lower Apple Pencil latency
    • easy markup of anything in any app using pencil
    • easy taking of screenshots using the pencil (by dragging it from a bottom corner)
    • compact floating keyboard
  • performance improvements:
    • FaceID unlock up to 30% faster
    • optimized app packaging - smaller app download sizes
    • app launch speed up to 2x as fast
    • improved automatic switching between WiFi and cellular connection (e.g. when leaving home)
  • privacy improvements for location data:
    • you can share location with an app just for current session
    • alerts about background location tracking
    • protection from tracking location through WiFi & Bluetooth signals
  • accessibility:
    • accessibility settings moved to the top level of the Settings app and reorganized, also added to quick start dialog
    • “Voice Control” accessibility feature
    • mouse/trackpad support - as an accessibility feature, part of Assistive Touch (works on both iPhone and iPad) (video, thread)
    • Full Keyboard Access - lets you control the whole UI with keyboard (iPad only)
    • option to disable auto-playing video previews
  • other settings:
    • optimized battery charging
    • “Low Data Mode” setting for cellular and for WiFi networks, automatically enabled when you connect to a mobile hotspot (tweet)
    • option to allow downloads of apps over 200 MB over cellular
    • you can override language for each app separately in the Settings
    • switching to bold fonts doesn’t require a restart
  • on phones with dual SIM, both numbers can be used for iMessage and Facetime and they can make calls simultaneously
  • custom fonts can be installed in the system through third party apps
  • dictation automatically detects which language the user is speaking in
  • 38 new keyboard languages
  • AirPods read incoming messages and let you respond (13.2)
  • audio sharing with other people’s wireless headphones
  • hotspot is shared automatically with members of iCloud family account
  • when deleting an app with an active subscription, you get an alert asking if you want to cancel it (tweet)
  • support for Xbox and PS4 controllers
  • drops support for iPhone 5s, iPhone 6 & 6 Plus, iPod touch 6th gen, iPad mini 2 & 3 and iPad Air 1

watchOS 6

https://www.apple.com/watchos/watchos-6/
https://support.apple.com/en-us/HT210583

  • independent apps - you can now build Watch apps without an iOS app
  • Apple Watch can now install OS updates without an iPhone and can be set to install updates automatically
  • App Store app
  • Audiobooks app
  • Calculator app
    • includes tip calculation and bill splitting
  • Maps app: improved navigation
  • menstrual cycle tracking app
  • Noise app: decibel meter, warnings about high level of noise, noise level complication (Series 4/5 only)
  • Now Playing: redesigned app, available as a normal app from the home screen
  • Podcasts app: custom stations
  • redesigned Reminders app
  • redesigned Walkie-Talkie app
  • Workouts app:
    • current elevation metric in some workouts
    • stopwatch app can be continuously viewed on the watch face during workout
    • shuffling workout playlist
    • workout summary for previous runs can be shown on the watch
  • Voice memos app
  • new watch faces: Gradient, Numerals Duo, Numerals Mono, California, Solar Dial, Modular Compact, Meridian (all except the numerals available only for Series 4/5)
  • watch faces can be reordered on the watch (video)
  • monochrome style for Infograph Modular face
  • cellular signal complication
  • wind and rain complications
  • taptic chimes - plays taptic + sound at full hour
  • activity trends (in the iOS Activity app)
  • Siri:
    • can recognize songs through Shazam
    • shows web search results
  • Continuity Keyboard between watchOS and iOS (you can use an iPhone to enter some text on the Watch)
  • accessibility settings moved to the root level, added a lot more options
  • support for autofilling one-time SMS codes like on iOS
  • supports the same set of Watch models (Series 1 and above)

tvOS 13

  • redesigned home screen
  • multi user support
  • new control center sidebar with user switching
  • Music app: shows lyrics
  • support for Xbox and PS4 controllers
  • underwater screensaver

Shared Frameworks

https://developer.apple.com/augmented-reality/
https://developer.apple.com/machine-learning/
https://developer.apple.com/xcode/swiftui/
https://developer.apple.com/tutorials/swiftui/
https://developer.apple.com/metal/

New frameworks:

  • 🧰 SwiftUI - new declarative framework & tools to build apps for all platforms
  • 🧰 Combine framework - Apple’s “RxSwift”
  • 🧰 CryptoKit framework - a collection of cryptographic operations (do not confuse with CryptoTokenKit) (blog post 1, blog post 2)
  • 🧰 SoundAnalysis framework - classifying audio using Core ML models

Foundation and app frameworks:

  • Dispatch:
    • DispatchTime.distance(to:), advanced(by:)
    • DispatchQueue.schedule(...) - for Combine?
    • dispatch_async_and_wait(), dispatch_barrier_async_and_wait()
  • JSONEncoder:
    • withoutEscapingSlashes formatting option
  • ListFormatter: for formatting lists of things in a language-specific way
  • NSAttributedString:
    • a way to convert font sizes between macOS and iOS
    • loadFromHTMLWith*** methods (in WebKit framework)
  • NSData:
    • compressed(using:) / decompressed(using:) - supports LZ4, LZMA, LZFSE and zlib
    • the behavior of description has changed, which may affect some push token handling code (blog post)
  • NSDirectionalEdgeInsets, NSDirectionalRectEdge, NSRectAlignment - new geometry data objects that use leading/trailing instead of left/right
  • NSLayoutManager:
    • usesDefaultHyphenation (replaces hyphenationFactor)
  • NSUserActivity:
    • targetContentIdentifier (for choosing the scene to open on iPad)
  • OperationQueue:
    • addBarrierBlock adds a “barrier” task that blocks others until it completes
    • progress lets you track operation completion progress once you set its totalUnitCount
    • operations and operationCount are deprecated
  • ProcessInfo:
    • isMacCatalystApp
  • RelativeDateTimeFormatter: for formatting dates as e.g. “2 weeks ago”
  • UnitDuration: added smaller units down to picoseconds
  • UnitFrequency: added framesPerSecond (~ alias for hertz)
  • UnitInformationStorage: for bytes, megabytes etc.
  • URLSession & friends:
    • HTTPCookie.sameSitePolicy (blog post)
    • HTTPURLResponse.value(forHTTPHeaderField:)
    • URL.parameterString is deprecated (note, this is not related to the query parameters after ?, but a different kind of parameters separated by ; - TIL)
    • URLSession.dataTaskPublisher(...) - integration with Combine
    • URLSession.webSocketTask(), URLSessionWebSocketTask - web sockets support
    • URLSessionRequest.allowsConstrainedNetworkAccess - if the request should work in Low Data Mode, default is true (blog post)
    • URLSessionRequest.allowsExpensiveNetworkAccess - if the request should work over cellular/hotspot connection, default is true
    • URLSessionTaskTransactionMetrics: various new properties
    • dropped support for SPDY protocol
    • tasks using HTTP GET method can’t include a body
    • updated TLS certificate requirements

Services & system frameworks:

  • Accelerate:
    • new Swift API
  • AVFoundation:
    • AVMetadataBodyObject - detecting human and animal bodies in the picture
    • AVSemanticSegmentationMatte - portrait segmentation mattes for e.g. detecting person’s hair
  • Contacts
    • CNChangeHistoryFetchRequest, CNChangeHistoryEvent
    • around 200 new relation type labels, including names like CNLabelContactRelationYoungerCousinMothersSiblingsDaughterOrFathersSistersDaughter (yes, really)
  • Core Animation:
    • CALayer.cornerCurve (blog post)
    • CAMetalLayer.preferredDevice
  • Core Data:
    • NSBatchInsertRequest - for batch insertions of many records in one go
    • NSDerivedAttributeDescription - derived attributes
    • NSFetchedResultsController:
      • controller(_: didChangeContentWith snapshot:) - integration with the new diffable data sources
      • controller(_: didChangeContentWith diff:) - returns a diff that can be manually applied
    • NSPersistentCloudKitContainer - new API for easy syncing through CloudKit (docs, comments, blog post 1, blog post 2, blog post 3)
    • improvements to the persistent history API
  • Core Image:
    • new methods for instantiating built-in filters
    • standard system colors in CIImage
  • Core Location:
    • deprecated methods related to deferred location updates
    • CLLocationManager.delegate is now a weak property
  • Core ML 3:
    • on-device model personalization
    • support for more neural network types
  • JavaScriptCore:
    • some new methods concerning symbols and promises
  • MapKit:
    • pointOfInterestFilter for filtering categories of places that we want to show (in MKLocalSearchCompleter, MKLocalSearch.Request, MKMapSnapshotter.Options, MKMapView - replaces showsPointsOfInterest)
    • resultTypes for filtering the types of search results we’re interested in (in MKLocalSearchCompleter, MKLocalSearch.Request - replaces filterType)
    • MKGeoJSONDecoder - parsing GeoJSON data
    • MKMapItem.pointOfInterestCategory
    • MKMapView.cameraBoundary for limiting the area in which the map can be moved
    • MKMapView.cameraZoomRange for limiting the camera zoom
    • MKMapView.centerCoordinateDistance replaces altitude
    • MKMultiLine, MKMultiPolygon and matching renderers
    • MKOverlayPathRenderer.shouldRasterize, by default overlays are now drawn as vectors
  • Natural Language:
    • NLDistance
    • NLEmbedding
    • NLGazetteer
    • NLTagger.requestAssets(for:tagScheme:completionHandler:)
  • StoreKit:
    • SKArcadeService for Apple Arcade
    • SKPaymentQueueDelegate + SKStorefront
  • UserNotifications:
    • UNNotificationContent.targetContentIdentifier - for choosing the scene to open on iPad
  • Vision:
    • image saliency
    • detecting humans and animals
    • image classification
    • analyzing image similarities
    • text recognition (OCR) - VNRecognizeTextRequest (blog post)
  • WebKit:
    • WKWebpagePreferences - desktop/mobile rendering mode

macOS 10.15 SDK

https://developer.apple.com/macos/
https://developer.apple.com/macos/whats-new/
https://developer.apple.com/ipad-apps-for-mac/
https://developer.apple.com/system-extensions/
https://developer.apple.com/documentation/macos_release_notes/macos_catalina_10_15_release_notes
http://codeworkshop.net/objc-diff/sdkdiffs/macos/10.15/

General:

  • possibility to port iPad apps to Mac using Catalyst / Marzipan / UIKit for Mac (docs)
    • apps can be distributed outside of MAS (tweet)
  • support for universal links (SFUniversalLink)
  • Gatekeeper:
    • software is now checked for malware on every run
    • Gatekeeper will now also check binaries not launched directly, e.g. bundles and libraries loaded by an app
    • notarization is now required
    • “in a future version of macOS, unsigned code will not load by default” (?)

New frameworks and targets:

  • new set of frameworks to replace old kernel extensions:
    • 🧰 DriverKit, HIDDriverKit and USBDriverKit for writing device drivers
    • 🧰 EndpointSecurity for system security extensions
    • 🧰 ExecutionPolicy framework - ? (Apple forum thread)
    • 🧰 NetworkingDriverKit for networking extensions
    • 🧰 SystemExtensions for managing new-style extensions
    • future versions will no longer run old kernel extensions
  • 🧰 AuthenticationServices framework from iOS
  • 🧰 DeviceCheck framework from iOS
  • 🧰 FileProvider framework from iOS - for integrating cloud storage with Finder
  • 🧰 LinkPresentation framework - for rendering link previews (blog post)
  • 🧰 OSLog framework - for processing system logs (initially called Logging)
  • 🧰 PencilKit framework - for drawing with Apple Pencil
  • 🧰 PushKit framework from iOS
  • 🧰 QuickLookThumbnailing framework - extracted from iOS QuickLook framework, replaces old C-based API
  • 🧰 RealityKit framework - for rendering 3D content in AR
  • 🧰 Speech framework from iOS
  • new extension targets: Authentication Services, Thumbnail Extension, DriverKit Driver

Framework updates:

  • CreateML:
    • object detection
    • sound classification
    • motion sensor activity classification
    • recommender models
    • word embeddings
  • PhotoKit:
    • added some missing functionality from iOS
  • QuickLook:
    • QLPreviewingController: API for generating previews as on iOS
  • Safari App Extensions API:
    • contentBlocker(withIdentifier:blockedResourcesWith:on:) notifies the extension when the content blocker blocks some content
    • page(_:willNavigateTo:) notifies it when the user navigates to a different page
    • SFSafariApplication: getAllWindows()
    • SFSafariExtension: getBaseURI()
    • SFSafariExtensionViewController: dismissPopover()
    • SFSafariPage: getContainingTab(), getScreenshotsOfVisibleArea()
    • SFSafariTab: getContainingWindow(), navigate(to:), close()
    • SFSafariToolbarItem: showPopover()
    • SFSafariWindow: getAllTabs(), close()

AppKit updates:

  • NSButtonTouchBarItem - a Touch Bar item with a buttton
  • NSCollectionViewCompositionalLayout - new layout system for collection views
  • NSCollectionViewDiffableDataSource - powerful system-provided data source for collection views
  • NSColor:
    • systemTeal and systemIndigo colors
    • init(name:dynamicProvider:) initializer for choosing light/dark variants
    • uses tagged pointers, allocating NSColor objects should be faster
  • NSColorSampler - a magnifier tool for picking a color from somewhere on the screen
  • NSEvent:
    • .changeMode event type - handling Apple Pencil mode switch on a connected iPad
  • NSFont:
    • monospacedSystemFont(ofSize:weight:)
    • fontDescriptor.withDesign(_:) - finding e.g. rounded or monospaced variants
  • NSOpenPanel and NSSavePanel now run in a separate process
  • NSPickerTouchBarItem - a Touch Bar element that lets you choose an item from a menu
  • NSResponder:
    • changeMode(with:) - handling Apple Pencil mode switch on a connected iPad
  • NSScreen:
    • localizedName now returns e.g. “Thunderbolt Display”
    • some new methods related to extended dynamic range
  • NSSliderTouchBarItem:
    • doubleValue
    • minimumSliderWidth and maximumSliderWidth
  • NSStepperTouchBarItem - a Touch Bar selector element with left/right arrows
  • NSStoryboard:
    • instantiateInitialController and instantiateController methods for creating instances of VCs that use the new custom initializers
  • NSSwitch - a switch control like on iOS (it shouldn’t be used as a replacement for a checkbox though)
  • NSTextCheckingController and NSTextCheckingClient - new API for checking spelling, grammar etc.
  • NSTextView:
    • usesAdaptiveColorMappingForDarkAppearance - automatically updates colors for light/dark appearance
  • NSToolbarItem:
    • isBordered
    • title for text-only buttons
    • NSMenuToolbarItem - a button that shows an NSMenu
    • NSSharingServicePickerToolbarItem
  • NSToolbarItemGroup:
    • new initializers
    • segmented controls, pulldown and popup menus
    • automatic collapsed representation
  • NSUserActivity:
    • added persistentIdentifier property from iOS
  • NSView:
    • isHorizontalContentSizeConstraintActive and isVerticalContentSizeConstraintActive - tells AutoLayout to ignore the control’s content size (mostly for optimization)
  • NSWorkspace:
    • new asynchronous methods for opening files and launching applications with a new set of options, old API is deprecated
  • some undocumented changes to third party preference panes (blog post)

Deprecations:

  • MediaLibrary, OpenAL and Quartz Composer are deprecated (PDFKit moved out as a separate framework)
  • Quicktime and QTKit frameworks are removed
  • direct access to instance variables in some Cocoa classes (previously deprecated) was removed

iOS 13 SDK

https://developer.apple.com/ios/
https://developer.apple.com/ios/whats-new/
https://developer.apple.com/ipad/
https://developer.apple.com/ipad-apps-for-mac/
https://developer.apple.com/siri/
https://developer.apple.com/documentation/ios_ipados_release_notes/ios_13_release_notes
http://codeworkshop.net/objc-diff/sdkdiffs/ios/13.0/

General:

  • possibility to port iPad apps to Mac using Catalyst / Marzipan / UIKit for Mac (docs)
    • apps can be distributed outside of MAS (tweet)
  • SF Symbols icon font (docs, HIG, tweet)
  • scenes API and multi-window support (docs)
    • same app can be opened multiple times on different screens
    • UIWindowScene, UIWindowSceneDelegate, UISceneSession and related classes for handling scenes
    • some lifecycle callbacks that were done in UIApplicationDelegate should now be moved to UIWindowSceneDelegate
    • new restoration system built on NSUserActivity
  • new preview & context menu UI activated with long-press:
    • displays a preview of a piece of content and/or a hierarchical context menu with actions
    • UIContextMenuInteraction manages the whole interaction (blog post 1, blog post 2)
    • UITargetedPreview (based on UITargetedDragPreview from the drag & drop API) defines the preview
    • UIMenu, UIAction and UICommand to build the menu hierarchy
    • UITableViewDelegate and UICollectionViewDelegate have some new methods for presenting context menus from cells
    • in Catalyst apps the menu renders as a standard Mac context menu
    • old 3D Touch peek & pop API (UIViewControllerPreviewing) is deprecated
  • new APIs for customizing the appearance of various system bars and their items with a lot more configuration options (docs):
    • UINavigationBar:
      • standardAppearance - appearance used in the normal state and as a default
      • compactAppearance - used in landscape on smaller iPhones (4.7" and below)
      • scrollEdgeAppearance - used when there’s a scroll view that’s scrolled all the way to the top
    • UINavigationItem:
      • standardAppearance, compactAppearance, scrollEdgeAppearance - overrides appearance on this specific screen
    • UITabBar:
      • standardAppearance
    • UITabBarItem:
      • standardAppearance - customizes appearance for this specific item
    • UIToolbar:
      • standardAppearance - appearance used in the normal state and as a default
      • compactAppearance - used in landscape on smaller iPhones (4.7" and below)
    • old APIs are still available, but are listed as “Legacy Customizations”

New frameworks and targets:

  • 🧰 BackgroundTasks framework - for app refresh and scheduling long-running tasks
  • 🧰 Core Haptics framework (blog post)
  • 🧰 CryptoTokenKit framework from macOS (for security tokens - do not confuse with CryptoKit)
  • 🧰 ImageCaptureCore framework from macOS - for importing media from cameras and scanners
  • 🧰 LinkPresentation framework - for rendering link previews (blog post)
  • 🧰 MetricKit framework - for collecting metrics data on device
  • 🧰 PencilKit framework - for drawing with Apple Pencil
  • 🧰 QuickLookThumbnailing framework - some APIs extracted from existing QuickLook framework + some new functionality
  • 🧰 RealityKit framework - for rendering 3D content in AR
  • 🧰 VisionKit framework - for scanning documents (blog post)
  • new extension target: Authentication Services

Framework updates:

  • ARKit 3:
    • people occlusion
    • motion capture
    • simultaneous use of front & back camera on iOS devices
    • multiple faces tracking on FaceID devices
    • collaborative sessions - improved API for multi-user AR
  • AuthenticationServices:
    • support for “Sign In With Apple”
  • AVFoundation:
    • AVCaptureMultiCamSession - capturing video using both cameras simultaneously
  • CarPlay:
    • dark mode and scenes support
  • Core Location:
    • user can choose to share location with your app just for current session
    • two-phase request for “Always” access (you get “While Using” first and then user gets asked again when you try to use location in the background)
    • updated some beacon ranging APIs using a new helper object CLBeaconIdentityConstraint
  • Core NFC:
    • NFCTagReaderSession, NFCVASReaderSession, NFCFeliCaTag, NFCISO7816APDU, NFCMiFareTag, NFCNDEFTag for reading different kinds of tags
    • support for writing to tags
  • Core Text:
    • APIs for installing custom fonts (CTFontManager*)
  • HealthKit:
    • heartbeat data: HKHeartbeatSeriesBuilder, HKHeartbeatSeriesSample, HKHeartbeatSeriesQuery
    • audiograms (hearing tests): HKAudiogramSample, HKAudiogramSensitivityPoint
    • HKCategoryTypeIdentifier: audioExposureEvent, toothbrushingEvent
    • HKQuantityTypeIdentifier: appleStandTime, environmentalAudioExposure, headphoneAudioExposure
    • HKWorkoutActivityType: discSports and fitnessGaming workout types
  • HomeKit:
    • HomeKit Secure Video - secure, encrypted iCloud storage for video from HomeKit cameras (13.2)
    • HomeKit for routers, firewalls all IoT devices (13.2)
  • MapKit:
    • MKMapSnapshotter.Options.traitCollection for creating snapshots in dark mode
    • one-finger zoom gesture now works in MKMapView (video)
    • see also the MapKit section in Shared Frameworks
  • PushKit:
    • complication pushes are deprecated on iOS, they should go straight to the Apple Watch now
  • QuickLook:
    • QLPreviewControllerDelegate: some new methods for supporting editing content through QuickLook
  • SiriKit:
    • conversational (parametrized) shortcuts
    • you can suggest a shortcut phrase that the user can just confirm
    • APIs for providing info about reservations (docs)
    • APIs for searching and playing media (docs)
    • APIs for starting VoIP calls (docs)
  • Speech:
    • on-device speech recognition (10 languages supported), speech analytics (blog post)
  • UserNotifications:
    • UNNotificationSettings.announcementSetting - to allow Siri to read notifications through AirPods

UIKit updates:

  • UIAccessibility:
    • isOnOffSwitchLabelsEnabled() (Display & Text Size / On/Off Labels)
    • isVideoAutoplayEnabled (Motion / Auto-Play Video Previews)
    • shouldDifferentiateWithoutColor() (Display & Text Size / Differentiate Without Color)
    • UIAccessibilityCustomAction.actionHandler
    • NSObject properties: accessibilityAttributedUserInputLabels, accessibilityUserInputLabels, accessibilityTextualContext, accessibilityRespondsToUserInteraction
  • UIActivityIndicatorView (spinner):
    • replaced old style constants with large and medium
  • UIActivityItemSource (share sheet API):
    • activityViewControllerLinkMetadata() - metadata for rendering a preview of the link in the share sheet
  • UIApplication:
    • requestSceneSession*** methods and new properties: connectedScenes, openSessions, supportsMultipleScenes
    • deprecated a whole bunch of methods, properties and notifications related to:
      • status bar
      • key window
      • interaction events
      • background refresh
      • keep-alive timeout
      • network activity indicator :(
  • UIApplicationDelegate:
    • some new delegate methods for handling window sessions
    • deprecated background refresh API in favor of BackgroundTasks
    • deprecated some delegate methods related to status bar
  • UIApplicationShortcutItem (home screen context menu actions):
    • targetContentIdentifier (for choosing the scene to open)
  • UIApplicationShortcutIcon (home screen context menu actions):
    • init(systemImageName:) for SF Symbols
  • UIBarButtonItem:
    • new close button type (tweet)
  • UIBarStyle:
    • deprecated blackTranslucent and blackOpaque
  • UIBlurEffect:
    • new set of “material” blur styles (video)
  • UIButton:
    • new close button type
    • systemButton(with:target:action:) helper method
    • methods for configuring display of SF Symbols icons
  • UICollectionViewCompositionalLayout - new layout system for collection views
  • UICollectionViewDelegate:
    • methods for managing multi-selection
    • methods for handling context menus with previews
    • deprecated old menu handling actions
  • UICollectionViewDiffableDataSource - powerful system-provided data source for collection views
  • UIColor:
    • semantic colors like label, secondaryLabel, systemBackground, link etc.
    • semantic base colors like systemRed, systemBlue etc.
    • init(dynamicProvider:) and resolvedColor(with:)
  • UIDocumentBrowserViewController:
    • defaultDocumentAspectRatio
    • shouldShowFileExtensions
    • recentDocumentsContentTypes
    • localizedCreateDocumentActionTitle
  • UIDocumentPickerViewController:
    • shouldShowFileExtensions
    • directoryURL - initial directory
    • you can now ask for access to a whole folder (by using document type kUTTypeFolder)
  • UIFont:
    • monospacedSystemFont(ofSize:weight:)
    • fontDescriptor.withDesign(_:) - finding e.g. rounded or monospaced variants
  • UIFontPickerViewController - for picking custom fonts (blog post, tweet)
  • UIHoverGestureRecognizer - for mouse hover events (Catalyst only)
  • UIImage:
    • init(systemName:) for SF Symbols (blog post)
    • init(named:in:with:) for choosing a specific appearance variant or setting SF Symbols style
    • system images: .add, .remove, .actions, .checkmark, .strokedCheckmark (tweet)
    • baseline: baselineOffsetFromBottom, withBaselineOffset(fromBottom:), withoutBaseline()
    • image configuration (for handling multiple variants for different appearances): configuration, withConfiguration(_:)
    • symbol configuration (for configuring SF Symbols): isSymbolImage, symbolConfiguration, applyingSymbolConfiguration(_:)
    • withTintColor(_:)
  • UIImageAsset:
    • registering and looking up variants for different configurations: image(with configuration:), register(_ image: with configuration:) (tweet)
  • UIImageView:
    • preferredSymbolConfiguration for configuring SF Symbols style
  • UIImpactFeedbackGenerator (generating haptic feedback):
    • impact styles rigid and soft
    • specifying impact intensity as a float value (blog post)
  • UIKeyCommand (iPad keyboard shortcuts):
    • title, image, action, state, attributes, alternates, propertyList
  • UILargeContentViewerItem and UILargeContentViewerInteraction - a new accessibility API for “zooming in” UI elements (blog post)
  • UILayoutPriority:
    • dragThatCanResizeScene, dragThatCannotResizeScene, sceneSizeStayPut
  • UIMenuBuilder and UIMenuSystem - for building the main app menu in Catalyst apps (?)
  • UIMenuController (tooltip menu activated from text):
    • showMenu(from:rect:), hideMenu(from:), hideMenu() (replaces old API)
  • UIResponder:
    • buildMenu(with builder:) - building app menu in a Catalyst app?
    • validate(_ command:)
    • updateTextAttributes(conversionHandler:)
    • activityItemsConfiguration
    • editingInteractionConfiguration - lets you disable new 3-finger gestures
    • touchBar, makeTouchBar() (Catalyst only)
  • UIScreen:
    • calibratedLatency
  • UIScreenshotService - lets you provide a PDF version of a screenshot
  • UIScrollView:
    • automaticallyAdjustsScrollIndicatorInsets (tweet)
    • horizontalScrollIndicatorInsets, verticalScrollIndicatorInsets
  • UISearchBar:
    • searchTextField - lets you configure the look of the search text field
    • setShowsScope(_:animated:)
  • UISearchController:
    • automaticallyShowsCancelButton
    • automaticallyShowsScopeBar
    • automaticallyShowsSearchResultsController, showsSearchResultsController
  • UISearchTextField - a text field that can show “tokens” before the search query
  • UISegmentedControl
    • new design (tweet)
    • selectedSegmentTintColor (tintColor is ignored)
  • UISplitViewController:
    • primaryBackgroundStyle (Catalyst only - for creating Mac window sidebars)
  • UIStatusBarManager - an interface for viewing (but not modifying) the status bar state of the current scene
  • UIStatusBarStyle:
    • added darkContent, default is now automatic
  • UIStepper
  • UIStoryboard:
    • instantiateInitialViewController and instantiateViewController methods for creating instances of VCs that use the new custom initializers
  • UITableView:
    • new table style insetGrouped (tweet)
  • UITableViewDelegate:
    • methods for managing multi-selection
    • methods for handling context menus with previews
    • deprecated old menu and edit handling actions
  • UITableViewDiffableDataSource - powerful system-provided data source for table views
  • UITextDocumentProxy (custom keyboards):
    • setMarkedText(_:selectedRange:), unmarkText()
  • UITextFieldDelegate:
    • textFieldDidChangeSelection()
  • UITextFormattingCoordinator - for showing a font panel in Catalyst apps?
  • UITextInput (text field & text view):
    • insertText(_:alternatives:style:)
    • setAttributedMarkedText(_:selectedRange:)
    • insertTextPlaceholder(with:)
    • remove(_ textPlaceholder:)
  • UITextInteraction - allows you to add system text selection gestures to a custom text view
  • UITextView:
    • usesStandardTextScaling - in Catalyst apps, automatically scales text properly on the Mac
  • UITraitCollection:
    • userInterfaceLevel trait = base/elevated (elevated ≈ being shown in a modal view)
    • userInterfaceStyle, although technically it was added last year for CarPlay & tvOS :)
    • accessibilityContrast
    • legibilityWeight (Bold Text accessibility setting)
    • imageConfiguration
    • hasDifferentColorAppearance(comparedTo:)
    • current and performAsCurrent()
  • UIVibrancyEffectStyle:
    • the old class methods are deprecated and replaced by various label/fill styles
  • UIView:
    • overrideUserInterfaceStyle to force light or dark mode
    • modifyAnimations(withRepeatCount:autoreverses:animations:)
    • transform3D
    • deprecated old animation API that used separate class methods instead of parameters and blocks
  • UIViewController:
    • changes to modal view presentation (blog post):
      • .pageSheet and .formSheet modals are now displayed on portrait iPhone as “sheets” that don’t cover the screen completely and can be closed by dragging down
      • the default modal presentation style is now called .automatic and it also renders as a sheet on iPhone in most cases, and on the iPad as a .pageSheet - set .fullScreen explicitly to keep the old behavior
      • popovers on iPad also render as sheets in compact-width split screen view
      • share extensions are displayed as page sheets on both iPhone and iPad
      • page sheets on iPad have a new smaller size, which depends on system text size (or more specifically on the “readable width”); two page sheets on top of one another form a vertical stack
      • new property modalInPresentation (replaces modalInPopover) lets you prevent the user from dismissing a sheet (can be dynamically updated, e.g. when user edits some data)
      • the “view will/did (dis)appear” callbacks are not called on the presenting (parent) view controller if the modal appears as a sheet, since the parent view doesn’t completely disappear
      • UIAdaptivePresentationControllerDelegate has new callbacks for handling sheet events:
        • presentationControllerDidAttemptToDismiss()
        • presentationControllerShouldDismiss()
        • presentationControllerWillDismiss()
        • presentationControllerDidDismiss()
    • other changes:
      • overrideUserInterfaceStyle to force light or dark mode
      • traitCollectionDidChange: iOS now predicts the initial set of traits and doesn’t call this method when a view is added to the hierarchy, only when the traits actually change
      • performsActionsWhilePresentingModally
      • childViewControllerForTouchBar, setNeedsTouchBarUpdate (Catalyst only)
  • UIWindow:
    • canResizeToFitContent (Catalyst only)

Deprecations:

  • launch images are deprecated - use launch storyboards (will be required from April)
    • apps built on iOS 13+ SDK will run in native mode on any new devices without requiring a new build
    • support for split-screen modes will also be required for iPad apps from April (with exceptions?)
  • OpenAL framework is deprecated
  • UIWebView is even more deprecated than before (update: info about the specific deadlines)
  • UIApplicationExitsOnSuspend Info.plist option (yes, the one from iOS 4!) is finally deprecated

watchOS 6 SDK

https://developer.apple.com/watchos/
https://developer.apple.com/watchos/whats-new/
https://developer.apple.com/documentation/watchos_release_notes/watchos_6_release_notes
https://developer.apple.com/documentation/watchkit/building_watchos_app_interfaces_with_swiftui
http://codeworkshop.net/objc-diff/sdkdiffs/watchos/6.0/

General:

  • independent apps (docs)
    • option to build apps that can be distributed independently of the iOS version, or without a matching iOS app at all
    • push notifications, complication pushes and CloudKit subscriptions can be sent straight to the watch
  • app and asset thinning - smaller downloads
  • SF Symbols icon font (docs, HIG, tweet)

New frameworks:

  • 🧰 AuthenticationServices framework
  • 🧰 CoreMedia framework
  • 🧰 Network framework
  • 🧰 PushKit framework
  • audio streaming APIs

Framework updates:

  • ClockKit:
    • Graphic Circular complications: additional template types
    • CLKDateTextProvider: uppercase
    • CLKFullColorImageProvider: support for “tinted images”
    • CLKRelativeDateTextProvider: additional formatting styles
  • HealthKit:
    • heartbeat data: HKHeartbeatSeriesBuilder, HKHeartbeatSeriesSample, HKHeartbeatSeriesQuery
    • audiograms (hearing tests): HKAudiogramSample, HKAudiogramSensitivityPoint
    • HKCategoryTypeIdentifier: audioExposureEvent, toothbrushingEvent
    • HKQuantityTypeIdentifier: appleStandTime, environmentalAudioExposure, headphoneAudioExposure
    • HKWorkoutActivityType: discSports and fitnessGaming workout types
    • apps can ask for health data access on the watch
  • SiriKit:
    • conversational (parametrized) shortcuts
    • you can suggest a shortcut phrase that the user can just confirm
    • APIs for providing info about reservations (docs)
    • APIs for adding and searching media (docs)
    • APIs for starting VoIP calls (docs)
    • some additions to task APIs (docs)
  • UserNotifications:
    • UNNotificationServiceExtension is now available on watchOS
    • UNNotificationSettings.announcementSetting - to allow Siri to read notifications through AirPods
  • WatchConnectivity:
    • WCSession: companionAppInstalled
    • WCSessionDelegate: sessionCompanionAppInstalledDidChange:

WatchKit updates:

  • WKAudioFile* - deprecated, use AVFoundation
  • WKExtendedRuntimeSession - extended runtime API
    • only for specific types of activity: self care, mindfulness, physical therapy, smart alarms, health monitoring
  • WKExtension:
    • APIs for handling push notifications and extended runtime sessions
  • WKInterfaceAuthorizationAppleIDButton - “Log in with Apple” button
  • WKInterfaceDevice:
    • supportsAudioStreaming
  • WKInterfaceMap:
    • setShowsUserHeading(), setShowsUserLocation(), setUserTrackingMode() (6.1)
  • WKInterfaceTextField - new text field control
  • instances of WKInterface* view classes can now be created in code - but only for use in SwiftUI 🙃

tvOS 13 SDK

https://developer.apple.com/tvos/
https://developer.apple.com/tvos/whats-new/
https://developer.apple.com/documentation/tvos_release_notes/tvos_13_release_notes
http://codeworkshop.net/objc-diff/sdkdiffs/tvos/13.0/

General:

  • scenes API and multi-window support (see iOS)
  • SF Symbols icon font (docs, HIG, tweet)

New frameworks:

  • 🧰 AuthenticationServices framework from iOS
  • 🧰 BackgroundTasks framework - for app refresh and scheduling long-running tasks
  • 🧰 CryptoTokenKit framework from macOS (for security tokens - do not confuse with CryptoKit)

Framework updates:

  • UIKit: most changes from iOS apply here
  • UITabBar:
    • leadingAccessoryView, trailingAccessoryView
  • UIViewController:
    • tabBarObservedScrollView
  • TVMLKit:
    • TVBrowserViewController
    • TVDocumentViewController
  • TVUIKit:
    • TVCollectionViewFullScreenLayout, TVCollectionViewFullScreenCell
  • TVTopShelf* for building new style Top Shelf extensions
  • TVUserManager, TVAppProfileDescriptor - for managing multiple user accounts

Deprecations:

  • OpenAL framework is deprecated

Web APIs & Android

https://developer.apple.com/sign-in-with-apple/
https://developer.apple.com/documentation/signinwithapplejs

  • Sign In With Apple
  • MapKit JS:
    • web snapshots service (docs)
    • dark mode support
    • filtering points of interest and result types
    • limiting map area and camera zoom
    • parsing GeoJSON
  • MusicKit for Android

Developer Tools

Xcode 11

https://developer.apple.com/xcode/
https://developer.apple.com/xcode/whats-new/
https://developer.apple.com/documentation/xcode_release_notes/xcode_11_release_notes

  • live previews for SwiftUI
  • integration with Swift Package Manager
    • Swift packages can be added as dependencies
    • you can open Swift packages as projects (by opening Package.swift) (tweet)
  • @IBSegueAction - a way to use storyboard segues with custom view controller initializers
  • editor improvements:
    • screen can be divided into multiple editors in any layout (click “Add Editor” in the top-right corner, hold Alt to divide vertically)
    • options for assistant editors: Editor Only / Editor and Canvas / Editor and Assistant; assistant pane automatically hides
    • editor now includes a minimap with headings from MARK comments (hold Cmd to see all symbols) (tweet)
    • “edit all in scope” also edits documentation
    • font styling in documentation comments (italic, bold and monospace, default font is Helvetica Neue)
    • MARK comments draw a separator line in the editor
    • source editor supports spell checking
    • hierarchical code folding (folding and unfolding an outer block retains folding in an inner block)
    • snippets/objects/media libraries are merged into a single panel with tabs
    • you can cmd+click on Swift operators to jump to the definition
  • version control:
    • source control change bar (on the left edge of the editor) can show diff from the original version
    • support for stashing and cherry-picking
    • Xcode can automatically stash and restore changes when pulling from a repository
    • the “Version Editor” views from the menu bar are broken up into different places:
      • “Comparison” view becomes “Code Review”
      • “Authors” view becomes an option in the new editor settings
      • “Log” view becomes a “History Inspector” in the right sidebar
  • project settings:
    • Signing section has been moved to the Capabilities tab
    • Capabilities list only lists enabled capabilities, others can be added with a “+” button instead of On/Off switches
    • it’s now possible to use a capability only in some build configurations
    • “Embedded Binaries” and “Linked Frameworks and Libraries” lists are merged into one
  • assets:
    • assets in asset catalogs can be localized
    • you can create custom SF Symbols icons by editing an exported SVG file from the SF Symbols app and adding it back to the asset catalog (docs)
  • simulator:
    • iOS simulator is GPU-accelerated (and you can choose the GPU if your Mac has more than one), supports Metal 🤘
    • Xcode no longer creates every available iOS simulator, only a set of most commonly used ones
    • faster simulator launches (dyld shared cache)
  • debugging:
    • new “Environment Overrides” panel in the debug bar allows overriding appearance, text size and accessibility settings in a running app (replaces appearance switcher from Xcode 10 for Mac apps)
    • Simulate Location switcher added to debug bar for iOS apps
    • you can simulate network & thermal conditions on connected devices through the Devices window, tested device shows an icon in the status bar
    • Metal memory debugger
    • various improvements for watchOS debugging, including view hierarchy debugging, faster performance and better reliability, debugger connects directly through WiFi if possible
  • testing:
    • Test Plans - easy way to run tests in multiple configurations
    • screenshots from UI tests can be generated in localized versions for App Store
    • XCTest.measure(...) - APIs for performance testing
    • XCTUnwrap() for unwrapping optionals
    • new format of .xcresult bundles (tweet)
  • support for XCFrameworks, which are frameworks that can bundle code for multiple architectures (blog post)
  • app performance metrics for iOS apps (in the Organizer) - anonymized stats on battery usage, launch time, hang rate, memory use, disk access
  • enhancements to Siri Intents editor
  • -Oz optimization option (tweet)

Swift

ObjC

App Store & developer services

  • Radar (BugReport) is now Feedback Assistant, has an updated design and shows more info about closed tickets, also has an app included in beta iOS & macOS (but not in final builds) (docs, tweet)
  • redesigned CloudKit dashboard (tweet)
  • redesigned certificate/profile management portal (tweet)
  • App Store Connect API now has endpoints for handling provisioning (docs)
  • iOS and Mac SDKs now use the same certificates (tweet)
  • changes to some App Store Review Guidelines concerning data collection (source), plus later changes
  • less strict requirements for the subscription purchase UI (tweet)
  • TestFlight feedback: option “Share beta feedback” when taking a screenshot of an app from TestFlight, feedback is available in App Store Connect
  • App Store Connect analytics shows app deletions (tweet)
  • coming soon:
    • App Store for iMessage (tweet)
    • App Store Connect usage analytics for Mac (tweet)
    • live analytics dashboard for the last 24h (tweet)

Other tools

  • Create ML app for building machine learning models
  • Reality Composer app for building AR experiences (Mac & iOS)
  • Transporter app for uploading app binaries to the App Store
  • SF Symbols app

Safari 13

https://developer.apple.com/documentation/safari_release_notes/safari_13_release_notes

  • desktop-class browsing on iPad - uses desktop Safari’s user agent, intelligently adapts sites to touch events
  • support for dark mode on iOS
  • support for CSS conic gradients
  • support for FIDO2-compliant USB security keys using Web Authentication API
  • support for screen sharing using web APIs
  • support for aborting Fetch requests
  • support for the __Secure- and __Host- cookie prefixes
  • Pointer Events API
  • Visual Viewport API
  • API for requesting permission to accelerator/gyroscope data
  • Web Inspector improvements:
    • Timelines: added CPU Usage / Energy Impact timeline, support for importing & exporting timelines
    • Audit tab with accessibility audits, custom audits can be created (blog post 1, blog post 2)
    • Changes tab in Elements tab sidebar
    • Device settings menu when inspecting a site on a connected iPhone, which lets you e.g. change user agent or disable images or scripts
  • removed support for WebSQL
  • removed support for legacy (JavaScript-based) extensions on the Mac

Other

3 comments:

ShinehahGnolaum

Could you be specific about where during WWDC 2019 they said something about CNChangeHistoryFetchRequest and CNChangeHistoryEvent for the Contacts Framework?

Kuba

@ShinehahGnolaum Hey! These lists are combined from the things mentioned in the talks, but also from looking through the documentation e.g. at https://developer.apple.com/ios/, release notes, and just simply API reference (I use this page http://codeworkshop.net/objc-diff/sdkdiffs/ to see what new classes/methods were added in some interesting places). So some things listed (a large part of them actually) might not have been mentioned anywhere in the talks and I've just found them elsewhere. It's not necessarily "things mentioned at WWDC", but "things released in the betas at WWDC".

It looks like these two you've mentioned are things like that, because I don't see them anywhere in any talk notes or transcriptions. Which is unfortunate, because I see they still don't have a proper documentation… which is probably why you're asking. I think the only piece of information that can help you somewhat is the ObjC header CNChangeHistoryFetchRequest.h in the SDK - you can access it through the "Open Quickly" (Cmd+Shift+O) in Xcode. There are some code comments there that aren't rendered in the web documentation. Not much in CNChangeHistoryEvent.h though.

chain link fence

Great site! very helpful! best fence installation in Des Moines

Leave a comment

*

*
This will only be used to display your Gravatar image.

*

What's the name of the base class of all AppKit and UIKit classes?

*