WWDC 2019 - The Things You May Have Missed

WWDC 2019 was definitely the biggest event in the last few years. I was in the audience when Swift was announced in 2014, but I can say that this year is probably bigger than WWDC 2014. Given the many changes across frameworks, OSes, developers tools and web services that Apple offers, many interesting minor long-awaited improvements may have gone unnoticed. I tried to collect some of the announcements that may have been shadowed by the bigger announcements in a single and short post. Every item has an associated source or link where you can learn more about it.

I am planning to keep this list up to date over the next few weeks as a personal reference, so feel free to send me anything you discover. I hope you enjoy the list!

New Frameworks

  • PencilKit is a new framework that allows capturing touch input as an opaque drawing and display that content from your app. Apple Documentation
  • RealityKit is a new framework that allows simulation and rendering of 3D content for use in your augmented reality apps. Apple Documentation
  • BackgroundTasks is a new framework that can be used to request the system to launch your app in the background to run tasks. Apple Documentation
  • QuickLookThumbnailing is a new framework that can be used to provide quick look thumbnails for custom file types provided by your app. Apple Documentation
  • Combine is a new framework for handling of asynchronous events by combining event-processing operators. Apple Documentation
  • Core Audio Types is a new framework that uses specialized data types to interact with audio streams, complex buffers, and audiovisual timestamps. Apple Documentation
  • Core Haptics is a new framework that allows composing and playing haptic patterns to customize your iOS app’s haptic feedback. Apple Documentation
  • SoundAnalysis is a new framework that allows the analysis of streamed and file-based audio to classify it as a particular type. Apple Documentation
  • VisionKit is a new framework that allows developers to implement a camera scanning documents feature like the one available in the stock Notes app. Apple Documentation
  • Maps Web Snapshots is a new web service that allows the creation of a static image of a map from a URL. Apple Documentation, @vickimurley
  • CryptoKit is a new framework that performs cryptographic operations securely and efficiently. Apple Documentation
    • MD5 and SHA1 are classified as insecure and are only provided for backward compatibility services that require them. @vixentael
  • MetricKit is a new framework that allows aggregation and analysis per-device reports on power and performance metrics. Apple Documentation
  • DriverKit is a new framework that allows developing device drivers that run in user space. Apple Documentation
  • EndpointSecurity is a new framework that allows developing system extensions that enhance user security. Apple Documentation
  • SystemExtensions is a new framework that allows to install and manage user-space code that extends the capabilities of macOS. Apple Documentation
  • USBDriverKit is a new framework that allows to develop drivers for USB-based devices. Apple Documentation
  • USBSerialDriverKit is a new framework that allows to develop drivers for serial IO devices connected to your Mac. Apple Documentation
  • HIDDriverKit is a new framework that allows to develop drivers for devices that users interact with. Apple Documentation
  • There are some more new frameworks without documentation: LinkPresentation, IOUSBHost, Logging, NetworkingDriverKit, ExecutionPolicy and WiFi.

