{
  "$type": "site.standard.document",
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreih7v5ddg6wabpfkarbjox3zzvribsiop2zg5bib2d3mux4akuajsi"
    },
    "mimeType": "image/jpeg",
    "size": 111554
  },
  "description": "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.\n\nFor 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.\n\nI 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.\n\nSo 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.\nPrevious 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:\n\nWWDC 2018\nWWDC 2017\nWWDC 2016\nWWDC 2015\n\nQuick links:\n\nmacOS 10.15 • iOS 13 • watchOS 6 • tvOS 13\n\nShared Frameworks • macOS 10.15 SDK • iOS 13 SDK • watchOS 6 SDK • tvOS 13 SDK\n\nWeb APIs & Android • Developer Tools • Safari 13 • Other\n\nmacOS 10.15 Catalina\n\nhttps://www.apple.com/macos/catalina/ \nhttps://www.apple.com/macos/catalina/features/ \n\nFind My app (Catalyst-based)\n\ncombines “Find My iPhone” and “Find My Friends”\ncan find devices that are offline and in sleep mode - communicates through other devices nearby (article)\n\niTunes is split into:\n\nMusic app (includes iTunes Store)\nPodcasts app (Catalyst-based)\nTV app\ndevice syncing section in Finder\n\nredesigned Reminders app\nScreen Time for Mac (it has some problems though)\nSidecar - using iPad as a second display, iPad with a pencil can act as a drawing tablet\nApp Store:\n\nApple Arcade section\n\nMail:\n\n“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\noption to block emails from specific senders\nmuting notifications from specific threads\nbutton for unsubscribing from newsletters in the email header\n\nMaps:\n\ncompletely rebuilt, much more detailed map content - entire US by the end of 2019, some other countries next year\n\nNot…",
  "path": "/2019/12/03/new-stuff-from-wwdc-2019/",
  "publishedAt": "2019-12-03T00:31:00Z",
  "site": "at://did:plc:oio4hkxaop4ao4wz2pp3f4cr/site.standard.publication/3mn5mackuba26",
  "tags": [
    "Cocoa",
    "iPhone",
    "Mac",
    "WWDC",
    "SwiftUI"
  ],
  "textContent": "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.\n\nFor 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.\n\nI 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.\n\nSo 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.\nPrevious 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:\n\nWWDC 2018\nWWDC 2017\nWWDC 2016\nWWDC 2015\n\nQuick links:\n\nmacOS 10.15 • iOS 13 • watchOS 6 • tvOS 13\n\nShared Frameworks • macOS 10.15 SDK • iOS 13 SDK • watchOS 6 SDK • tvOS 13 SDK\n\nWeb APIs & Android • Developer Tools • Safari 13 • Other\n\nmacOS 10.15 Catalina\n\nhttps://www.apple.com/macos/catalina/ \nhttps://www.apple.com/macos/catalina/features/ \n\nFind My app (Catalyst-based)\n\ncombines “Find My iPhone” and “Find My Friends”\ncan find devices that are offline and in sleep mode - communicates through other devices nearby (article)\n\niTunes is split into:\n\nMusic app (includes iTunes Store)\nPodcasts app (Catalyst-based)\nTV app\ndevice syncing section in Finder\n\nredesigned Reminders app\nScreen Time for Mac (it has some problems though)\nSidecar - using iPad as a second display, iPad with a pencil can act as a drawing tablet\nApp Store:\n\nApple Arcade section\n\nMail:\n\n“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\noption to block emails from specific senders\nmuting notifications from specific threads\nbutton for unsubscribing from newsletters in the email header\n\nMaps:\n\ncompletely rebuilt, much more detailed map content - entire US by the end of 2019, some other countries next year\n\nNotes:\n\ngallery view\nsharing folders of notes through iCloud\nsharing notes or folders as read-only\nmore powerful search, including text recognition in images\nenhancements for checklists: reordering, moving checked items, uncheck all\n\nPhotos:\n\nnew years/months/days views\n\nPreview:\n\nsignatures can be created using a nearby iPhone/iPad\n\nQuickTime:\n\npicture-in-picture button in the controls bar\nmore details in the Movie Inspector\ncreating a video from a sequence of images\n\nSafari:\n\nupdated start page\neasier access to picture-in-picture through the “playing audio” icon on the tab\nwhen typing in the search bar, Safari suggests already open tabs to switch to\nweb history and open tabs in iCloud are now end-to-end encrypted\nCmd+T opens new tabs right after the active tab\nremoved support for legacy (JavaScript-based) extensions\n\noption to switch light/dark mode automatically\nnew Apple ID and Family Sharing sections in the System Preferences\nsupport for Xbox and PS4 controllers\naccessibility:\n\n“Hover Text” and “Voice Control” features\nmirrored display can be zoomed independently of the main one\nSiri voice can be used for VoiceOver and Speech\n\nhovering over the zoom window button reveals options for tiling windows (tweet)\nApple Watch can be used to unlock things on Macs without TouchID\nsystem suggests mobile hotspots to connect to if WiFi is unavailable (tweet)\nactivation lock for Macs with T2 chip\nGatekeeper now checks software for malware on every run\nGatekeeper will now also check binaries not launched directly, e.g. bundles and libraries loaded by an app\napps now need to ask for permission to:\n\nrecord the screen or keyboard\naccess user’s Documents, Desktop, Downloads, iCloud Drive, external and network drives\naccess files in Trash (requires Full Disk Access); apps previously denied Full Disk Access will now appear on the list automatically, with the checkbox unchecked\n\nthe main disk partition is now divided into 2 logical volumes: system volume which is read only, and user data volume\n\nsystem apps are now in /System/Applications, but Finder shows them in /Applications\n\ndefault shell is now zsh (can be switched), dash is also included (docs)\nDashboard (the old screen with widgets) is finally gone completely\nsupport for i386 (32-bit) apps is completely dropped\nbuilt-in Python, Ruby and Perl runtimes are deprecated, will be removed in a future version\n\niOS 13\n\nhttps://www.apple.com/ios/ios-13/ \nhttps://www.apple.com/ios/ios-13/features/ \nhttps://www.apple.com/ipados/ \nhttps://www.apple.com/ipados/features/ \nhttps://support.apple.com/en-us/HT210393\n\nDark Mode\n\ncan be toggled from the Control Center or scheduled\n\nApp Store:\n\nnew Apple Arcade tab replaces Updates\nUpdates moved to the account popup (also accessible from the 3D Touch menu on the home screen)\nyou can quickly delete apps while browsing the Updates list (video)\n\nBooks:\n\nreading goals\n\nCalendar:\n\nevent attachments\n\nCamera & Photos:\n\nnew lighting effects for portrait\nnew photo adjustments UI, new effects\nrotating and cropping videos, photo filters & effects can be applied to videos too\nredesigned Photos tab - intelligently selects best photos for days/months/years views\nscreen recordings smart album\nwhen sharing photos, you can choose if you want to include location data and other info\nphotos can be imported from an SD card straight to a third-party app\nfixed timezone handling (tweet)\n\nCarPlay (article 1, article 2):\n\nredesigned dashboard\nredesigned home screen\nredesigned Music app\nredesigned Calendar app\nSiri works with third party apps\nHey Siri support\nsmaller Siri screen\nsupport for adjustable screen size, irregular screens and for showing some information on a second screen\nDo Not Disturb while driving\nsettings screen\nlight mode\nopening an app on the iPhone doesn’t affect what’s shown on CarPlay\n\nClock:\n\nnew timer UI\n\nFiles:\n\nDownloads folder\niCloud Drive folder sharing (postponed to next year)\ncreating new folders in the On My iPhone/iPad section\nbuilt-in document scanner\nsupport for USB drives and SMB file servers\nnew keyboard shortcuts on iPad\n\nFind My app\n\ncombines “Find My iPhone” and “Find My Friends”\ncan find devices that are offline and in sleep mode - communicates through other devices nearby (article)\n\nHealth:\n\nredesigned UI\nmenstrual cycle tracking\n\nHomePod:\n\nHandoff support\nlive radio\nmulti-user support\n\nMail:\n\nbetter text formatting options\noption to ignore blocked senders (blacklist is shared with Messages, FaceTime and Phone apps)\nmuting notifications from specific threads\nmoved most toolbar actions to an action menu\n\nMaps:\n\ncompletely rebuilt, much more detailed map content - entire US by the end of 2019, some other countries next year\nfavorite places\nplace collections\nstreet view (Look Around)\nsharing ETA with friends\nreal time flight/transit status\neasier way to share feedback about the map\nmore natural sounding language in navigation\n\nMessages:\n\nname and avatars can be shared automatically when messaging unknown people\nimproved search\nnew animoji characters\nmemoji:\n\nmany new customizations\nmemoji stickers - all memoji are saved as stickers, can be used as emoji on the emoji keyboard, are synced between iOS devices\ncreating memoji is now available on all A9+ devices\n\nMusic:\n\ntime-synced lyrics\nUI changes on the Now Playing screen and in action menus\n\nNotes:\n\ngallery view\nsharing folders of notes through iCloud\nsharing notes or folders as read-only\nmore powerful search, including text recognition in images\nenhancements for checklists: reordering, moving checked items down, uncheck all\n\nPhone:\n\nsilence unknown callers\n\nPodcasts:\n\nsearching the content (transcripts) of podcasts\n\nReminders:\n\nredesigned app\n\nSafari:\n\nnew settings menu: changing font size, per site preferences\nsaving all open tabs as a bookmark folder\noption to automatically close tabs after some period of time\nweb history and open tabs in iCloud are now end-to-end encrypted\nsearch suggests pages currently open in other tabs\ndownloads manager, downloading files to the new Downloads folder\nuploaded photos can be resized\nwhen sharing a page, you have an option to send it as a PDF, Reader View or Web Archive\nupdated start page\ndesktop-class browsing on iPad\nnew keyboard shortcuts on iPad\nin iPad split view, toolbar is displayed at the top\n\nScreen Time:\n\n30 days of history\n“one more minute” limit extension\ncommunication limits for children (postponed)\n\nShortcuts:\n\nShortcuts app is now built in\nconversational (parametrized) shortcuts\nshortcuts automation: triggers for when to run shortcuts\n\nSiri:\n\nnew, entirely computer-generated voice\nplaying audio from third party apps\n\nsystem UI:\n\nnew share sheet with intelligent contact suggestions\nredesigned screenshot markup screen\nscreenshots in some apps now have an option to generate a PDF of a full document (e.g. in Safari, Notes)\nHaptic Touch mostly replaces 3D Touch (e.g. page preview from a link is now merged with URL preview in Safari)\nQuickPath keyboard - swipe typing\nseparate emoji and language switch key on the keyboard (X phones only) (tweet)\nchoosing WiFi network and Bluetooth devices in the control center (video)\nnew QR code scanner in the control center (video)\nchanged the way of moving the text cursor (drag & drop the cursor)\nchanged some text selecting gestures (e.g. triple-tap, double-tap and drag)\ntapping with three fingers during editing shows a new edit actions menu\nquick scrolling in scroll views using the scrollbar indicator (video)\nmulti-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\nnew undo/redo gestures (video)\nnew three finger cut/copy/paste gestures\nnew volume UI (video)\nnew ringer switch UI (video)\nchanged some icon design throughout the OS (tweet, tweet)\n\niPad UI improvements (“iPad OS”):\n\ntighter grid of icons\nwidgets can be pinned on the home screen\neasy switching between apps in slideover\nmulti-window support - same app can be opened multiple times\nexpose for all views of a given app\ncolumn view in Files with file preview/info and Quick Actions\n2x lower Apple Pencil latency\neasy markup of anything in any app using pencil\neasy taking of screenshots using the pencil (by dragging it from a bottom corner)\ncompact floating keyboard\n\nperformance improvements:\n\nFaceID unlock up to 30% faster\noptimized app packaging - smaller app download sizes\napp launch speed up to 2x as fast\nimproved automatic switching between WiFi and cellular connection (e.g. when leaving home)\n\nprivacy improvements for location data:\n\nyou can share location with an app just for current session\nalerts about background location tracking\nprotection from tracking location through WiFi & Bluetooth signals\n\naccessibility:\n\naccessibility settings moved to the top level of the Settings app and reorganized, also added to quick start dialog\n“Voice Control” accessibility feature\nmouse/trackpad support - as an accessibility feature, part of Assistive Touch (works on both iPhone and iPad) (video, thread)\nFull Keyboard Access - lets you control the whole UI with keyboard (iPad only)\noption to disable auto-playing video previews\n\nother settings:\n\noptimized battery charging\n“Low Data Mode” setting for cellular and for WiFi networks, automatically enabled when you connect to a mobile hotspot (tweet)\noption to allow downloads of apps over 200 MB over cellular\nyou can override language for each app separately in the Settings\nswitching to bold fonts doesn’t require a restart\n\non phones with dual SIM, both numbers can be used for iMessage and Facetime and they can make calls simultaneously\ncustom fonts can be installed in the system through third party apps\ndictation automatically detects which language the user is speaking in\n38 new keyboard languages\nAirPods read incoming messages and let you respond (13.2)\naudio sharing with other people’s wireless headphones\nhotspot is shared automatically with members of iCloud family account\nwhen deleting an app with an active subscription, you get an alert asking if you want to cancel it (tweet)\nsupport for Xbox and PS4 controllers\ndrops support for iPhone 5s, iPhone 6 & 6 Plus, iPod touch 6th gen, iPad mini 2 & 3 and iPad Air 1\n\nwatchOS 6\n\nhttps://www.apple.com/watchos/watchos-6/ \nhttps://support.apple.com/en-us/HT210583\n\nindependent apps - you can now build Watch apps without an iOS app\nApple Watch can now install OS updates without an iPhone and can be set to install updates automatically\nApp Store app\nAudiobooks app\nCalculator app\n\nincludes tip calculation and bill splitting\n\nMaps app: improved navigation\nmenstrual cycle tracking app\nNoise app: decibel meter, warnings about high level of noise, noise level complication (Series 4/5 only)\nNow Playing: redesigned app, available as a normal app from the home screen\nPodcasts app: custom stations\nredesigned Reminders app\nredesigned Walkie-Talkie app\nWorkouts app:\n\ncurrent elevation metric in some workouts\nstopwatch app can be continuously viewed on the watch face during workout\nshuffling workout playlist\nworkout summary for previous runs can be shown on the watch\n\nVoice memos app\nnew watch faces: Gradient, Numerals Duo, Numerals Mono, California, Solar Dial, Modular Compact, Meridian (all except the numerals available only for Series 4/5)\nwatch faces can be reordered on the watch (video)\nmonochrome style for Infograph Modular face\ncellular signal complication\nwind and rain complications\ntaptic chimes - plays taptic + sound at full hour\nactivity trends (in the iOS Activity app)\nSiri:\n\ncan recognize songs through Shazam\nshows web search results\n\nContinuity Keyboard between watchOS and iOS (you can use an iPhone to enter some text on the Watch)\naccessibility settings moved to the root level, added a lot more options\nsupport for autofilling one-time SMS codes like on iOS\nsupports the same set of Watch models (Series 1 and above)\n\ntvOS 13\n\nredesigned home screen\nmulti user support\nnew control center sidebar with user switching\nMusic app: shows lyrics\nsupport for Xbox and PS4 controllers\nunderwater screensaver\n\nShared Frameworks\n\nhttps://developer.apple.com/augmented-reality/ \nhttps://developer.apple.com/machine-learning/ \nhttps://developer.apple.com/xcode/swiftui/ \nhttps://developer.apple.com/tutorials/swiftui/ \nhttps://developer.apple.com/metal/\n\nNew frameworks:\n\n🧰 SwiftUI - new declarative framework & tools to build apps for all platforms\n🧰 Combine framework - Apple’s “RxSwift”\n🧰 CryptoKit framework - a collection of cryptographic operations (do not confuse with CryptoTokenKit) (blog post 1, blog post 2)\n🧰 SoundAnalysis framework - classifying audio using Core ML models\n\nFoundation and app frameworks:\n\nDispatch:\n\nDispatchTime.distance(to:), advanced(by:)\nDispatchQueue.schedule(...) - for Combine?\ndispatch_async_and_wait(), dispatch_barrier_async_and_wait()\n\nJSONEncoder:\n\nwithoutEscapingSlashes formatting option\n\nListFormatter: for formatting lists of things in a language-specific way\nNSAttributedString:\n\na way to convert font sizes between macOS and iOS\nloadFromHTMLWith*** methods (in WebKit framework)\n\nNSData:\n\ncompressed(using:) / decompressed(using:) - supports LZ4, LZMA, LZFSE and zlib\nthe behavior of description has changed, which may affect some push token handling code (blog post)\n\nNSDirectionalEdgeInsets, NSDirectionalRectEdge, NSRectAlignment - new geometry data objects that use leading/trailing instead of left/right\nNSLayoutManager:\n\nusesDefaultHyphenation (replaces hyphenationFactor)\n\nNSUserActivity:\n\ntargetContentIdentifier (for choosing the scene to open on iPad)\n\nOperationQueue:\n\naddBarrierBlock adds a “barrier” task that blocks others until it completes\nprogress lets you track operation completion progress once you set its totalUnitCount\noperations and operationCount are deprecated\n\nProcessInfo:\n\nisMacCatalystApp\n\nRelativeDateTimeFormatter: for formatting dates as e.g. “2 weeks ago”\nUnitDuration: added smaller units down to picoseconds\nUnitFrequency: added framesPerSecond (~ alias for hertz)\nUnitInformationStorage: for bytes, megabytes etc.\nURLSession & friends:\n\nHTTPCookie.sameSitePolicy (blog post)\nHTTPURLResponse.value(forHTTPHeaderField:)\nURL.parameterString is deprecated (note, this is not related to the query parameters after ?, but a different kind of parameters separated by ; - TIL)\nURLSession.dataTaskPublisher(...) - integration with Combine\nURLSession.webSocketTask(), URLSessionWebSocketTask - web sockets support\nURLSessionRequest.allowsConstrainedNetworkAccess - if the request should work in Low Data Mode, default is true (blog post)\nURLSessionRequest.allowsExpensiveNetworkAccess - if the request should work over cellular/hotspot connection, default is true\nURLSessionTaskTransactionMetrics: various new properties\ndropped support for SPDY protocol\ntasks using HTTP GET method can’t include a body\nupdated TLS certificate requirements\n\nServices & system frameworks:\n\nAccelerate:\n\nnew Swift API\n\nAVFoundation:\n\nAVMetadataBodyObject - detecting human and animal bodies in the picture\nAVSemanticSegmentationMatte - portrait segmentation mattes for e.g. detecting person’s hair\n\nContacts\n\nCNChangeHistoryFetchRequest, CNChangeHistoryEvent\naround 200 new relation type labels, including names like CNLabelContactRelationYoungerCousinMothersSiblingsDaughterOrFathersSistersDaughter (yes, really)\n\nCore Animation:\n\nCALayer.cornerCurve (blog post)\nCAMetalLayer.preferredDevice\n\nCore Data:\n\nNSBatchInsertRequest - for batch insertions of many records in one go\nNSDerivedAttributeDescription - derived attributes\nNSFetchedResultsController:\n\ncontroller(_: didChangeContentWith snapshot:) - integration with the new diffable data sources\ncontroller(_: didChangeContentWith diff:) - returns a diff that can be manually applied\n\nNSPersistentCloudKitContainer - new API for easy syncing through CloudKit (docs, comments, blog post 1, blog post 2, blog post 3)\nimprovements to the persistent history API\n\nCore Image:\n\nnew methods for instantiating built-in filters\nstandard system colors in CIImage\n\nCore Location:\n\ndeprecated methods related to deferred location updates\nCLLocationManager.delegate is now a weak property\n\nCore ML 3:\n\non-device model personalization\nsupport for more neural network types\n\nJavaScriptCore:\n\nsome new methods concerning symbols and promises\n\nMapKit:\n\npointOfInterestFilter for filtering categories of places that we want to show (in MKLocalSearchCompleter, MKLocalSearch.Request, MKMapSnapshotter.Options, MKMapView - replaces showsPointsOfInterest)\nresultTypes for filtering the types of search results we’re interested in (in MKLocalSearchCompleter, MKLocalSearch.Request - replaces filterType)\nMKGeoJSONDecoder - parsing GeoJSON data\nMKMapItem.pointOfInterestCategory\nMKMapView.cameraBoundary for limiting the area in which the map can be moved\nMKMapView.cameraZoomRange for limiting the camera zoom\nMKMapView.centerCoordinateDistance replaces altitude\nMKMultiLine, MKMultiPolygon and matching renderers\nMKOverlayPathRenderer.shouldRasterize, by default overlays are now drawn as vectors\n\nNatural Language:\n\nNLDistance\nNLEmbedding\nNLGazetteer\nNLTagger.requestAssets(for:tagScheme:completionHandler:)\n\nStoreKit:\n\nSKArcadeService for Apple Arcade\nSKPaymentQueueDelegate + SKStorefront\n\nUserNotifications:\n\nUNNotificationContent.targetContentIdentifier - for choosing the scene to open on iPad\n\nVision:\n\nimage saliency\ndetecting humans and animals\nimage classification\nanalyzing image similarities\ntext recognition (OCR) - VNRecognizeTextRequest (blog post)\n\nWebKit:\n\nWKWebpagePreferences - desktop/mobile rendering mode\n\nmacOS 10.15 SDK\n\nhttps://developer.apple.com/macos/ \nhttps://developer.apple.com/macos/whats-new/ \nhttps://developer.apple.com/ipad-apps-for-mac/ \nhttps://developer.apple.com/system-extensions/ \nhttps://developer.apple.com/documentation/macos_release_notes/macos_catalina_10_15_release_notes \nhttp://codeworkshop.net/objc-diff/sdkdiffs/macos/10.15/ \n\nGeneral:\n\npossibility to port iPad apps to Mac using Catalyst / Marzipan / UIKit for Mac (docs)\n\napps can be distributed outside of MAS (tweet)\n\nsupport for universal links (SFUniversalLink)\nGatekeeper:\n\nsoftware is now checked for malware on every run\nGatekeeper will now also check binaries not launched directly, e.g. bundles and libraries loaded by an app\nnotarization is now required\n“in a future version of macOS, unsigned code will not load by default” (?)\n\nNew frameworks and targets:\n\nnew set of frameworks to replace old kernel extensions:\n\n🧰 DriverKit, HIDDriverKit and USBDriverKit for writing device drivers\n🧰 EndpointSecurity for system security extensions\n🧰 ExecutionPolicy framework - ? (Apple forum thread)\n🧰 NetworkingDriverKit for networking extensions\n🧰 SystemExtensions for managing new-style extensions\nfuture versions will no longer run old kernel extensions\n\n🧰 AuthenticationServices framework from iOS\n🧰 DeviceCheck framework from iOS\n🧰 FileProvider framework from iOS - for integrating cloud storage with Finder\n🧰 LinkPresentation framework - for rendering link previews (blog post)\n🧰 OSLog framework - for processing system logs (initially called Logging)\n🧰 PencilKit framework - for drawing with Apple Pencil\n🧰 PushKit framework from iOS\n🧰 QuickLookThumbnailing framework - extracted from iOS QuickLook framework, replaces old C-based API\n🧰 RealityKit framework - for rendering 3D content in AR\n🧰 Speech framework from iOS\nnew extension targets: Authentication Services, Thumbnail Extension, DriverKit Driver\n\nFramework updates:\n\nCreateML:\n\nobject detection\nsound classification\nmotion sensor activity classification\nrecommender models\nword embeddings\n\nPhotoKit:\n\nadded some missing functionality from iOS\n\nQuickLook:\n\nQLPreviewingController: API for generating previews as on iOS\n\nSafari App Extensions API:\n\ncontentBlocker(withIdentifier:blockedResourcesWith:on:) notifies the extension when the content blocker blocks some content\npage(_:willNavigateTo:) notifies it when the user navigates to a different page\nSFSafariApplication: getAllWindows()\nSFSafariExtension: getBaseURI()\nSFSafariExtensionViewController: dismissPopover()\nSFSafariPage: getContainingTab(), getScreenshotsOfVisibleArea()\nSFSafariTab: getContainingWindow(), navigate(to:), close()\nSFSafariToolbarItem: showPopover()\nSFSafariWindow: getAllTabs(), close()\n\nAppKit updates:\n\nNSButtonTouchBarItem - a Touch Bar item with a buttton\nNSCollectionViewCompositionalLayout - new layout system for collection views\nNSCollectionViewDiffableDataSource - powerful system-provided data source for collection views\nNSColor:\n\nsystemTeal and systemIndigo colors\ninit(name:dynamicProvider:) initializer for choosing light/dark variants\nuses tagged pointers, allocating NSColor objects should be faster\n\nNSColorSampler - a magnifier tool for picking a color from somewhere on the screen\nNSEvent:\n\n.changeMode event type - handling Apple Pencil mode switch on a connected iPad\n\nNSFont:\n\nmonospacedSystemFont(ofSize:weight:)\nfontDescriptor.withDesign(_:) - finding e.g. rounded or monospaced variants\n\nNSOpenPanel and NSSavePanel now run in a separate process\nNSPickerTouchBarItem - a Touch Bar element that lets you choose an item from a menu\nNSResponder:\n\nchangeMode(with:) - handling Apple Pencil mode switch on a connected iPad\n\nNSScreen:\n\nlocalizedName now returns e.g. “Thunderbolt Display”\nsome new methods related to extended dynamic range\n\nNSSliderTouchBarItem:\n\ndoubleValue\nminimumSliderWidth and maximumSliderWidth\n\nNSStepperTouchBarItem - a Touch Bar selector element with left/right arrows\nNSStoryboard:\n\ninstantiateInitialController and instantiateController methods for creating instances of VCs that use the new custom initializers\n\nNSSwitch - a switch control like on iOS (it shouldn’t be used as a replacement for a checkbox though)\nNSTextCheckingController and NSTextCheckingClient - new API for checking spelling, grammar etc.\nNSTextView:\n\nusesAdaptiveColorMappingForDarkAppearance - automatically updates colors for light/dark appearance\n\nNSToolbarItem:\n\nisBordered\ntitle for text-only buttons\nNSMenuToolbarItem - a button that shows an NSMenu\nNSSharingServicePickerToolbarItem\n\nNSToolbarItemGroup:\n\nnew initializers\nsegmented controls, pulldown and popup menus\nautomatic collapsed representation\n\nNSUserActivity:\n\nadded persistentIdentifier property from iOS\n\nNSView:\n\nisHorizontalContentSizeConstraintActive and isVerticalContentSizeConstraintActive - tells AutoLayout to ignore the control’s content size (mostly for optimization)\n\nNSWorkspace:\n\nnew asynchronous methods for opening files and launching applications with a new set of options, old API is deprecated\n\nsome undocumented changes to third party preference panes (blog post)\n\nDeprecations:\n\nMediaLibrary, OpenAL and Quartz Composer are deprecated (PDFKit moved out as a separate framework)\nQuicktime and QTKit frameworks are removed\ndirect access to instance variables in some Cocoa classes (previously deprecated) was removed\n\niOS 13 SDK\n\nhttps://developer.apple.com/ios/ \nhttps://developer.apple.com/ios/whats-new/ \nhttps://developer.apple.com/ipad/ \nhttps://developer.apple.com/ipad-apps-for-mac/ \nhttps://developer.apple.com/siri/ \nhttps://developer.apple.com/documentation/ios_ipados_release_notes/ios_13_release_notes \nhttp://codeworkshop.net/objc-diff/sdkdiffs/ios/13.0/\n\nGeneral:\n\npossibility to port iPad apps to Mac using Catalyst / Marzipan / UIKit for Mac (docs)\n\napps can be distributed outside of MAS (tweet)\n\nSF Symbols icon font (docs, HIG, tweet)\nscenes API and multi-window support (docs)\n\nsame app can be opened multiple times on different screens\nUIWindowScene, UIWindowSceneDelegate, UISceneSession and related classes for handling scenes\nsome lifecycle callbacks that were done in UIApplicationDelegate should now be moved to UIWindowSceneDelegate\nnew restoration system built on NSUserActivity\n\nnew preview & context menu UI activated with long-press:\n\ndisplays a preview of a piece of content and/or a hierarchical context menu with actions\nUIContextMenuInteraction manages the whole interaction (blog post 1, blog post 2)\nUITargetedPreview (based on UITargetedDragPreview from the drag & drop API) defines the preview\nUIMenu, UIAction and UICommand to build the menu hierarchy\nUITableViewDelegate and UICollectionViewDelegate have some new methods for presenting context menus from cells\nin Catalyst apps the menu renders as a standard Mac context menu\nold 3D Touch peek & pop API (UIViewControllerPreviewing) is deprecated\n\nnew APIs for customizing the appearance of various system bars and their items with a lot more configuration options (docs):\n\nUINavigationBar:\n\nstandardAppearance - appearance used in the normal state and as a default\ncompactAppearance - used in landscape on smaller iPhones (4.7\" and below)\nscrollEdgeAppearance - used when there’s a scroll view that’s scrolled all the way to the top\n\nUINavigationItem:\n\nstandardAppearance, compactAppearance, scrollEdgeAppearance - overrides appearance on this specific screen\n\nUITabBar:\n\nstandardAppearance\n\nUITabBarItem:\n\nstandardAppearance - customizes appearance for this specific item\n\nUIToolbar:\n\nstandardAppearance - appearance used in the normal state and as a default\ncompactAppearance - used in landscape on smaller iPhones (4.7\" and below)\n\nold APIs are still available, but are listed as “Legacy Customizations”\n\nNew frameworks and targets:\n\n🧰 BackgroundTasks framework - for app refresh and scheduling long-running tasks\n🧰 Core Haptics framework (blog post)\n🧰 CryptoTokenKit framework from macOS (for security tokens - do not confuse with CryptoKit)\n🧰 ImageCaptureCore framework from macOS - for importing media from cameras and scanners\n🧰 LinkPresentation framework - for rendering link previews (blog post)\n🧰 MetricKit framework - for collecting metrics data on device\n🧰 PencilKit framework - for drawing with Apple Pencil\n🧰 QuickLookThumbnailing framework - some APIs extracted from existing QuickLook framework + some new functionality\n🧰 RealityKit framework - for rendering 3D content in AR\n🧰 VisionKit framework - for scanning documents (blog post)\nnew extension target: Authentication Services\n\nFramework updates:\n\nARKit 3:\n\npeople occlusion\nmotion capture\nsimultaneous use of front & back camera on iOS devices\nmultiple faces tracking on FaceID devices\ncollaborative sessions - improved API for multi-user AR\n\nAuthenticationServices:\n\nsupport for “Sign In With Apple”\n\nAVFoundation:\n\nAVCaptureMultiCamSession - capturing video using both cameras simultaneously\n\nCarPlay:\n\ndark mode and scenes support\n\nCore Location:\n\nuser can choose to share location with your app just for current session\ntwo-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)\nupdated some beacon ranging APIs using a new helper object CLBeaconIdentityConstraint\n\nCore NFC:\n\nNFCTagReaderSession, NFCVASReaderSession, NFCFeliCaTag, NFCISO7816APDU, NFCMiFareTag, NFCNDEFTag for reading different kinds of tags\nsupport for writing to tags\n\nCore Text:\n\nAPIs for installing custom fonts (CTFontManager*)\n\nHealthKit:\n\nheartbeat data: HKHeartbeatSeriesBuilder, HKHeartbeatSeriesSample, HKHeartbeatSeriesQuery\naudiograms (hearing tests): HKAudiogramSample, HKAudiogramSensitivityPoint\nHKCategoryTypeIdentifier: audioExposureEvent, toothbrushingEvent\nHKQuantityTypeIdentifier: appleStandTime, environmentalAudioExposure, headphoneAudioExposure\nHKWorkoutActivityType: discSports and fitnessGaming workout types\n\nHomeKit:\n\nHomeKit Secure Video - secure, encrypted iCloud storage for video from HomeKit cameras (13.2)\nHomeKit for routers, firewalls all IoT devices (13.2)\n\nMapKit:\n\nMKMapSnapshotter.Options.traitCollection for creating snapshots in dark mode\none-finger zoom gesture now works in MKMapView (video)\nsee also the MapKit section in Shared Frameworks\n\nPushKit:\n\ncomplication pushes are deprecated on iOS, they should go straight to the Apple Watch now\n\nQuickLook:\n\nQLPreviewControllerDelegate: some new methods for supporting editing content through QuickLook\n\nSiriKit:\n\nconversational (parametrized) shortcuts\nyou can suggest a shortcut phrase that the user can just confirm\nAPIs for providing info about reservations (docs)\nAPIs for searching and playing media (docs)\nAPIs for starting VoIP calls (docs)\n\nSpeech:\n\non-device speech recognition (10 languages supported), speech analytics (blog post)\n\nUserNotifications:\n\nUNNotificationSettings.announcementSetting - to allow Siri to read notifications through AirPods\n\nUIKit updates:\n\nUIAccessibility:\n\nisOnOffSwitchLabelsEnabled() (Display & Text Size / On/Off Labels)\nisVideoAutoplayEnabled (Motion / Auto-Play Video Previews)\nshouldDifferentiateWithoutColor() (Display & Text Size / Differentiate Without Color)\nUIAccessibilityCustomAction.actionHandler\nNSObject properties: accessibilityAttributedUserInputLabels, accessibilityUserInputLabels, accessibilityTextualContext, accessibilityRespondsToUserInteraction\n\nUIActivityIndicatorView (spinner):\n\nreplaced old style constants with large and medium\n\nUIActivityItemSource (share sheet API):\n\nactivityViewControllerLinkMetadata() - metadata for rendering a preview of the link in the share sheet\n\nUIApplication:\n\nrequestSceneSession*** methods and new properties: connectedScenes,  openSessions, supportsMultipleScenes\ndeprecated a whole bunch of methods, properties and notifications related to:\n\nstatus bar\nkey window\ninteraction events\nbackground refresh\nkeep-alive timeout\nnetwork activity indicator :(\n\nUIApplicationDelegate:\n\nsome new delegate methods for handling window sessions\ndeprecated background refresh API in favor of BackgroundTasks\ndeprecated some delegate methods related to status bar\n\nUIApplicationShortcutItem (home screen context menu actions):\n\ntargetContentIdentifier (for choosing the scene to open)\n\nUIApplicationShortcutIcon (home screen context menu actions):\n\ninit(systemImageName:) for SF Symbols\n\nUIBarButtonItem:\n\nnew close button type (tweet)\n\nUIBarStyle:\n\ndeprecated blackTranslucent and blackOpaque\n\nUIBlurEffect:\n\nnew set of “material” blur styles (video)\n\nUIButton:\n\nnew close button type\nsystemButton(with:target:action:) helper method\nmethods for configuring display of SF Symbols icons\n\nUICollectionViewCompositionalLayout - new layout system for collection views\nUICollectionViewDelegate:\n\nmethods for managing multi-selection\nmethods for handling context menus with previews\ndeprecated old menu handling actions\n\nUICollectionViewDiffableDataSource - powerful system-provided data source for collection views\nUIColor:\n\nsemantic colors like label, secondaryLabel, systemBackground, link etc.\nsemantic base colors like systemRed, systemBlue etc.\ninit(dynamicProvider:) and resolvedColor(with:)\n\nUIDocumentBrowserViewController:\n\ndefaultDocumentAspectRatio\nshouldShowFileExtensions\nrecentDocumentsContentTypes\nlocalizedCreateDocumentActionTitle\n\nUIDocumentPickerViewController:\n\nshouldShowFileExtensions\ndirectoryURL - initial directory\nyou can now ask for access to a whole folder (by using document type kUTTypeFolder)\n\nUIFont:\n\nmonospacedSystemFont(ofSize:weight:)\nfontDescriptor.withDesign(_:) - finding e.g. rounded or monospaced variants\n\nUIFontPickerViewController - for picking custom fonts (blog post, tweet)\nUIHoverGestureRecognizer - for mouse hover events (Catalyst only)\nUIImage:\n\ninit(systemName:) for SF Symbols (blog post)\ninit(named:in:with:) for choosing a specific appearance variant or setting SF Symbols style\nsystem images: .add, .remove, .actions, .checkmark, .strokedCheckmark (tweet)\nbaseline: baselineOffsetFromBottom, withBaselineOffset(fromBottom:), withoutBaseline()\nimage configuration (for handling multiple variants for different appearances): configuration, withConfiguration(_:)\nsymbol configuration (for configuring SF Symbols): isSymbolImage, symbolConfiguration, applyingSymbolConfiguration(_:)\nwithTintColor(_:)\n\nUIImageAsset:\n\nregistering and looking up variants for different configurations: image(with configuration:), register(_ image: with configuration:) (tweet)\n\nUIImageView:\n\npreferredSymbolConfiguration for configuring SF Symbols style\n\nUIImpactFeedbackGenerator (generating haptic feedback):\n\nimpact styles rigid and soft\nspecifying impact intensity as a float value (blog post)\n\nUIKeyCommand (iPad keyboard shortcuts):\n\ntitle, image, action, state, attributes, alternates, propertyList\n\nUILargeContentViewerItem and UILargeContentViewerInteraction - a new accessibility API for “zooming in” UI elements (blog post)\nUILayoutPriority:\n\ndragThatCanResizeScene, dragThatCannotResizeScene, sceneSizeStayPut\n\nUIMenuBuilder and UIMenuSystem - for building the main app menu in Catalyst apps (?)\nUIMenuController (tooltip menu activated from text):\n\nshowMenu(from:rect:), hideMenu(from:), hideMenu() (replaces old API)\n\nUIResponder:\n\nbuildMenu(with builder:) - building app menu in a Catalyst app?\nvalidate(_ command:)\nupdateTextAttributes(conversionHandler:)\nactivityItemsConfiguration\neditingInteractionConfiguration - lets you disable new 3-finger gestures\ntouchBar, makeTouchBar() (Catalyst only)\n\nUIScreen:\n\ncalibratedLatency\n\nUIScreenshotService - lets you provide a PDF version of a screenshot\nUIScrollView:\n\nautomaticallyAdjustsScrollIndicatorInsets (tweet)\nhorizontalScrollIndicatorInsets, verticalScrollIndicatorInsets\n\nUISearchBar:\n\nsearchTextField - lets you configure the look of the search text field\nsetShowsScope(_:animated:)\n\nUISearchController:\n\nautomaticallyShowsCancelButton\nautomaticallyShowsScopeBar\nautomaticallyShowsSearchResultsController, showsSearchResultsController\n\nUISearchTextField - a text field that can show “tokens” before the search query\nUISegmentedControl\n\nnew design (tweet)\nselectedSegmentTintColor (tintColor is ignored)\n\nUISplitViewController:\n\nprimaryBackgroundStyle (Catalyst only - for creating Mac window sidebars)\n\nUIStatusBarManager - an interface for viewing (but not modifying) the status bar state of the current scene\nUIStatusBarStyle:\n\nadded darkContent, default is now automatic\n\nUIStepper\n\nnew design (video)\n\nUIStoryboard:\n\ninstantiateInitialViewController and instantiateViewController methods for creating instances of VCs that use the new custom initializers\n\nUITableView:\n\nnew table style insetGrouped (tweet)\n\nUITableViewDelegate:\n\nmethods for managing multi-selection\nmethods for handling context menus with previews\ndeprecated old menu and edit handling actions\n\nUITableViewDiffableDataSource - powerful system-provided data source for table views\nUITextDocumentProxy (custom keyboards):\n\nsetMarkedText(_:selectedRange:), unmarkText()\n\nUITextFieldDelegate:\n\ntextFieldDidChangeSelection()\n\nUITextFormattingCoordinator - for showing a font panel in Catalyst apps?\nUITextInput (text field & text view):\n\ninsertText(_:alternatives:style:)\nsetAttributedMarkedText(_:selectedRange:)\ninsertTextPlaceholder(with:)\nremove(_ textPlaceholder:)\n\nUITextInteraction - allows you to add system text selection gestures to a custom text view\nUITextView:\n\nusesStandardTextScaling - in Catalyst apps, automatically scales text properly on the Mac\n\nUITraitCollection:\n\nuserInterfaceLevel trait = base/elevated (elevated ≈ being shown in a modal view)\nuserInterfaceStyle, although technically it was added last year for CarPlay & tvOS :)\naccessibilityContrast\nlegibilityWeight (Bold Text accessibility setting)\nimageConfiguration\nhasDifferentColorAppearance(comparedTo:)\ncurrent and performAsCurrent()\n\nUIVibrancyEffectStyle:\n\nthe old class methods are deprecated and replaced by various label/fill styles\n\nUIView:\n\noverrideUserInterfaceStyle to force light or dark mode\nmodifyAnimations(withRepeatCount:autoreverses:animations:)\ntransform3D\ndeprecated old animation API that used separate class methods instead of parameters and blocks\n\nUIViewController:\n\nchanges to modal view presentation (blog post):\n\n.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\nthe 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\npopovers on iPad also render as sheets in compact-width split screen view\nshare extensions are displayed as page sheets on both iPhone and iPad\npage 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\nnew property modalInPresentation (replaces modalInPopover) lets you prevent the user from dismissing a sheet (can be dynamically updated, e.g. when user edits some data)\nthe “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\nUIAdaptivePresentationControllerDelegate has new callbacks for handling sheet events:\n\npresentationControllerDidAttemptToDismiss()\npresentationControllerShouldDismiss()\npresentationControllerWillDismiss()\npresentationControllerDidDismiss()\n\nother changes:\n\noverrideUserInterfaceStyle to force light or dark mode\ntraitCollectionDidChange: 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\nperformsActionsWhilePresentingModally\nchildViewControllerForTouchBar, setNeedsTouchBarUpdate (Catalyst only)\n\nUIWindow:\n\ncanResizeToFitContent (Catalyst only)\n\nDeprecations:\n\nlaunch images are deprecated - use launch storyboards (will be required from April)\n\napps built on iOS 13+ SDK will run in native mode on any new devices without requiring a new build\nsupport for split-screen modes will also be required for iPad apps from April (with exceptions?)\n\nOpenAL framework is deprecated\nUIWebView is even more deprecated than before (update: info about the specific deadlines)\nUIApplicationExitsOnSuspend Info.plist option (yes, the one from iOS 4!) is finally deprecated\n\nwatchOS 6 SDK\n\nhttps://developer.apple.com/watchos/ \nhttps://developer.apple.com/watchos/whats-new/ \nhttps://developer.apple.com/documentation/watchos_release_notes/watchos_6_release_notes \nhttps://developer.apple.com/documentation/watchkit/building_watchos_app_interfaces_with_swiftui \nhttp://codeworkshop.net/objc-diff/sdkdiffs/watchos/6.0/ \n\nGeneral:\n\nindependent apps (docs)\n\noption to build apps that can be distributed independently of the iOS version, or without a matching iOS app at all\npush notifications, complication pushes and CloudKit subscriptions can be sent straight to the watch\n\napp and asset thinning - smaller downloads\nSF Symbols icon font (docs, HIG, tweet)\n\nNew frameworks:\n\n🧰 AuthenticationServices framework\n🧰 CoreMedia framework\n🧰 Network framework\n🧰 PushKit framework\naudio streaming APIs\n\nFramework updates:\n\nClockKit:\n\nGraphic Circular complications: additional template types\nCLKDateTextProvider: uppercase\nCLKFullColorImageProvider: support for “tinted images”\nCLKRelativeDateTextProvider: additional formatting styles\n\nHealthKit:\n\nheartbeat data: HKHeartbeatSeriesBuilder, HKHeartbeatSeriesSample, HKHeartbeatSeriesQuery\naudiograms (hearing tests): HKAudiogramSample, HKAudiogramSensitivityPoint\nHKCategoryTypeIdentifier: audioExposureEvent, toothbrushingEvent\nHKQuantityTypeIdentifier: appleStandTime, environmentalAudioExposure, headphoneAudioExposure\nHKWorkoutActivityType: discSports and fitnessGaming workout types\napps can ask for health data access on the watch\n\nSiriKit:\n\nconversational (parametrized) shortcuts\nyou can suggest a shortcut phrase that the user can just confirm\nAPIs for providing info about reservations (docs)\nAPIs for adding and searching media (docs)\nAPIs for starting VoIP calls (docs)\nsome additions to task APIs (docs)\n\nUserNotifications:\n\nUNNotificationServiceExtension is now available on watchOS\nUNNotificationSettings.announcementSetting - to allow Siri to read notifications through AirPods\n\nWatchConnectivity:\n\nWCSession: companionAppInstalled\nWCSessionDelegate: sessionCompanionAppInstalledDidChange:\n\nWatchKit updates:\n\nWKAudioFile* - deprecated, use AVFoundation\nWKExtendedRuntimeSession - extended runtime API\n\nonly for specific types of activity: self care, mindfulness, physical therapy, smart alarms, health monitoring\n\nWKExtension:\n\nAPIs for handling push notifications and extended runtime sessions\n\nWKInterfaceAuthorizationAppleIDButton - “Log in with Apple” button\nWKInterfaceDevice:\n\nsupportsAudioStreaming\n\nWKInterfaceMap:\n\nsetShowsUserHeading(), setShowsUserLocation(), setUserTrackingMode() (6.1)\n\nWKInterfaceTextField - new text field control\ninstances of WKInterface* view classes can now be created in code - but only for use in SwiftUI 🙃\n\ntvOS 13 SDK\n\nhttps://developer.apple.com/tvos/ \nhttps://developer.apple.com/tvos/whats-new/ \nhttps://developer.apple.com/documentation/tvos_release_notes/tvos_13_release_notes \nhttp://codeworkshop.net/objc-diff/sdkdiffs/tvos/13.0/\n\nGeneral:\n\nscenes API and multi-window support (see iOS)\nSF Symbols icon font (docs, HIG, tweet)\n\nNew frameworks:\n\n🧰 AuthenticationServices framework from iOS\n🧰 BackgroundTasks framework - for app refresh and scheduling long-running tasks\n🧰 CryptoTokenKit framework from macOS (for security tokens - do not confuse with CryptoKit)\n\nFramework updates:\n\nUIKit: most changes from iOS apply here\nUITabBar:\n\nleadingAccessoryView, trailingAccessoryView\n\nUIViewController:\n\ntabBarObservedScrollView\n\nTVMLKit:\n\nTVBrowserViewController\nTVDocumentViewController\n\nTVUIKit:\n\nTVCollectionViewFullScreenLayout, TVCollectionViewFullScreenCell\n\nTVTopShelf* for building new style Top Shelf extensions\nTVUserManager, TVAppProfileDescriptor - for managing multiple user accounts\n\nDeprecations:\n\nOpenAL framework is deprecated\n\nWeb APIs & Android\n\nhttps://developer.apple.com/sign-in-with-apple/ \nhttps://developer.apple.com/documentation/signinwithapplejs\n\nSign In With Apple\n\nrequired if your app supports sign-in with third party accounts like FB (article)\nsome first impressions: thread, blog post 1, blog post 2\n\nMapKit JS:\n\nweb snapshots service (docs)\ndark mode support\nfiltering points of interest and result types\nlimiting map area and camera zoom\nparsing GeoJSON\n\nMusicKit for Android\n\nDeveloper Tools\n\nXcode 11\n\nhttps://developer.apple.com/xcode/ \nhttps://developer.apple.com/xcode/whats-new/ \nhttps://developer.apple.com/documentation/xcode_release_notes/xcode_11_release_notes\n\nlive previews for SwiftUI\nintegration with Swift Package Manager\n\nSwift packages can be added as dependencies\nyou can open Swift packages as projects (by opening Package.swift) (tweet)\n\n@IBSegueAction - a way to use storyboard segues with custom view controller initializers\neditor improvements:\n\nscreen can be divided into multiple editors in any layout (click “Add Editor” in the top-right corner, hold Alt to divide vertically)\noptions for assistant editors: Editor Only / Editor and Canvas / Editor and Assistant; assistant pane automatically hides\neditor now includes a minimap with headings from MARK comments (hold Cmd to see all symbols) (tweet)\n“edit all in scope” also edits documentation\nfont styling in documentation comments (italic, bold and monospace, default font is Helvetica Neue)\nMARK comments draw a separator line in the editor\nsource editor supports spell checking\nhierarchical code folding (folding and unfolding an outer block retains folding in an inner block)\nsnippets/objects/media libraries are merged into a single panel with tabs\nyou can cmd+click on Swift operators to jump to the definition\n\nversion control:\n\nsource control change bar (on the left edge of the editor) can show diff from the original version\nsupport for stashing and cherry-picking\nXcode can automatically stash and restore changes when pulling from a repository\nthe “Version Editor” views from the menu bar are broken up into different places:\n\n“Comparison” view becomes “Code Review”\n“Authors” view becomes an option in the new editor settings\n“Log” view becomes a “History Inspector” in the right sidebar\n\nproject settings:\n\nSigning section has been moved to the Capabilities tab\nCapabilities list only lists enabled capabilities, others can be added with a “+” button instead of On/Off switches\nit’s now possible to use a capability only in some build configurations\n“Embedded Binaries” and “Linked Frameworks and Libraries” lists are merged into one\n\nassets:\n\nassets in asset catalogs can be localized\nyou 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)\n\nsimulator:\n\niOS simulator is GPU-accelerated (and you can choose the GPU if your Mac has more than one), supports Metal 🤘\nXcode no longer creates every available iOS simulator, only a set of most commonly used ones\nfaster simulator launches (dyld shared cache)\n\ndebugging:\n\nnew “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)\nSimulate Location switcher added to debug bar for iOS apps\nyou can simulate network & thermal conditions on connected devices through the Devices window, tested device shows an icon in the status bar\nMetal memory debugger\nvarious improvements for watchOS debugging, including view hierarchy debugging, faster performance and better reliability, debugger connects directly through WiFi if possible\n\ntesting:\n\nTest Plans - easy way to run tests in multiple configurations\nscreenshots from UI tests can be generated in localized versions for App Store\nXCTest.measure(...) - APIs for performance testing\nXCTUnwrap() for unwrapping optionals\nnew format of .xcresult bundles (tweet)\n\nsupport for XCFrameworks, which are frameworks that can bundle code for multiple architectures (blog post)\napp performance metrics for iOS apps (in the Organizer) - anonymized stats on battery usage, launch time, hang rate, memory use, disk access\nenhancements to Siri Intents editor\n-Oz optimization option (tweet)\n\nSwift\n\nSwift 5.1: see article by Paul Hudson\nJohn Sundell’s article on the additions specifically made for SwiftUI\n\nObjC\n\nchanges to objc_msgSend (post 1, post 2)\n\nApp Store & developer services\n\nRadar (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)\nredesigned CloudKit dashboard (tweet)\nredesigned certificate/profile management portal (tweet)\nApp Store Connect API now has endpoints for handling provisioning (docs)\niOS and Mac SDKs now use the same certificates (tweet)\nchanges to some App Store Review Guidelines concerning data collection (source), plus later changes\nless strict requirements for the subscription purchase UI (tweet)\nTestFlight feedback: option “Share beta feedback” when taking a screenshot of an app from TestFlight, feedback is available in App Store Connect\nApp Store Connect analytics shows app deletions (tweet)\ncoming soon:\n\nApp Store for iMessage (tweet)\nApp Store Connect usage analytics for Mac (tweet)\nlive analytics dashboard for the last 24h (tweet)\n\nOther tools\n\nCreate ML app for building machine learning models\nReality Composer app for building AR experiences (Mac & iOS)\nTransporter app for uploading app binaries to the App Store\nSF Symbols app\n\nSafari 13\n\nhttps://developer.apple.com/documentation/safari_release_notes/safari_13_release_notes\n\ndesktop-class browsing on iPad - uses desktop Safari’s user agent, intelligently adapts sites to touch events\nsupport for dark mode on iOS\nsupport for CSS conic gradients\nsupport for FIDO2-compliant USB security keys using Web Authentication API\nsupport for screen sharing using web APIs\nsupport for aborting Fetch requests\nsupport for the __Secure- and __Host- cookie prefixes\nPointer Events API\nVisual Viewport API\nAPI for requesting permission to accelerator/gyroscope data\nWeb Inspector improvements:\n\nTimelines: added CPU Usage / Energy Impact timeline, support for importing & exporting timelines\nAudit tab with accessibility audits, custom audits can be created (blog post 1, blog post 2)\nChanges tab in Elements tab sidebar\nDevice settings menu when inspecting a site on a connected iPhone, which lets you e.g. change user agent or disable images or scripts\n\nremoved support for WebSQL\nremoved support for legacy (JavaScript-based) extensions on the Mac\n\nOther\n\nNew York font\nIMDF - Indoor Mapping Data Format and Indoor Maps Program\nApple Music web app",
  "title": "New stuff from WWDC 2019",
  "updatedAt": "2025-08-20T01:05:55Z"
}