You don't have the time to watch all the WWDC session videos yourself? No problem me and many contributors extracted the gist for you 🥳
Shell
2,596
420 commits
updated Jan 22, 2025
Last years WWDC Session Notes was so successful that I decided to continue this form of WWDC session summary. I would like to take the moment to thank all of you for contribution, feedback, support and reading my session notes 🙏
Usually it is much faster to read through some bullet points instead of watching a 50 min session video. Then if you find something interesting you can still watch it.
Sessions that are exceptionally mentionable are highlighted using a ★.
This is work in progress since it is a lot of effort to watch all the videos by myself. So either please be patient or just open up an issue to make a suggestion which session notes you like to see next :)
Feel free to submit a PR if I got something wrong or you have a suggestion for improvement. Please also have a look in CONTRIBUTING.md if you want to contribute.
Thanks so much to EVERYBODY who contributed and improved the overall quality of the notes and those who added complete notes to the list.
This repo has already been mentioned many times on Twitter and apart from this also in the following places:
https://developer.apple.com/wwdc20/10004
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10005
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10006
Presenter: Matthias Lerch
https://developer.apple.com/wwdc20/10008
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10009
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10010
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10011
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10012
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10013
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10017
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10019
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10020
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10021
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10022
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10026
Presenters: Michael Ochs
UITableView-like appearances in UICollectionViewUICollectionView
preferredLayoutAttributesFittingAttributes: on cell subclasses to exercise manual sizingNSCollectionLayoutSection and UICollectionViewCompositionalLayout: check out Advances in Collection View Layout.sidebar and .sidebarPlain for building multicolumn apps on iPadOS 14UICollectionLayoutListConfigurationUICollectionViewCompositionalLayout with the configurationUICollectionLayoutListConfigurationNSCollectionLayoutSection with the configurationheaderMode to firstItemInSection (headers-only)
UICollectionViewCell, can be used interchangeablyhttps://developer.apple.com/wwdc20/10027
Presenter: Tylor Fox
UITableViewCell to display an image and some text.var content = cell.defaultContentConfiguration() This always returns a fresh configuration without any content set on it. Don't need to think about the old state at all.cell.contentConfiguration = content As soon as we call this, the cell is updated to display the image and text that we specified.automaticallyUpdatesContentConfiguration is true, The cell automatically calls updated(for:) on its contentConfiguration when the cell’s configurationState changes, and applies the updated configuration back to the cell. The default value is true.automaticallyUpdatesBackgroundConfiguration is true, the cell automatically calls updated(for:) on its backgroundConfiguration when the cell’s configurationState changes, and applies the updated configuration back to the cell. The default value is true.updateConfiguration(using:) to manually update and customize the content configuration, disable automatic updates by setting this property to false. This method is called before your cell first displays and will be called anytime the configuration state have changed.https://developer.apple.com/wwdc20/10028
Presenters: Nahir Khan, Neil Desai
Static (Workout widget) or Intent-Based (Reminder widget that can be personalized)systemSmall, systemMedium, systemLargeWidget and its body to WidgetConfigurationPlaceholder
Snapshot
Time line
TimelineProvider by struct Provider: TimelineProvider
func snapshot(...) and func timeline(...) for returning the respective dataatEnd, after(date: Date), neverWidgetCenter.[reloadTimelines(ofKind:), reloadAllTimelined] to programmatically reload time linesWidgetCenter.getCurrentConfigurations(completion:)
onBackgroundURLSessionEvents modifier to launch a network task which delivers the result to your extension
Intents framework, known from Siri, to customize the widgets behaviorIntentConfiguration is used to power intent-based widget configurationsIntentTimelineProvider is used to generate specific time linesTimelineEntryRelevance with its score and duration propertieshttps://developer.apple.com/wwdc20/10031
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10033
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10034
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10035
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10036
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10037
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10039
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10040
Presenters: Curt Clifton, Luca Bernardi, Raj Ramamurthy
@State private var config: ConfigObject() to re-render your view after config changed@Binding var configconfig down by marking the it as reference using the dollar symbol: SubView(config: $config)var objectWillChange: Self.ObjectWillChangePublisher { get }@Published var progress: Double@ObservedObject
@ObservedObject var config: Configuration$config.isFinished a Toggle control and let it automatically update your view@StateObject
ImageLoader: ObservableObject with a @published var image: Image property@StateObject changes the view is re-rendered and thus populated with the imageEnvironmentObject
.environmentObject(...) on your root viewonChange, onOpenURL, onContinueUserActivity - run on main thread@StateObjectApp and pass it down the view hierarchy. Changes to it will re-render all scenes (instances/windows) of your app@SceneStorage
@AppStorage
UserDefaults, usable anywhere (app/view)@AppStorage("amountOfGold") private var amountOfGold = 5000https://developer.apple.com/wwdc20/10041
Presenters: Matt Ricketson, Taylor Kelly
struct BookClubApp: AppWindowGroup to manage windows platform independent. Supports multiple windows on macOS and iPadOS out of the bosSettings to get a preference pane for free • available on macOSDocumentGroup scene type to automatically handle opening, saving and editing documents • macOS, iOS, iPadOSCommandMenu command to add additional menus to the menu bar including keyboard shortcutsLaunchScreen Info.plist key to configure your launch screen • simple alternative to the storyboardstruct YourWidget: Widget and var body: some WidgetConfigurationLazy[V|H]Stack) to reduce memory footprint and preserve smooth scrolling for large amounts of data.toolbar modifier for unified display of toolbarsToolbarItem(placement: .principal) to make an item prominentToolbarItem(placement: .bottomBar) to place an item in the bottom barLabel("Title", systemImage: "sf.symbol.name") SwiftUI automatically display icon and/or text depending on where the label is displayed: toolbar, list, ....keyboardShortcut modifier can now be used for additional controls like ButtonProgressView("Downloading", value: progress) - horizontal barProgressView("Downloading", value: progress).progressViewStyle(CircularViewStyle()) - circular progress indicatorProgressView() - spinnerGauge to indicate the level of value • can contain value labels and min/max value labels.matchedGeometryEffect to provide smooth animations inside of a grid of UI elements.clipShape(ContainerRelativeShape()) to automatically apply a super views shape to the subviewLink control to display URLs in link style and open them with the default browser • also supports url schemes to open other apps@Environment(\.openURL) private var openURL to programmatically open urls via openURL(url) in your viewsonDrag {} and onDrop {} to support drag & dropUniformTypeIdentifers framework for e.g. introspection of file typesSign in with Apple as first class component in SwiftUI • available on every platformhttps://developer.apple.com/wwdc20/10042
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10043
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10045
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10046
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10047
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10048
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10049
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10052
Presenters: Eric Dudiac, David Duncan
.preferredIndicatorImage(UIImage()) to set all or .setIndicatorImage(UIImage(), forPage: 0) for a specific image.backgroundStyle = .prominent to highlight the backgroundUIControlbutton.menu = UIMenu(...)button.showsMenuAsPrimaryAction = true and don't provide a primary actionUIControl.Event.menuActionTriggeredUIDeferredMenuElement to async provide menu itemsUIContextMenuInteraction to modify or replace provided menu updateVisibleMenu(_ block menu: (UIMenu) -> UIMenu)
UIContextMenuInteraction.rich to display previews and .compact to only show a menuUIBarButtonItem initializers init(systemItem:primaryAction:menu:), init(title:image:primaryAction:menu:)UIBarButtonItem .fixedSpace() and .flexibleSpaceUIButton can finally be initialized using an UIAction: init(type:primaryAction:) -> native block based APIUISegmentedControls can now finally be initialized using UIActions -> native block based APIhttps://developer.apple.com/wwdc20/10056
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10057
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10060
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10061
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10063
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10068
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10071
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10073
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10074
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10076
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10077
Presenter: Tanuja Mohan
XCTestMetrics and unit tests or for production apps using MetricsKit and Xcode OrganizerXCTOSSignpostMetric gives you the following when using an animation os_signpost interval:
os_signpost(.animationBegin, log: logHandle, name: "performanceAnimationInterval")os_signpost(.end, log: logHandle, name: "performanceAnimationInterval")XCTOSSignpostMetric.navigationTransitionMetricXCTOSSignpostMetric.customNavigationTransitionMetricXCTOSSignpostMetric.scrollDecelerationMetricXCTOSSignpostMetric.scrollDraggingMetricXCTMeasureOptions().invocationOptions = [.manualStop]https://developer.apple.com/wwdc20/10078
Presenter: Andy Aude
MXCPUExceptionDiagnosticBGProcessingTaskapplication(_:didFinishLaunchingWithOptions:)applicationDidEnterBackground(_:)applicationWillEnterForeground(_:)MXCrashDiagnosticUIApplication.beginBackgroundTask(expirationHandler:)UIApplication.endBackgroundTask(_:)MXBackgroundExitDatabeginBackgroundTask(withName:expirationHandler:)endBackgroundTask for your task in a timely manner to avoid this.)expirationHandlerendBackgroundTask(_:) inside the handlerMXMetricPayloadbackgroundTimeRemaining
UIBackgroundTaskIdentifierMXBackgroundExitData shows how often these terminations happen providing counts of each termination type
cumulativeBadAccessExitCountcumulativeIllegalInstructionExitCountcumulativeAbnormalExitCountcumulativeMemoryResourceLimitExitCountcumulativeMemoryPressureExitCountcumulativeSuspendedWithLockedFileExitCountcumulativeAppWatchdogExitCountcumulativeBackgroundTaskAssertionTimeoutExitCountcumulativeNormalExitCountMXCrashDiagnostic
https://developer.apple.com/wwdc20/10081
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10083
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10084
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10086
Presenter: Mark Mikin
https://developer.apple.com/wwdc20/10087
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10088
Presenters: JP Lacerda
https://developer.apple.com/wwdc20/10089
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10090
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10091
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10093
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10094
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10095
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10096
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10097
Presenters: Steve Breen
UICollectionView was first released in iOS 6UICollectionView was built on the separation of concerns between the data, or the "what"; from the layout, the "where" content is being rendered.UICollectionViewLayout, and a concrete subclass is UICollectionViewFlowLayout.UICollectionViewCell and UICollectionReusableView.UITableView-like sections right in to any UICollectionView.UITableView, like swipe actions and many common cell layouts.UICollectionViewListCell, header and footer supportUITableView standard cell types.https://developer.apple.com/wwdc20/10098
Presenter: Christopher Linn
[WKExtensionDelegate.handle(_ userActivity: NSUserActivity) -> Void](https://developer.apple.com/documentation/watchkit/wkextensiondelegate/2798966-handle) to handle Universal Links[WKExtension.shared().openSystemURL(url)](https://developer.apple.com/documentation/watchkit/wkextension/1628224-opensystemurl) to open Universal Links in other apps.onOpenURL { url in /* ... */ }@Environment (\.openURL) var openURL; let url = /* ... */; openURL(url)* matches zero or more characters greedily? matches any one character*? matches at least one character"components": [{ "/": "/sourdough/?*", "caseSensitive": false }] for case-insensitive pattern matching (macOS Catalina 10.15.5 and iOS 13.5)"components": [{ "/": "/中國哲學書電子化計劃/?*", "percentEncoded": false }] for Unicode pattern matching (macOS Big Sur and iOS 14)"defaults": { "percentEncoded": false, "caseSensitive": false } to specify defaults for all components (macOS Big Sur and iOS 14)
defaults to "details" (includes app IDs and components) or only to "components" to match all elements of the respective arrays$, (, )? and * but no other substitution variables$(alpha)* - match upper and lower case letters$(upper),$(lower)* - match either upper or lower case letters$(alnum)* - match upper and lower case letters including digits$(digit),$(xdigit)* - match either digits or hexadecimal digits$(region)** - match every ISO region code defined by Foundation: Locale.isoRegionCodes$(lang)** - match every ISO language code defined by Foundation: Locale.isoLanguageCodes"exclude": true to exclude specific patterns{
"appLinks": {
"substitutionVariables": {
"food": [ "burrito", "sushi" ],
"Canadian food": [ "burrito", "poutine", "tête-de-violon" ]
},
"details": [{
"appIDs": [ "ABCDEF.com..example.restaurant" ],
"components": [
{ "/": "$(lang)_CA/$(Canadian food)/", "percentEncoded": false }
{ "/": "$(lang)_CA/$(food)/", "exclude": true }
{ "/": "$(lang)_$(region)/$(food)/" }
]
}]
}
}
iOS Settings > Developer > Associated Domains Development or for macOS using the command swcutil developer-mode -e truehttps://example.com/.well-known/apple-app-site-association<string>applinks:testing.example.com?mode=developer</string> (or ?mode=managed or ?mode=developer+managed) in an array under the key com.apple.developer.associated-domainshttps://developer.apple.com/wwdc20/10099
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/101/
Wind Down which dims all distractions (also available in iPhone)https://developer.apple.com/wwdc20/10100
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10103
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10104
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10105
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10106
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10107
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10109
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10110
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10111
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10113
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10114
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10115
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10116
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10117
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10118
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10119
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10120
Presenters: Yongjun Zhang, Luming Yin
ASWebAuthenticationSession for other federated loginNSAppClipRequestLocationConfirmation with value true in your Info.plist to enable thisNSAppClipRequestEphemeralUserNotification with value true in your Info.plist to enable thisNotificationSettings, under the new .ephemeral statusAuthenticationServices API to sign your users in without showing a login screen (assuming they have already previously signed up in your website for instance)StoreKit SKOverlay in a view
ASAuthorizationAppleIDProvider to verify the user's session without prompting UIhttps://developer.apple.com/wwdc20/10138
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10139
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10140
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10142
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10143
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10145
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10146/
Presenters: Ada Chan, Luming Yin
_XCAppClipURL environment variable to launch App Clip from Xcodehttps://developer.apple.com/wwdc20/10147
Presenters: Boris Buegling
Xcode > File > Swift Packages > Add Package Dependency.package(url: "https://github.com/owner/package", from: "1.0.0").binaryTarget(name: "Emoji", url: https://example.com/Emoji/Emoji-1.0.0.xcframework.zip, checksum: "6d98....")File > New Swift Packageswift package compute-checksum Emoji-1.0.0.xcframework.zipBuild Libraries for Distribution build settingxcodebuild -create-xcframeworkhttps://developer.apple.com/wwdc20/10148
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10149
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10151
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10152
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10153
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10156
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10158
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10159
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10160
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10162
Presenter: Rachel Needle
https://developer.apple.com/wwdc20/10163
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10164
Presenters: Wil Addario-Turner
XCTSkip, be marked with an explicit "skip" result.XCTSkip, XCTSkipIf and XCTSkipUnless were introduced to allow skipping tests at runtime.throw XCTSkip("message") and the test will be skipped.XCTSkipIf skips when the expression is true. XCTSkipUnless skips when the expression is false.https://developer.apple.com/wwdc20/10165
Presenter: Holly Borla
https://developer.apple.com/wwdc20/10167
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10168
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10169
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10170
Presenters: Ted Kremenek, Kyle Macomber
NSUUID, NSString and float) and Swift (UUID, String, Float)if and guards@main: Type-Based Program Entry Points SE-0281
self to the capture listif let and switch@SceneBuilder is not longer needed)Float16 SE-0277
https://developer.apple.com/wwdc20/10171
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10172
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10173
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10174
Presenters: James Savage, Luming Yin
NutritionFacts dependency addedNSUserActivity
SKOverlay / AppStoreOverlayModifier (refer to What’s new with in-app purchase session)ASAuthorizationController for sign in or sign uphttps://developer.apple.com/wwdc20/10175
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10176
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10182
Presenter: Netra Kenkarey
HKElectrocardiogram (it represents a waveform as a series of voltage values)HKElectrocardiogram.Classification)
HKElectrocardiogram.SymptomsStatus)
HKQuantity?)HKQuantity?)Int)
HKElectrocardiogramQuery
HKElectrocardiogramQueryHKElectrocardiogramQuery with the fetched samplehttps://developer.apple.com/wwdc20/10184
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10185
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10188
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10189
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10190
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10194
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10197
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/102/
@main, @SceneBuilder, Settings, ...https://developer.apple.com/wwdc20/10200
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10204
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10205
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10206
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10207
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10209
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10210
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10214
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10216
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10217
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10219
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10220
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10221
Presenters: Sean Olszewski
executionTimeAllowance API to special case a particular test or subclass. For values under 60 seconds, they'll be rounded up to 60 seconds, the nearest whole minute.XCTest's performance APIs to automate testing for regressions in the performance. Use Instruments to identify what parts of your code are slow,https://developer.apple.com/wwdc20/10222
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10223
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10224
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10225
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10226
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10228
Presenter: Roger Pantos
https://developer.apple.com/wwdc20/10229
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10230
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10231
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10232
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10601
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10602
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10603
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10604
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10605
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10611
Presenters: Quinton Petty, Praveen Gowda
ARGeotrackingStatus
StateStateReasonaccuracy: low, medium, highgetGeoLocation(forPoint:)sceneDepth under frame semanticsdepthMap and confidenceMap providedCVPixelBufferARConfidenceLevel: high, medium or lowhttps://developer.apple.com/wwdc20/10612
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10613
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10614
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10615
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10616
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10617
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10618
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10619
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10621
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10631
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10632
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10633
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10634
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10635
Presenters: Jonathan Hersh, Allen Langmaier
CPMessageListItemUISceneCPListItemCPListImageRowItemhttps://developer.apple.com/wwdc20/10636
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10639
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10640
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10641
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10642
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10643
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10644
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10645
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10646
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10647
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10648
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10649
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10650
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10651
Presenter: Daniel Miao
App Clip Card. Tapping the card opens the app itself.App Clip Invocation Section on ASC you can provide titles and along with invocation URLs used in the App Clip<meta name="apple-itunes-app", content:"app-id=123456", app-clip-bundle-id:=org.appname.clip>Your own business or Other Businesses (e.g. Yelp)App Meta Data API
Power and Performance Metrics and Diagnostics APIhttps://developer.apple.com/wwdc20/10652
Presenters: Tobias Conradi, Justin Jia
PHPickerConfiguration (which can include type filters) is passed to PHPickerViewController, which has delegates to handle responsesPHPickerConfiguration
PHPickerViewController by using the configurationdidFinishPickingNSItemProvider - representation of the item, async, requires error handlingUIImageView with placeholder imagePHPickerConfiguration with images filter and selection limit (set to zero for unlimited selection)PHPickerViewController with this configurationdidFinishPicking
IndexingIterator<[NSItemProvider]> to save array of item providersAssetsLibrary will go away; switch to PhotoKitUIImagePickerController is to be deprecated and replaced with PHPickerViewControllerhttps://developer.apple.com/wwdc20/10653
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10654
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10655
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10656
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10657
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10658
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10659
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10660
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10661
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10662
Presenter: Stacey Abrams
.reload , .addMoney, .topUp, .order, .rent, .support, .contribute, .tip.automatic automatically switches between light and dark modePKIssuerProvisioningExtensionHandlerPKIssuerProvisioningExtensionAuthorizationProvidinghttps://developer.apple.com/wwdc20/10663
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10664
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10665
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10666
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10667
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10668
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10669
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10670
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10671
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10672
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10673
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10676
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10677
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10680
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10686
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10687
Presenters: Example Guy, Another Person
322 followers · starred Sep 2019
3,226 followers · starred Jun 2019
664 followers · starred Jun 2019
167 followers · starred Jun 2019
You don't have the time to watch all the WWDC session videos yourself? No problem me and many contributors extracted the gist for you 🥳
Shell
2,596
420 commits
updated Jan 22, 2025
Last years WWDC Session Notes was so successful that I decided to continue this form of WWDC session summary. I would like to take the moment to thank all of you for contribution, feedback, support and reading my session notes 🙏
Usually it is much faster to read through some bullet points instead of watching a 50 min session video. Then if you find something interesting you can still watch it.
Sessions that are exceptionally mentionable are highlighted using a ★.
This is work in progress since it is a lot of effort to watch all the videos by myself. So either please be patient or just open up an issue to make a suggestion which session notes you like to see next :)
Feel free to submit a PR if I got something wrong or you have a suggestion for improvement. Please also have a look in CONTRIBUTING.md if you want to contribute.
Thanks so much to EVERYBODY who contributed and improved the overall quality of the notes and those who added complete notes to the list.
This repo has already been mentioned many times on Twitter and apart from this also in the following places:
https://developer.apple.com/wwdc20/10004
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10005
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10006
Presenter: Matthias Lerch
https://developer.apple.com/wwdc20/10008
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10009
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10010
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10011
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10012
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10013
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10017
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10019
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10020
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10021
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10022
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10026
Presenters: Michael Ochs
UITableView-like appearances in UICollectionViewUICollectionView
preferredLayoutAttributesFittingAttributes: on cell subclasses to exercise manual sizingNSCollectionLayoutSection and UICollectionViewCompositionalLayout: check out Advances in Collection View Layout.sidebar and .sidebarPlain for building multicolumn apps on iPadOS 14UICollectionLayoutListConfigurationUICollectionViewCompositionalLayout with the configurationUICollectionLayoutListConfigurationNSCollectionLayoutSection with the configurationheaderMode to firstItemInSection (headers-only)
UICollectionViewCell, can be used interchangeablyhttps://developer.apple.com/wwdc20/10027
Presenter: Tylor Fox
UITableViewCell to display an image and some text.var content = cell.defaultContentConfiguration() This always returns a fresh configuration without any content set on it. Don't need to think about the old state at all.cell.contentConfiguration = content As soon as we call this, the cell is updated to display the image and text that we specified.automaticallyUpdatesContentConfiguration is true, The cell automatically calls updated(for:) on its contentConfiguration when the cell’s configurationState changes, and applies the updated configuration back to the cell. The default value is true.automaticallyUpdatesBackgroundConfiguration is true, the cell automatically calls updated(for:) on its backgroundConfiguration when the cell’s configurationState changes, and applies the updated configuration back to the cell. The default value is true.updateConfiguration(using:) to manually update and customize the content configuration, disable automatic updates by setting this property to false. This method is called before your cell first displays and will be called anytime the configuration state have changed.https://developer.apple.com/wwdc20/10028
Presenters: Nahir Khan, Neil Desai
Static (Workout widget) or Intent-Based (Reminder widget that can be personalized)systemSmall, systemMedium, systemLargeWidget and its body to WidgetConfigurationPlaceholder
Snapshot
Time line
TimelineProvider by struct Provider: TimelineProvider
func snapshot(...) and func timeline(...) for returning the respective dataatEnd, after(date: Date), neverWidgetCenter.[reloadTimelines(ofKind:), reloadAllTimelined] to programmatically reload time linesWidgetCenter.getCurrentConfigurations(completion:)
onBackgroundURLSessionEvents modifier to launch a network task which delivers the result to your extension
Intents framework, known from Siri, to customize the widgets behaviorIntentConfiguration is used to power intent-based widget configurationsIntentTimelineProvider is used to generate specific time linesTimelineEntryRelevance with its score and duration propertieshttps://developer.apple.com/wwdc20/10031
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10033
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10034
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10035
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10036
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10037
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10039
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10040
Presenters: Curt Clifton, Luca Bernardi, Raj Ramamurthy
@State private var config: ConfigObject() to re-render your view after config changed@Binding var configconfig down by marking the it as reference using the dollar symbol: SubView(config: $config)var objectWillChange: Self.ObjectWillChangePublisher { get }@Published var progress: Double@ObservedObject
@ObservedObject var config: Configuration$config.isFinished a Toggle control and let it automatically update your view@StateObject
ImageLoader: ObservableObject with a @published var image: Image property@StateObject changes the view is re-rendered and thus populated with the imageEnvironmentObject
.environmentObject(...) on your root viewonChange, onOpenURL, onContinueUserActivity - run on main thread@StateObjectApp and pass it down the view hierarchy. Changes to it will re-render all scenes (instances/windows) of your app@SceneStorage
@AppStorage
UserDefaults, usable anywhere (app/view)@AppStorage("amountOfGold") private var amountOfGold = 5000https://developer.apple.com/wwdc20/10041
Presenters: Matt Ricketson, Taylor Kelly
struct BookClubApp: AppWindowGroup to manage windows platform independent. Supports multiple windows on macOS and iPadOS out of the bosSettings to get a preference pane for free • available on macOSDocumentGroup scene type to automatically handle opening, saving and editing documents • macOS, iOS, iPadOSCommandMenu command to add additional menus to the menu bar including keyboard shortcutsLaunchScreen Info.plist key to configure your launch screen • simple alternative to the storyboardstruct YourWidget: Widget and var body: some WidgetConfigurationLazy[V|H]Stack) to reduce memory footprint and preserve smooth scrolling for large amounts of data.toolbar modifier for unified display of toolbarsToolbarItem(placement: .principal) to make an item prominentToolbarItem(placement: .bottomBar) to place an item in the bottom barLabel("Title", systemImage: "sf.symbol.name") SwiftUI automatically display icon and/or text depending on where the label is displayed: toolbar, list, ....keyboardShortcut modifier can now be used for additional controls like ButtonProgressView("Downloading", value: progress) - horizontal barProgressView("Downloading", value: progress).progressViewStyle(CircularViewStyle()) - circular progress indicatorProgressView() - spinnerGauge to indicate the level of value • can contain value labels and min/max value labels.matchedGeometryEffect to provide smooth animations inside of a grid of UI elements.clipShape(ContainerRelativeShape()) to automatically apply a super views shape to the subviewLink control to display URLs in link style and open them with the default browser • also supports url schemes to open other apps@Environment(\.openURL) private var openURL to programmatically open urls via openURL(url) in your viewsonDrag {} and onDrop {} to support drag & dropUniformTypeIdentifers framework for e.g. introspection of file typesSign in with Apple as first class component in SwiftUI • available on every platformhttps://developer.apple.com/wwdc20/10042
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10043
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10045
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10046
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10047
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10048
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10049
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10052
Presenters: Eric Dudiac, David Duncan
.preferredIndicatorImage(UIImage()) to set all or .setIndicatorImage(UIImage(), forPage: 0) for a specific image.backgroundStyle = .prominent to highlight the backgroundUIControlbutton.menu = UIMenu(...)button.showsMenuAsPrimaryAction = true and don't provide a primary actionUIControl.Event.menuActionTriggeredUIDeferredMenuElement to async provide menu itemsUIContextMenuInteraction to modify or replace provided menu updateVisibleMenu(_ block menu: (UIMenu) -> UIMenu)
UIContextMenuInteraction.rich to display previews and .compact to only show a menuUIBarButtonItem initializers init(systemItem:primaryAction:menu:), init(title:image:primaryAction:menu:)UIBarButtonItem .fixedSpace() and .flexibleSpaceUIButton can finally be initialized using an UIAction: init(type:primaryAction:) -> native block based APIUISegmentedControls can now finally be initialized using UIActions -> native block based APIhttps://developer.apple.com/wwdc20/10056
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10057
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10060
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10061
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10063
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10068
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10071
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10073
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10074
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10076
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10077
Presenter: Tanuja Mohan
XCTestMetrics and unit tests or for production apps using MetricsKit and Xcode OrganizerXCTOSSignpostMetric gives you the following when using an animation os_signpost interval:
os_signpost(.animationBegin, log: logHandle, name: "performanceAnimationInterval")os_signpost(.end, log: logHandle, name: "performanceAnimationInterval")XCTOSSignpostMetric.navigationTransitionMetricXCTOSSignpostMetric.customNavigationTransitionMetricXCTOSSignpostMetric.scrollDecelerationMetricXCTOSSignpostMetric.scrollDraggingMetricXCTMeasureOptions().invocationOptions = [.manualStop]https://developer.apple.com/wwdc20/10078
Presenter: Andy Aude
MXCPUExceptionDiagnosticBGProcessingTaskapplication(_:didFinishLaunchingWithOptions:)applicationDidEnterBackground(_:)applicationWillEnterForeground(_:)MXCrashDiagnosticUIApplication.beginBackgroundTask(expirationHandler:)UIApplication.endBackgroundTask(_:)MXBackgroundExitDatabeginBackgroundTask(withName:expirationHandler:)endBackgroundTask for your task in a timely manner to avoid this.)expirationHandlerendBackgroundTask(_:) inside the handlerMXMetricPayloadbackgroundTimeRemaining
UIBackgroundTaskIdentifierMXBackgroundExitData shows how often these terminations happen providing counts of each termination type
cumulativeBadAccessExitCountcumulativeIllegalInstructionExitCountcumulativeAbnormalExitCountcumulativeMemoryResourceLimitExitCountcumulativeMemoryPressureExitCountcumulativeSuspendedWithLockedFileExitCountcumulativeAppWatchdogExitCountcumulativeBackgroundTaskAssertionTimeoutExitCountcumulativeNormalExitCountMXCrashDiagnostic
https://developer.apple.com/wwdc20/10081
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10083
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10084
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10086
Presenter: Mark Mikin
https://developer.apple.com/wwdc20/10087
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10088
Presenters: JP Lacerda
https://developer.apple.com/wwdc20/10089
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10090
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10091
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10093
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10094
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10095
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10096
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10097
Presenters: Steve Breen
UICollectionView was first released in iOS 6UICollectionView was built on the separation of concerns between the data, or the "what"; from the layout, the "where" content is being rendered.UICollectionViewLayout, and a concrete subclass is UICollectionViewFlowLayout.UICollectionViewCell and UICollectionReusableView.UITableView-like sections right in to any UICollectionView.UITableView, like swipe actions and many common cell layouts.UICollectionViewListCell, header and footer supportUITableView standard cell types.https://developer.apple.com/wwdc20/10098
Presenter: Christopher Linn
[WKExtensionDelegate.handle(_ userActivity: NSUserActivity) -> Void](https://developer.apple.com/documentation/watchkit/wkextensiondelegate/2798966-handle) to handle Universal Links[WKExtension.shared().openSystemURL(url)](https://developer.apple.com/documentation/watchkit/wkextension/1628224-opensystemurl) to open Universal Links in other apps.onOpenURL { url in /* ... */ }@Environment (\.openURL) var openURL; let url = /* ... */; openURL(url)* matches zero or more characters greedily? matches any one character*? matches at least one character"components": [{ "/": "/sourdough/?*", "caseSensitive": false }] for case-insensitive pattern matching (macOS Catalina 10.15.5 and iOS 13.5)"components": [{ "/": "/中國哲學書電子化計劃/?*", "percentEncoded": false }] for Unicode pattern matching (macOS Big Sur and iOS 14)"defaults": { "percentEncoded": false, "caseSensitive": false } to specify defaults for all components (macOS Big Sur and iOS 14)
defaults to "details" (includes app IDs and components) or only to "components" to match all elements of the respective arrays$, (, )? and * but no other substitution variables$(alpha)* - match upper and lower case letters$(upper),$(lower)* - match either upper or lower case letters$(alnum)* - match upper and lower case letters including digits$(digit),$(xdigit)* - match either digits or hexadecimal digits$(region)** - match every ISO region code defined by Foundation: Locale.isoRegionCodes$(lang)** - match every ISO language code defined by Foundation: Locale.isoLanguageCodes"exclude": true to exclude specific patterns{
"appLinks": {
"substitutionVariables": {
"food": [ "burrito", "sushi" ],
"Canadian food": [ "burrito", "poutine", "tête-de-violon" ]
},
"details": [{
"appIDs": [ "ABCDEF.com..example.restaurant" ],
"components": [
{ "/": "$(lang)_CA/$(Canadian food)/", "percentEncoded": false }
{ "/": "$(lang)_CA/$(food)/", "exclude": true }
{ "/": "$(lang)_$(region)/$(food)/" }
]
}]
}
}
iOS Settings > Developer > Associated Domains Development or for macOS using the command swcutil developer-mode -e truehttps://example.com/.well-known/apple-app-site-association<string>applinks:testing.example.com?mode=developer</string> (or ?mode=managed or ?mode=developer+managed) in an array under the key com.apple.developer.associated-domainshttps://developer.apple.com/wwdc20/10099
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/101/
Wind Down which dims all distractions (also available in iPhone)https://developer.apple.com/wwdc20/10100
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10103
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10104
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10105
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10106
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10107
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10109
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10110
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10111
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10113
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10114
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10115
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10116
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10117
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10118
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10119
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10120
Presenters: Yongjun Zhang, Luming Yin
ASWebAuthenticationSession for other federated loginNSAppClipRequestLocationConfirmation with value true in your Info.plist to enable thisNSAppClipRequestEphemeralUserNotification with value true in your Info.plist to enable thisNotificationSettings, under the new .ephemeral statusAuthenticationServices API to sign your users in without showing a login screen (assuming they have already previously signed up in your website for instance)StoreKit SKOverlay in a view
ASAuthorizationAppleIDProvider to verify the user's session without prompting UIhttps://developer.apple.com/wwdc20/10138
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10139
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10140
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10142
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10143
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10145
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10146/
Presenters: Ada Chan, Luming Yin
_XCAppClipURL environment variable to launch App Clip from Xcodehttps://developer.apple.com/wwdc20/10147
Presenters: Boris Buegling
Xcode > File > Swift Packages > Add Package Dependency.package(url: "https://github.com/owner/package", from: "1.0.0").binaryTarget(name: "Emoji", url: https://example.com/Emoji/Emoji-1.0.0.xcframework.zip, checksum: "6d98....")File > New Swift Packageswift package compute-checksum Emoji-1.0.0.xcframework.zipBuild Libraries for Distribution build settingxcodebuild -create-xcframeworkhttps://developer.apple.com/wwdc20/10148
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10149
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10151
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10152
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10153
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10156
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10158
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10159
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10160
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10162
Presenter: Rachel Needle
https://developer.apple.com/wwdc20/10163
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10164
Presenters: Wil Addario-Turner
XCTSkip, be marked with an explicit "skip" result.XCTSkip, XCTSkipIf and XCTSkipUnless were introduced to allow skipping tests at runtime.throw XCTSkip("message") and the test will be skipped.XCTSkipIf skips when the expression is true. XCTSkipUnless skips when the expression is false.https://developer.apple.com/wwdc20/10165
Presenter: Holly Borla
https://developer.apple.com/wwdc20/10167
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10168
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10169
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10170
Presenters: Ted Kremenek, Kyle Macomber
NSUUID, NSString and float) and Swift (UUID, String, Float)if and guards@main: Type-Based Program Entry Points SE-0281
self to the capture listif let and switch@SceneBuilder is not longer needed)Float16 SE-0277
https://developer.apple.com/wwdc20/10171
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10172
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10173
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10174
Presenters: James Savage, Luming Yin
NutritionFacts dependency addedNSUserActivity
SKOverlay / AppStoreOverlayModifier (refer to What’s new with in-app purchase session)ASAuthorizationController for sign in or sign uphttps://developer.apple.com/wwdc20/10175
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10176
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10182
Presenter: Netra Kenkarey
HKElectrocardiogram (it represents a waveform as a series of voltage values)HKElectrocardiogram.Classification)
HKElectrocardiogram.SymptomsStatus)
HKQuantity?)HKQuantity?)Int)
HKElectrocardiogramQuery
HKElectrocardiogramQueryHKElectrocardiogramQuery with the fetched samplehttps://developer.apple.com/wwdc20/10184
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10185
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10188
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10189
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10190
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10194
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10197
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/102/
@main, @SceneBuilder, Settings, ...https://developer.apple.com/wwdc20/10200
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10204
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10205
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10206
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10207
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10209
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10210
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10214
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10216
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10217
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10219
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10220
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10221
Presenters: Sean Olszewski
executionTimeAllowance API to special case a particular test or subclass. For values under 60 seconds, they'll be rounded up to 60 seconds, the nearest whole minute.XCTest's performance APIs to automate testing for regressions in the performance. Use Instruments to identify what parts of your code are slow,https://developer.apple.com/wwdc20/10222
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10223
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10224
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10225
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10226
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10228
Presenter: Roger Pantos
https://developer.apple.com/wwdc20/10229
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10230
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10231
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10232
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10601
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10602
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10603
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10604
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10605
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10611
Presenters: Quinton Petty, Praveen Gowda
ARGeotrackingStatus
StateStateReasonaccuracy: low, medium, highgetGeoLocation(forPoint:)sceneDepth under frame semanticsdepthMap and confidenceMap providedCVPixelBufferARConfidenceLevel: high, medium or lowhttps://developer.apple.com/wwdc20/10612
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10613
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10614
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10615
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10616
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10617
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10618
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10619
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10621
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10631
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10632
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10633
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10634
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10635
Presenters: Jonathan Hersh, Allen Langmaier
CPMessageListItemUISceneCPListItemCPListImageRowItemhttps://developer.apple.com/wwdc20/10636
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10639
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10640
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10641
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10642
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10643
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10644
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10645
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10646
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10647
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10648
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10649
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10650
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10651
Presenter: Daniel Miao
App Clip Card. Tapping the card opens the app itself.App Clip Invocation Section on ASC you can provide titles and along with invocation URLs used in the App Clip<meta name="apple-itunes-app", content:"app-id=123456", app-clip-bundle-id:=org.appname.clip>Your own business or Other Businesses (e.g. Yelp)App Meta Data API
Power and Performance Metrics and Diagnostics APIhttps://developer.apple.com/wwdc20/10652
Presenters: Tobias Conradi, Justin Jia
PHPickerConfiguration (which can include type filters) is passed to PHPickerViewController, which has delegates to handle responsesPHPickerConfiguration
PHPickerViewController by using the configurationdidFinishPickingNSItemProvider - representation of the item, async, requires error handlingUIImageView with placeholder imagePHPickerConfiguration with images filter and selection limit (set to zero for unlimited selection)PHPickerViewController with this configurationdidFinishPicking
IndexingIterator<[NSItemProvider]> to save array of item providersAssetsLibrary will go away; switch to PhotoKitUIImagePickerController is to be deprecated and replaced with PHPickerViewControllerhttps://developer.apple.com/wwdc20/10653
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10654
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10655
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10656
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10657
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10658
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10659
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10660
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10661
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10662
Presenter: Stacey Abrams
.reload , .addMoney, .topUp, .order, .rent, .support, .contribute, .tip.automatic automatically switches between light and dark modePKIssuerProvisioningExtensionHandlerPKIssuerProvisioningExtensionAuthorizationProvidinghttps://developer.apple.com/wwdc20/10663
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10664
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10665
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10666
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10667
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10668
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10669
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10670
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10671
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10672
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10673
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10676
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10677
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10680
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10686
Presenters: Example Guy, Another Person
https://developer.apple.com/wwdc20/10687
Presenters: Example Guy, Another Person
322 followers · starred Sep 2019
3,226 followers · starred Jun 2019
664 followers · starred Jun 2019
167 followers · starred Jun 2019