iOS

  • The default presentation modal animation is a card-like design. Modals are dismissable interactively by default (which may break some apps), but you can set isModalInPresentation to false to disable this behavior. @hansemannnn
  • UISegmentedControl and UIStepper have an updated design. @hansemannnn
  • Apps are to request “Always” access to the device location but users will see an alert when an app tries to access the location from the background that prompts them to “Always Allow” or to “Change to Only While Using”. Users are also presented with a map clearly showing that the app was tracking the location. In this way, users are not forced to take a decision upfront when installing the app for example. quicklywilliam
  • Apple sign-in is going to be mandatory for apps that support third-party sign-in when it is commercially available later this year (presumably after both macOS 10.15 Catalina and iOS 13 ship publicly). Apple Documentation
  • Safari now has a download manager. Users can specify the destination in the Settings (even USB drives are supported!). @stroughtonsmith
  • Starting next spring, it will be an App Store requirement for apps to adopt to different screen sizes (such as supporting Multitasking on the iPad). @steipete
  • The share sheet has been completely redesigned and seems to be smarted and have more context about what the user wants to do based on the content type it is presented with. @Swanros
  • UIImage has a new initializer, UIImage(systemName:) that takes a string and returns one of over 1500 different system icons. @twostraws
  • The 3D Touch APIs such as peek & pop have been updated with a new UIContextMenuInteraction API. This is in contrast with previous rumours about 3D Touch not being present on future iOS devices. @bhansmeyer
  • iOS 13 has some major updated APIs to manage and diff datasource. A new block-based APIs has also been added if you don’t like delegates. @smileyborg
  • A new “Low Data” mode has been added to avoid running out of data when you’re on a roaming plan for example. This feature is also available under Wi-Fi. @daytonlowell
  • iOS 13 raises the limit of apps downloadable via cellular to 200 MB, but this limit can be removed by the user in the Settings. @steipete
  • UIViewController subclasses can now be initialized from a Storyboard and be passed additional context and arguments (required for dependency injection). @kharrison
  • Similar improvements have been made to UIStoryboardSegue with the new @IBSegueAction modifier. You can pass additional context and parameters directly to the next segue view controller that should be initialized. @jnadeau
  • Sharing photos on iOS 13 has the option to include the original info such as depth map and other sensitive data. @_HarshilShah
  • A new UICollectionViewDiffableDataSource class has been added to UIKit to make it easier to manage diffable data sources in UICollectionView (insert, update and remove actions). @_ryannystrom
  • A new UICollectionViewCompositionalLayout class has been added to UIKit to make it easier to create compositional layouts without requiring a custom UICollectionViewLayout. @MarvinNazari
  • iOS 13 supports scroll view scrubbing. Simply drag the scrolling indicator to to fly through a long document. @bzamayo
  • The mute indicator on iOS 13 has been completely redesigned to match the Apple Pencil charging indicator seen previously on the iPad. @MikeBeas
  • Users can now change each app’s language independently from the system language in the Settings app, no change is required by developers. @frederikRiedel
  • iOS now supports multiple windows of your app running simultaneously, and there are new APIs such as UIScene and UISceneConfiguration in order to coordinate them. @stroughtonsmith
  • NFC is getting a lot more powerful in iOS 13, allowing developers to read new type of NFC tags and many new features. @imlxgr, gototags
  • iOS 13 has a new _visualRecursiveDescription private API that can construct a visual representation of a view hierarchy. Very useful for debugging in LLDB. @steipete
  • iOS apps using the File Management APIs can now be granted read/write access to an entire folder, rather than just a file. @stroughtonsmith
  • iOS 13 now supports strictly silencing unknown callers. @JuanArreguin
  • Apps can now be removed from the App Store Updates page by simply swiping left on an app. @chrisvega
  • iOS 13 allows apps to take full content screenshots in a PDF format. @qdoug
  • iMessage will have full blown App Store managed through App Store Connect with full TestFlight capabilities. @ott_max
  • iOS 13 now shows a map of where apps have been tracking you when requesting permission. @9to5mac
  • In iOS 13, a new method on UIImageAsset named registerImage:withTraitCollection can be used to create dynamic images (that switch in light/dark mode) programmatically. @timonus
  • The UITableViewStyle enum gained a new public UITableViewStyleInsetGrouped case that can be used to create grouped style table views as seen in some of Apple’s stock apps. @ian_mcdowell
  • iOS 13 has new toast-bar-like tips integrated into apps like iMessage to teach users new actions. @kylebshr
  • Safari can now auto-close tabs based on when you last viewed them (one day, one week or one month). @MacRumors

Xcode

  • XCFrameworks make it possible to bundle a binary framework or library for multiple platforms —including iOS devices, iOS simulators, and UIKit for Mac — into a single distributable .xcframework bundle that your developers can use within their own applications. This should remove the need to use lipo to create a fat binary. @KamilPyc
  • Xcode added a new minimap to get an overview of a source code file. Holding command (⌘) reveals more details and allows to navigate source files easily. @_eliperkins
  • You can now manage much of the Swift Package Manager workflow directly in Xcode, such as adding Swift packages to an existing iOS project. @cocoawithlove
  • SwiftUI in Xcode 11 and macOS 10.15 uses a new feature of Swift called “dynamic replacement”. This is similar to how swizzling works in Objective-C, and is needed to avoid recompiling the whole app when changing just one color or font size for example. @jckarter
  • SwiftUI is currently missing an implementation for UISplitViewController which is coming in a later seed. An API to build forms is also rumored to be released in a later beta. @OhItsShaun
  • With Xcode 11, you can share and open result bundles (.xcresult files) which contain things like tests, code coverage and logs. You can also fully parse them with the new xcresulttool from custom tooling. @czechboy0
  • watchOS 6 and Xcode 11 still don’t have XCTest support. @simjp
  • Clang has a new mode -Oz that optimizes your code for size. It reduces code size by identifying identical code sequences across functions. @steipete
  • XCTUnwrap is a new API in XCTest that is equivalent to asserting that an object is not nil and doesn’t throw an error. @zntfdr
  • In Xcode 11, Interface Builder has some great new icons, especially for NSView and NSControl objects. @thequinntaylor
  • You can command-click on Swift operators to use Quick Help and Jump to Definition. @olebegemann
  • Xcode 11 has a new “Environment Override” in Storyboard files that allow much faster live accessibility testing. @alexiscreuzot
  • Application Loader is no longer bundled with Xcode 11. A new native app called Transporter for submission of .itmsp, .ipa and .pkg files is going to be available. @ott_max
  • Xcode now shows an inline diff for all your changes. A new redesigned panel workflow is also present, alogn with some new major features like XCTestPlans, live previews for Stooryboards and UIKit components, the Simulator running on GPU with Metal and condition inducers to test your apps in extreme temperature conditions. @edwardsanchez

macOS

  • Holding down option when mousing over the full-screen button reveals some interesting options. @BalestraPatrick
  • AppKit got some love this year by adding a new NSSwitch UI element. @jnadeau
  • In the 10.15 SDK, all of AppKit’s ivars were removed from headers. The ivars that were previously @‍public have linker symbols exported for compatibility, but you’ll hit build errors with the new SDK if you reference them. @jnadeau
  • Signing documents with Preview now supports using an iOS device to draw a signature. This is a great improvement since the experience of drawing on a trackpad has always been suboptimal compared to an iOS device touch screen. @MacRumors

Swift

  • GitHub already announced that they will be adding support for Swift packages to the GitHub Package Registry. What this means for our everyday use is still unclear, but possibly it could be help with indexing all Swift packages in a better way. @github
  • Some of the new features in SwiftUI required changes in the language that did not go through the normal review process. This may be suprising at first but an explanation can be found in the following Swift Forums post.
  • SwiftUI uses SwiftSyntax when you command + click to inspect and modify an element. If you’ve contributed to its open-source version, you can probably brag about your code running inside Xcode now. High five! @akyrtzi

Other

  • The developer portal used to manage certificates, identifiers and profiles has been updated with a fresh design that matches App Store Connect. @BalestraPatrick
  • An update to the App Store Review Guidelines has been published with two important changes:
    • Apps intended for kids cannot include third-party advertising or analytics software and may not transmit data to third parties.
    • Because MDM provides access to sensitive data, MDM apps must request the mobile device management capability, and may only be offered by commercial enterprises, such as business organizations, educational institutions, or government agencies, and, in limited cases, companies utilizing MDM for parental controls. MDM apps may not sell, use, or disclose to third parties any data for any purpose, and must commit to this in their privacy policy. (referring to apps that abused MDM for Screen Time-like features)
    • Sign In with Apple will be available for beta testing this summer. It will be required as an option for users in apps that support third-party sign-in when it is commercially available later this year.
  • TestFlight users are automatically presented with a “What’s New” screen when updating to a newer build. No change is required from developers. @MikeBeas
  • When a user takes a screenshot in an app being tested via TestFlight, a new composer will automatically pop up and allow to send a quick feedback to the developer (Instabug sherlocked). @_eliperkins
  • iPadOS is just a marketing name to make everything more confusing. It’s still iOS, and even the docs don’t mention iPadOS has a separate platform at the moment. @_inside
  • Radar is now Feedback Assistant for external developers. Apple seem to have listened the many complaints about the closeness and the black hole that radar is for external developers, and it has moved its feedback system to a brand new tool (all existing radars have been migrated to the new system). Feedback numbers have a different format too and they look like FB12345678. Apple now tells you how and why a radar was closed. Duplicates are now referred to as similar issues, and it will actually tell you if a fix has been shipped. @steipete, @kylesethgray
  • macOS 10.15 uses zsh as the default shell. Some of your scripts may be completely broken on macOS Catalina when creating new users with zsh as the default shell, so keep that in mind. The reason for this change is rumoured to be related to the fact that Apple is trying to remove all GPL-licensed code from macOS. @davedelong
  • The public App Store Connect API announced at WWDC 2019 to manage provisioning has been finally released. You can create Bundle IDs, Capabilities, Certificates, Devices and Profiles. @BalestraPatrick
  • Two new classes that should make it easier to convert dates have been added to Foundation: ListFormatter and RelativeTimeFormatter. @olebegemann
  • SF Symbols is a new framework that contains over 1,500 consistent, highly configurable symbols you can use in your iOS app. You can also create your own symbols by providing SVG files. A companion app to test all symbols on various devices is also available for download. @kevgski
  • IMDF (Indoor Mapping Data Format) is a new concept introduced by Apple that provides a generalized, yet comprehensive model for any indoor location, providing a basis for orientation, navigation and discovery. @ortwingentz
  • Apple decreased the number of legal text an app that provides subscriptions has to show to the user. Only the title, length and price of the subscription is required to be shown on every paywall. @jeiting, @macguru17
  • App Store Connect will soon get a near real time sales view showing you the last 24 hours. @lesmond
  • App deletions statistics will also be available as part of App Analytics in App Store Connect. @ilyakuh
  • The Photos framework on the Mac has now pretty much the same feature availability as iOS. @toco91
  • NSListFormatter is a new API in Foundation that makes it easier to format a list of items for the user’s locale. @qdoug

Funny