GitRead 中文社区
首页趋势排行榜原创文章严选周刊
更多资源
新手训练营
精选专题热门话题GitHub 文档资源精选实战指南

WWDC

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
  • 默认分支main
  • 大小1.0 MB
  • 更新2025年1月23日
  • Issues1
在 GitHub 打开
avatarBlackjacx

项目介绍

Blackjacx/WWDC 是一个托管在 GitHub 上的开源项目,主要使用 Shell 编写,采用 MIT License 许可证,目前获得 2.6k 个 Star、134 次 Fork。

仓库全名
Blackjacx/WWDC

README 摘要

WWDC 2020 Session Notes Thank You 🎉 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 🙏 Intro 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…

完整内容见 GitHub 原始 README 或本页 。

常见问题

WWDC 用什么语言开发?

主要使用 Shell 编写,采用 MIT License 许可证,目前有 2.6k 个 Star。

WWDC 可以免费商用吗?

仓库采用 MIT License 许可证,可免费使用与修改,商业使用请遵守许可证条款(例如保留版权声明与许可声明)。

如何获取 WWDC 的源码?

可以直接克隆仓库:git clone https://github.com/Blackjacx/WWDC.git,默认分支为 main;安装与运行步骤见仓库 README。

WWDC 最近还在维护吗?

仓库最近一次更新为 2025年1月23日,当前有 1 个未关闭 Issue;Star 数为 2.6k,可作为社区活跃度的参考。

本页面展示项目元数据与原始 README,GitRead 中文社区 编辑团队负责选题收录。

相关仓库

mattpocock/skills avatar
skillsmattpocock
7 小时前
319.6k
26.8k
229

面向真正工程师的技能。直接来自我的 .agents 目录。

Shell
2.2 MB
1
详情
obra/superpowers avatar
superpowersobra
5 天前
315.1k
28.0k
345

一套行之有效的智能体技能框架与软件开发方法论。

aibrainstormingcoding+5
Shell
7.9 MB
6
详情
ohmyzsh/ohmyzsh avatar
ohmyzshohmyzsh
8 小时前
190.4k
26.7k
82

一个令人愉悦、由社区驱动(拥有 2,500 多名贡献者)的框架,用于管理你的 zsh 配置。包含 300 多个可选插件(rails、git、macOS、hub、docker、homebrew、node、php、python 等)、140 多个主题,为你的早晨增添乐趣,以及一个自动更新工具,便于跟进社区的最新更新。

clicli-appoh-my-zsh+12
Shell
14.0 MB
0
详情
msitarzewski/agency-agents avatar
agency-agentsmsitarzewski
20 小时前
167.5k
27.2k
233

触手可及的完整 AI 机构——从前端奇才到 Reddit 社区忍者,从灵感注入者到现实校验者。每位智能体都是具备个性、流程和成熟交付成果的专项专家。

Shell
5.2 MB
0
详情
d3/d3 avatar
d3d3
6 天前
113.9k
22.4k
4

用 SVG、Canvas 和 HTML 让数据栩栩如生。

visualizationdata-visualizationcharts+3
Shell
58.0 MB
0
详情
papers-we-love/papers-we-love avatar
papers-we-lovepapers-we-love
1 周前
111.3k
6.2k
3

计算机科学界可供阅读和讨论的论文。

computer-scienceread-papersmeetup+4
Shell
225.4 MB
0
详情
nvm-sh/nvm avatar
nvmnvm-sh
5 天前
95.8k
10.7k
374

Node Version Manager - 符合 POSIX 的 bash 脚本,用于管理多个活跃的 node.js 版本。

bashinstalllts+10
Shell
5.0 MB
0
详情
tw93/Mole avatar
Moletw93
5 小时前
74.4k
2.7k
2

让你的 Mac 和 PC 保持干净、轻快,运行如新。快速的开源 CLI,以及原生 Mac 和 Windows 应用。

analyzerappcleanerclean+17
Shell
321.8 MB
0
详情

关于

appleauthenticationdarkmodedesignhacktoberfestiosipadmacosnetworkingnfcsafarisecuritysessionswiftswiftuitvosvideoswatchoswwdc
  • MIT License
  • 2.6k Stars
  • 134 Forks
  • 69 Watching

简要分析

热度分
2934
价值分
1605
活跃状态
活跃
GitHub

语言占比

Shell

贡献者

BlackjacxBlackjacxrogerluanrogerluanatereshkovatereshkovgerrietgerrietbelowbelowsoucollinesoucollinemcicheckimcicheckispeedoholicspeedoholicmatthewspearmatthewspeartrav-matrav-masusuLiangsusuLiangprotocorn93protocorn93

Twitter Follow Donate

WWDC 2020 Session Notes

Thank You 🎉

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 🙏

Intro

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 :)

Contribution

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.

Mentions

This repo has already been mentioned many times on Twitter and apart from this also in the following places:

  • iOS Dev Weekly Issue 409
  • iOS Goodies Issue 287
  • Swift Developments Issue 189
  • WWDCNotes

Interesting WWDC-Related Links

  • Apple Developer Documentation by @Apple
  • Xcode Release Notes
  • iOS & iPadOS Release Notes

Table of Contents

Progress

  1. (TO-DO) Expanding automation with the App Store Connect API
  2. (TO-DO) What’s new in assessment
  3. Introducing Car Keys
  4. (TO-DO) Optimize the Core Image pipeline for your video app
  5. (TO-DO) Edit and play back HDR video with AVFoundation
  6. (TO-DO) Export HDR media in your app with AVFoundation
  7. (TO-DO) Author fragmented MPEG-4 content with AVAssetWriter
  8. (TO-DO) Discover ray tracing with Metal
  9. (TO-DO) Get to know Metal function pointers
  10. (TO-DO) Core Data: Sundries and maxims
  11. (TO-DO) App accessibility for Switch Control
  12. (TO-DO) Make your app visually accessible
  13. (TO-DO) Build Metal-based Core Image kernels with Xcode
  14. (TO-DO) Create a seamless speech experience in your apps
  15. Lists in UICollectionView
  16. Modern cell configuration
  17. Meet WidgetKit
  18. (TO-DO) Stacks, Grids, and Outlines in SwiftUI
  19. (TO-DO) Build SwiftUI views for widgets
  20. (TO-DO) Widgets Code-along, part 1: The adventure begins
  21. (TO-DO) Widgets Code-along, part 2: Alternate timelines
  22. (TO-DO) Widgets Code-along, part 3: Advancing timelines
  23. (TO-DO) App essentials in SwiftUI
  24. (TO-DO) Build document-based apps in SwiftUI
  25. Data Essentials in SwiftUI
  26. What’s new in SwiftUI
  27. (TO-DO) Build SwiftUI apps for tvOS
  28. (TO-DO) Build an Action Classifier with Create ML
  29. (TO-DO) Advances in diffable data sources
  30. (TO-DO) Create complications for Apple Watch
  31. (TO-DO) Enable encrypted DNS
  32. (TO-DO) Build complications in SwiftUI
  33. (TO-DO) Keep your complications up to date
  34. Build with iOS pickers, menus and actions
  35. (TO-DO) Optimize the interface of your Mac Catalyst app
  36. (TO-DO) Identify trends with the Power and Performance API
  37. (TO-DO) Design high quality Siri media interactions
  38. (TO-DO) Expand your SiriKit Media Intents to more platforms
  39. (TO-DO) Background execution demystified
  40. (TO-DO) What’s new in SiriKit and Shortcuts
  41. (TO-DO) Evaluate and optimize voice interaction for your app
  42. (TO-DO) Empower your intents
  43. (TO-DO) Decipher and deal with common Siri errors
  44. (TO-DO) Diagnose performance issues with the Xcode Organizer
  45. Eliminate animation hitches with XCTest
  46. Why is my app getting killed?
  47. (TO-DO) What’s new in MetricKit
  48. (TO-DO) Integrate your app with Wind Down
  49. (TO-DO) Feature your actions in the Shortcuts app
  50. Design for intelligence: Apps, evolved
  51. (TO-DO) Design for intelligence: Make friends with “The System”
  52. Design for intelligence: Discover new opportunities
  53. (TO-DO) Discover Core Image debugging techniques
  54. (TO-DO) Decode ProRes with AVFoundation and VideoToolbox
  55. (TO-DO) Write tests to fail
  56. (TO-DO) Build for the iPadOS pointer
  57. (TO-DO) Handle trackpad and mouse input
  58. (TO-DO) The Push Notifications primer
  59. (TO-DO) Explore Packages and Projects with Xcode Playgrounds
  60. Advances in UICollectionView
  61. What’s new in Universal Links
  62. (TO-DO) Explore the Action & Vision app
  63. Keynote ★
  64. (TO-DO) Meet Watch Face Sharing
  65. (TO-DO) Design great widgets
  66. (TO-DO) Adopt the new look of macOS
  67. (TO-DO) Build for iPad
  68. (TO-DO) Meet Scribble for iPad
  69. (TO-DO) What’s new in PencilKit
  70. (TO-DO) Support hardware keyboards in your app
  71. (TO-DO) Support local network privacy in your app
  72. (TO-DO) Boost performance and security with modern networking
  73. (TO-DO) Build local push connectivity for restricted networks
  74. (TO-DO) iPad and iPhone apps on Apple Silicon Macs
  75. (TO-DO) AutoFill everywhere
  76. (TO-DO) VoiceOver efficiency with custom rotors
  77. (TO-DO) Accessibility design for Mac Catalyst
  78. (TO-DO) Create app clips for other businesses
  79. (TO-DO) Introduction to SwiftUI
  80. Streamline your app clip
  81. (TO-DO) Discover AppleSeed for IT and Managed Software Updates
  82. (TO-DO) Leverage enterprise identity and authentication
  83. (TO-DO) Build location-aware enterprise apps
  84. (TO-DO) Build scalable enterprise app suites
  85. (TO-DO) What’s new in Mac Catalyst
  86. (TO-DO) Design for Game Center
  87. Configure and link your app clips
  88. Distribute binary frameworks as Swift packages
  89. (TO-DO) Inspect, modify, and construct PencilKit drawings
  90. (TO-DO) Structure your app for SwiftUI previews
  91. (TO-DO) What’s new in CareKit
  92. (TO-DO) Use model deployment and security with Core ML
  93. (TO-DO) Get models on device using Core ML Converters
  94. (TO-DO) Control training in Create ML with Swift
  95. (TO-DO) Deliver a better HLS audio experience
  96. (TO-DO) Build an Endpoint Security app
  97. (TO-DO) Formatters: Make data human-friendly
  98. Design for location privacy
  99. (TO-DO) Advancements in the Objective-C runtime
  100. XCTSkip your tests
  101. Embrace Swift type inference
  102. (TO-DO) Safely manage pointers in Swift
  103. (TO-DO) Explore logging in Swift
  104. (TO-DO) Swift packages: Resources and localization
  105. What’s new in Swift
  106. (TO-DO) What’s new in watchOS design
  107. (TO-DO) Design great app clips
  108. (TO-DO) Get the most out of Sign in with Apple
  109. Explore app clips
  110. (TO-DO) The details of UI typography
  111. (TO-DO) Master Picture in Picture on tvOS
  112. What’s new in HealthKit
  113. (TO-DO) Synchronize health data with HealthKit
  114. (TO-DO) Visually edit SwiftUI views
  115. (TO-DO) Discover WKWebView enhancements
  116. (TO-DO) Secure your app: threat modeling and anti-patterns
  117. (TO-DO) Create quick interactions with Shortcuts on watchOS
  118. (TO-DO) Add configuration and intelligence to your widgets
  119. (TO-DO) Broaden your reach with Siri Event Suggestions
  120. Platform State of the Union ★
  121. (TO-DO) Design for intelligence: Meet people where they are
  122. (TO-DO) Create great enterprise apps: A chat with Box’s Aaron Levie
  123. (TO-DO) Design with iOS pickers, menus and actions
  124. (TO-DO) Design for iPad
  125. (TO-DO) SF Symbols 2
  126. (TO-DO) What’s new in Core NFC
  127. (TO-DO) Modernize PCI and SCSI drivers with DriverKit
  128. (TO-DO) Port your Mac app to Apple Silicon
  129. (TO-DO) What’s new in ResearchKit
  130. (TO-DO) Explore numerical computing in Swift
  131. (TO-DO) Build localization-friendly layouts using Xcode
  132. (TO-DO) Handle interruptions and alerts in UI tests
  133. Get your test results faster
  134. (TO-DO) Create custom apps for employees
  135. (TO-DO) Deploy Apple devices using zero-touch
  136. (TO-DO) Meet Audio Workgroups
  137. (TO-DO) Improve stream authoring with HLS Tools
  138. (TO-DO) Record stereo audio with AVAudioSession
  139. What’s new in Low-Latency HLS
  140. (TO-DO) Discover HLS Blocking Preload Hints
  141. (TO-DO) Optimize live streams with HLS Playlist Delta Updates
  142. (TO-DO) Reduce latency with HLS Blocking Playlist Reload
  143. (TO-DO) Adapt ad insertion to Low-Latency HLS
  144. (TO-DO) The artist’s AR toolkit
  145. (TO-DO) Harness Apple GPUs with Metal
  146. (TO-DO) Optimize Metal apps and games with GPU counters
  147. (TO-DO) Shop online with AR Quick Look
  148. (TO-DO) Gain insights into your Metal app with Xcode 12
  149. Explore ARKit 4
  150. (TO-DO) What’s new in RealityKit
  151. (TO-DO) What’s new in USD
  152. (TO-DO) Advancements in Game Controllers
  153. (TO-DO) Build GPU binaries with Metal
  154. (TO-DO) Debug GPU-side errors in Metal
  155. (TO-DO) Bring keyboard and mouse gaming to iPad
  156. (TO-DO) Tap into Game Center: Dashboard, Access Point, and Profile
  157. (TO-DO) Tap into Game Center: Leaderboards, Achievements, and Multiplayer
  158. (TO-DO) Support performance-intensive apps and games
  159. (TO-DO) Bring your Metal app to Apple Silicon Macs
  160. (TO-DO) Optimize Metal Performance for Apple Silicon Macs
  161. (TO-DO) Capture and stream apps on the Mac with ReplayKit
  162. (TO-DO) Discover search suggestions for Apple TV
  163. Accelerate your app with CarPlay
  164. (TO-DO) What’s new in streaming audio for Apple Watch
  165. (TO-DO) What’s new in managing Apple devices
  166. (TO-DO) Design for the iPadOS pointer
  167. (TO-DO) Handle the Limited Photos Library in your app
  168. (TO-DO) Build Image and Video Style Transfer models in Create ML
  169. (TO-DO) Build a SwiftUI view in Swift Playgrounds
  170. (TO-DO) Use Swift on AWS Lambda with Xcode
  171. (TO-DO) Support multiple users in your tvOS app
  172. (TO-DO) What’s new in Web Inspector
  173. (TO-DO) Become a Simulator expert
  174. (TO-DO) Unsafe Swift
  175. (TO-DO) Add custom views and modifiers to the Xcode Library
  176. (TO-DO) Sync a Core Data store with the CloudKit public database
  177. What’s new in App Store Connect
  178. Meet the new Photos picker
  179. (TO-DO) Detect Body and Hand Pose with Vision
  180. (TO-DO) Create Swift Playgrounds content for iPad and Mac
  181. (TO-DO) Discover how to download and play HLS offline
  182. (TO-DO) Beyond counting steps
  183. (TO-DO) Make apps smarter with Natural Language
  184. (TO-DO) What’s new in education
  185. (TO-DO) Introducing StoreKit Testing in Xcode
  186. (TO-DO) What’s new in location
  187. (TO-DO) What’s new with in-app purchase
  188. What’s new in Wallet and Apple Pay
  189. (TO-DO) What’s new for web developers
  190. (TO-DO) Getting started with HealthKit
  191. (TO-DO) Meet Safari Web Extensions
  192. (TO-DO) One-tap account security upgrades
  193. (TO-DO) Custom app distribution with Apple Business Manager
  194. (TO-DO) Meet Nearby Interaction
  195. (TO-DO) Handling FHIR without getting burned
  196. (TO-DO) Meet Face ID and Touch ID for the web
  197. (TO-DO) Architecting for subscriptions
  198. (TO-DO) What’s new in ClassKit
  199. (TO-DO) Explore Computer Vision APIs
  200. (TO-DO) Build trust through better privacy
  201. (TO-DO) Build customized ML models with the Metal Performance Shaders Graph
  202. (TO-DO) Refine Objective-C frameworks for Swift
  203. (TO-DO) Explore the new system architecture of Apple Silicon Macs
  204. (TO-DO) Triage test failures with XCTIssue

Expanding automation with the App Store Connect API

https://developer.apple.com/wwdc20/10004

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

What’s new in assessment

https://developer.apple.com/wwdc20/10005

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Introducing Car Keys

https://developer.apple.com/wwdc20/10006

Presenter: Matthias Lerch

  • People can unlock, lock and start their car (iPhone or Apple Watch)
  • Stored securely on the device and can be deleted via iCloud
  • Keys can be shared with the family or friends
  • Agnostic to radio technology (supports NFC so far)
  • Offline capable
  • Car needs to support:
    • Owner pairing (association if iPhone and car)
      • Prove ownership of car
      • Initiate pairing
      • Place iPhone near car’s NFC reader
      • Car key appears in Wallet
    • Transactions (unlock, lock, start the car)
      • NFC readers in door handle and dashboard (engine start)
      • Optimized for security and performance
      • Express mode lets the feature work without Face ID or passcode (turned on by default)
      • iPhone and car can be offline
      • Apple doesn’t know when you use your car
    • Server Interfaces (key sharing, key management)
      • Share keys over Messages
      • Car can be offline when sharing
      • Apple doesn’t know who you share your car key with
      • Optional access levels (e.g. ‘Unlock and Drive’, ‘Access and drive up to 65 mph’)
      • It’s up to each auto maker to define access levels
  • Key management
    • Manage owner and shared keys from iPhone or car
    • Keys removed from a device stop working immediately (even if the device is offline)
    • Easy to change owner device (e.g. when buying a new iPhone)
  • System architecture
    • Fully integrated into iOS natively
    • Keys created and stored in Secure Elements and never exported
    • All features use AES and eliptic-curve cryptography
    • Offline design based on PKI
    • Automaker TSM (Trusted Service Manager) not required for simple server integration
    • What is a digital car key?
      • Binded to the user’s device and not to Apple or auto makers
      • Private key (SK) never leaves SE (Secure Element)
      • Public key is exported in an X.509 certificate for verification
      • Applet
        • Implements the car key in the Secure Element
        • Stores key pair, car public key, secure mailboxes
        • All car keys hosted in a single applet instance
      • Owner pairing flow (online)
        1. PAKE Verifier
        2. Pairing password
        3. Pairing
        4. Cryptographic linking
        5. Key activation/registration
        6. Key attestation
      • Key sharing flow
        1. Owner sends invitation using Messages
        2. New key crated in
        3. Identity certificate chain
        4. Owner verification
        5. Attestation returned
        6. Offline registration
      • Lifecycle of a car key
        • Created during owner pairing or key sharing
        • Transactions
        • Suspensions
        • Revocation
        • Deletion
      • Certificates and Transaction
        • Owner sharing, key sharing, fast and standard transactions
        • Take a deeper look at the presented flows and schemes at 11:30
  • Radio technologies
    • NFC
      • Based on standard NFC reader
      • Enhanced Contactless Protocol (ECP)
      • Enables a fully automatic NFC experience
      • Identifiers available before transaction starts (Reader type, Automaker)
      • Efficient reader polling
    • Ultra Wideband
      • iPhone with U1 chip
      • Use with iPhone in bag or pocket
      • Common key management architecture
      • Specification is currently in development
  • Server integration
    • Required for remote key management
    • Auto maker server needs to establish connection to Apple’s backend (for each environment, e.g. testing and production)
    • Exchange certificates
    • Implement and test server interfaces (register a new key, revoke keys, send notifications)
    • Provide artwork
    • Connect to automaker app
  • Automaker apps
    • Provide custom features using keys stored in Wallet
    • Start owner pairing
    • Available to automakers
    • Entitlement is required
    • Use PassKit APIs
  • How to get started (for auto makers)
    • Car Connectivity Consortium
    • Digital Key Specification 2.0
    • Digital Key Specification 3.0 (in development, will support Ultra Wideband)
    • carconnectivity.org
    • Entroll to Apple MFi Program

Optimize the Core Image pipeline for your video app

https://developer.apple.com/wwdc20/10008

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Edit and play back HDR video with AVFoundation

https://developer.apple.com/wwdc20/10009

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Export HDR media in your app with AVFoundation

https://developer.apple.com/wwdc20/10010

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Author fragmented MPEG-4 content with AVAssetWriter

https://developer.apple.com/wwdc20/10011

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Discover ray tracing with Metal

https://developer.apple.com/wwdc20/10012

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Get to know Metal function pointers

https://developer.apple.com/wwdc20/10013

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Core Data: Sundries and maxims

https://developer.apple.com/wwdc20/10017

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

App accessibility for Switch Control

https://developer.apple.com/wwdc20/10019

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Make your app visually accessible

https://developer.apple.com/wwdc20/10020

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Build Metal-based Core Image kernels with Xcode

https://developer.apple.com/wwdc20/10021

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Create a seamless speech experience in your apps

https://developer.apple.com/wwdc20/10022

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Lists in UICollectionView

https://developer.apple.com/wwdc20/10026

Presenters: Michael Ochs

  • Lists in iOS 14 Collection Views present UITableView-like appearances in UICollectionView
  • Improved self-sizing support: now default when using lists in UICollectionView
    • Build cells with AutoLayout and let collection view take over
    • Override preferredLayoutAttributesFittingAttributes: on cell subclasses to exercise manual sizing
  • UICollectionLayoutListConfiguration
    • The only new type required on the layout side to build lists in collection view
    • Built on top of NSCollectionLayoutSection and UICollectionViewCompositionalLayout: check out Advances in Collection View Layout
    • Adds two list-exclusive styles: .sidebar and .sidebarPlain for building multicolumn apps on iPadOS 14
    • Options to show/hide separators and configure list headers/footers
  • Creating lists
    • Easy way
      1. Create a UICollectionLayoutListConfiguration
      2. Create a UICollectionViewCompositionalLayout with the configuration
    • Per-section setup
      1. Create a UICollectionLayoutListConfiguration
      2. Create a NSCollectionLayoutSection with the configuration
      3. Place the above code inside existing section provider initializer on compositional layout
      4. Customize the layout on a per section basis
  • Configuring list section headers/footers
    • List headers/footers have to be explicitly enabled
      • Register headers/footers as supplementary views
        • Set header/footer configuration mode to ‘supplementary’
        • Provide a supplementary view when rendering the header/footer on screen
      • Set headerMode to firstItemInSection (headers-only)
        • Configure the first collection view cell to look like a header
        • Recommended for hierarchical data structures and snapshot APIs: check out Advances in Diffable Data Source
        • Data source need to be aware of first cell being header
  • UICollectionViewListCell
    • Subclass of UICollectionViewCell, can be used interchangeably
    • Better support to configure separator insets and cell content indentations
    • Features Swipe Actions
    • Better accessories API
    • Granted access to default system content/background configurations: check out Modern Cell Configuration
  • Separator Layout Guide
    • Separators are supposed to line up with primary cell content
    • Constrain this layout guide to the content: opposite of UIKit layout guides
      1. Configure the cell’s layout
      2. Constrain the separator layout guide’s leading anchor to cell’s primary content’s leading anchor
    • Automatically handled when using system provided content configurations
  • Swipe Actions
    • Only supported if the cell is rendered inside sections configured using a list configuration
    • Override the leading/trailing swipe action’s configuration getter to configure
    • Caution: never capture the index path (unstable) of the cell being configured in action handler
      • Directly capture the data model
      • Capture a stable identifier of the cell:
        • Diffable Data Source and its stable item identifier
        • The new cell registration type in iOS 14: UICollectionViewListCell
  • Accessories API of list cells
    • Options to configure both leading and trailing side of the cell
    • Configure multiple accessories on the same side
    • Functionalities on list cell accessories
      • Re-ordering accessory: cell is automatically in re-rodering mode when tapped
      • Delete accessory: cell automatically reveals configured trailing swipe actions when tapped
      • Outline disclosure accessory
        • Cell automatically communicate with the data source and expand/collapse its children when tapped
        • Requires the new section snapshot APIs: check out Advances in Diffable Data Source
  • Plenty of system defaults are provided while customizabilities are kept

Modern cell configuration

https://developer.apple.com/wwdc20/10027

Presenter: Tylor Fox

  • Getting started with configurations
    • In iOS 13, we use the built-in imageView and textLabel properties on UITableViewCell to display an image and some text.
    • In iOS 14, we use the content configuration to describe the cell appearance for a specific state
    • This is how you configure a cell using a content configuration:
      • 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.
      • Set the image and text on the content configuration.
      • cell.contentConfiguration = content As soon as we call this, the cell is updated to display the image and text that we specified.
    • Same code to configure any cell and any view that supports content configurations.
    • Composable, lightweight, very inexpensive to create and built for performance
  • Configuration types
    • Background Configuration
      • let you set things such as background color, visual effect, stroke, insets, corner radius and custom view
    • List Content Configuration
      • let you set things such as image, text, secondary text, layout metrics and behaviors
  • Configuration state
    • Configuration state represents the various inputs that you use to configure your cells and views.
    • Each cell, header and footer has its own configuration state.
    • Two Types
      • View configuration state
        • Trait collection
        • 4 states: highlighted, selected, disabled and focused
        • Custom state: this is key-value storage to add any extra states or data that use to configuring your view.
      • Cell configuration state
        • Everything from the View configuration state
        • Editing, swiped, expanded
        • Drag and drop states
    • When 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.
    • When 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.
    • You can override 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.

Meet WidgetKit

https://developer.apple.com/wwdc20/10028

Presenters: Nahir Khan, Neil Desai

  • Widgets are now used across all platforms
  • Great widgets are glancable, relevant and personalized
  • Smart stacks are collections of widgets and automatically show the right one on top using on-device intelligence
  • Widgets support configuration by tapping them - this is realized using intents similar to SiriKit
  • e.g. choosing the city in a Weather app
  • UI built entirely in SwiftUI
  • How WidgetKit works
    • WidgetKit extensions are background extensions
    • They return a series of view hierarchies in a time line
    • Time line is sent to the home screen which presents the right view at the right time
    • Since views are “ready” they can be re-used at different points in the system, e.g. the Widget Gallery
    • Time line is refreshed from main app and updates are scheduled by extension
      • Imagine the Calendar time line for the day. One event is updated from Calendar, which then wakes up the extension and provides the new time line.
  • Building a Widget
    • Single Widget Extension supports multiple kinds of widgets on different platforms
    • Possible configurations: Static (Workout widget) or Intent-Based (Reminder widget that can be personalized)
    • Supported Families: A widget can enable one or many of the following families: systemSmall, systemMedium, systemLarge
    • Widget struct must conform to Widget and its body to WidgetConfiguration
    • How to build a glancable experience
      • Widgets are not mini apps they rather project content on the home screen
      • No scrolling
      • No videos or animated images
      • Tap interactions to deep link into main app. Widget associable with a URL link using the widgetURL API (use the new Link API of SwiftUI)
      • Important new view types:
        • Placeholder
          • Should not contain user data
          • Great placeholder UIs show a representation of what kind your data is
        • Snapshot
          • Represent a single entry in time
          • Should return a view as quickly as possible
          • Used to display your widget in the gallery
          • Use it as the first entry in your time line so users get what they see in the gallery
        • Time line
          • Combination of views and dates
          • Output if WidgetKit extension is serialized to disk which enabled rendering of individual entries just in time
      • Reloads
        • Wake up the extension and ask for a new time line
        • Help to ensure that content is up to date
    • Get a TimelineProvider by struct Provider: TimelineProvider
      • Implement func snapshot(...) and func timeline(...) for returning the respective data
      • Provide a reload policy at Time line cretion time to tell when the time line should be reloaded: atEnd, after(date: Date), never
    • System determines the best time to reload the widget, e.g. based on:
      • Background notification
      • Significant time change
      • Changes in the app made by the user, e.g. new Calendar entry
    • Use WidgetCenter.[reloadTimelines(ofKind:), reloadAllTimelined] to programmatically reload time lines
    • Get current configurations with WidgetCenter.getCurrentConfigurations(completion:)
      • Use batch requests
      • Do not overuse networking from a widget
    • Use onBackgroundURLSessionEvents modifier to launch a network task which delivers the result to your extension
      • Reloads are budgeted by the system, do not overuse them
    • Personalization
      • Use the Intents framework, known from Siri, to customize the widgets behavior
      • Use the new In-App Intent Handling to answer requests from your widget
      • IntentConfiguration is used to power intent-based widget configurations
      • IntentTimelineProvider is used to generate specific time lines
    • Intelligence
      • Widgets are displayed on the home screen by on-device intelligence
      • Your app can donate shortcuts
      • Widget extension can annotate time line entries using TimelineEntryRelevance with its score and duration properties

Stacks, Grids, and Outlines in SwiftUI

https://developer.apple.com/wwdc20/10031

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Build SwiftUI views for widgets

https://developer.apple.com/wwdc20/10033

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Widgets Code-along, part 1: The adventure begins

https://developer.apple.com/wwdc20/10034

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Widgets Code-along, part 2: Alternate timelines

https://developer.apple.com/wwdc20/10035

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Widgets Code-along, part 3: Advancing timelines

https://developer.apple.com/wwdc20/10036

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

App essentials in SwiftUI

https://developer.apple.com/wwdc20/10037

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Build document-based apps in SwiftUI

https://developer.apple.com/wwdc20/10039

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Data Essentials in SwiftUI

https://developer.apple.com/wwdc20/10040

Presenters: Curt Clifton, Luca Bernardi, Raj Ramamurthy

  • Getting Started
    • Always ask you the following questions:
      • What data does my view need?
      • How will the view manipulate this date?
      • Where will the data come from?
    • Immutable views, that just display data, contain only let properties
    • Pull multiple properties in their own config object
      • The config object can contain functions to mutate its state
      • Using @State private var config: ConfigObject() to re-render your view after config changed
      • Let parent and sub views communicate over a single config object by sharing it using @Binding var config
      • Pass config down by marking the it as reference using the dollar symbol: SubView(config: $config)
  • Modeling Data Using ObservableObject
    • Class-constrained protocol (only adoptable by reference types)
    • Can be used to achieve super-custom behaviors, e.g. backing data by a service or server
    • Conform by implementing var objectWillChange: Self.ObjectWillChangePublisher { get }
    • Use to manage data life cycle, handle side-effects, integrate with existing components
    • Will be your source of truth
    • Doesn’t need to be your full data model - split into multiple observable objects if your model is complex
    • Use a single ObservableObject for all your views if your data model is simple
    • Mark properties of your ObservableObject, your view is interested in as @Published var progress: Double
    • How to create an ObservableObject dependency?
      • @ObservedObject
        • @ObservedObject var config: Configuration
        • You need to manage the objects ownership outside of your view
        • Create a binding to any value-type property of the ObservableObject to pass it into e.g. $config.isFinished a Toggle control and let it automatically update your view
      • @StateObject
        • SwiftUI owns the ObservableObject
        • Creation/destruction is tied to view’s life cycle
        • Instantiated just before body runs
        • Use it to implement e.g. an ImageLoader: ObservableObject with a @published var image: Image property
        • Whenever @StateObject changes the view is re-rendered and thus populated with the image
      • EnvironmentObject
        • In SwiftUI you typically have a hierarchy of many modular sub views
        • To avoid a lot of boilerplate by passing around ObservableObject’s pass it to .environmentObject(...) on your root view
        • Changes to it, from any view in the hierarchy, will be reflected in any other view
  • SwiftUI Performance Considerations
    • Avoid slow view updates
      • Make view initializers cheap, e.g. no dispatches
      • Make body a pure function
      • Avoid assumptions
    • New event sources: onChange, onOpenURL, onContinueUserActivity - run on main thread
  • Who owns the data?
    • Share data in a common ancestor
    • Leverage @StateObject
    • Consider placing global data in App and pass it down the view hierarchy. Changes to it will re-render all scenes (instances/windows) of your app
    • New 2020: Property Wrappers that offer data persistence across app restarts and can be used as source of truth
      • @SceneStorage
        • Per-scene property wrapper for reading/writing data managed by SwiftUI
        • Light-weight storage for your views data
        • Use it to populate your collection views
      • @AppStorage
        • App-scoped global storage, persisted using UserDefaults, usable anywhere (app/view)
        • Perfect for storing settings
        • @AppStorage("amountOfGold") private var amountOfGold = 5000
        • Automatically reads/writes from/to UserDefaults whenever the property changes

What’s new in SwiftUI

https://developer.apple.com/wwdc20/10041

Presenters: Matt Ricketson, Taylor Kelly

  • Apps
    • Bild your whole app using SwiftUI: struct BookClubApp: App
    • Apps can declare data dependencies
    • Use WindowGroup to manage windows platform independent. Supports multiple windows on macOS and iPadOS out of the bos
    • Use Settings to get a preference pane for free • available on macOS
    • Use DocumentGroup scene type to automatically handle opening, saving and editing documents • macOS, iOS, iPadOS
    • Use CommandMenu command to add additional menus to the menu bar including keyboard shortcuts
    • New multi-platform templates specifically for SwiftUI apps
    • LaunchScreen Info.plist key to configure your launch screen • simple alternative to the storyboard
  • Widgets
    • iOS, iPadOS, macOS exclusively built using SwiftUI
    • Declared by struct YourWidget: Widget and var body: some WidgetConfiguration
    • Use SwiftUI to build custom complications for watchOS
  • Lists and Collections
    • List now receive outlines to quickly access the lists content • reduces the need for push/pop navigation patterns
    • Lazy loading grid layouts (Lazy[V|H]Stack) to reduce memory footprint and preserve smooth scrolling for large amounts of data
    • View Builder for switch statements to show e.g. different image styles in a list of images
  • Toolbars and Controls
    • .toolbar modifier for unified display of toolbars
    • Use ToolbarItem(placement: .principal) to make an item prominent
    • Use ToolbarItem(placement: .bottomBar) to place an item in the bottom bar
    • When using Label("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 Button
    • New default focus support in tvOS
    • New controls:
      • ProgressView("Downloading", value: progress) - horizontal bar
      • ProgressView("Downloading", value: progress).progressViewStyle(CircularViewStyle()) - circular progress indicator
      • ProgressView() - spinner
      • Gauge to indicate the level of value • can contain value labels and min/max value labels
  • New effects and styling
    • New control center UI with beautiful transitions
    • .matchedGeometryEffect to provide smooth animations inside of a grid of UI elements
    • .clipShape(ContainerRelativeShape()) to automatically apply a super views shape to the subview
    • custom fonts automatically scaled with dynamic type changes
    • Custom accent color directly form the AssetCatalog on all platforms
    • Many controls can now be tinted
  • System integration
    • New Link 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 views
    • onDrag {} and onDrop {} to support drag & drop
    • UniformTypeIdentifers framework for e.g. introspection of file types
    • Sign in with Apple as first class component in SwiftUI • available on every platform
    • Other Frameworks: AuthenticationServices, AVKit, MapKit, SceneKit, SpriteKit

Build SwiftUI apps for tvOS

https://developer.apple.com/wwdc20/10042

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Build an Action Classifier with Create ML

https://developer.apple.com/wwdc20/10043

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Advances in diffable data sources

https://developer.apple.com/wwdc20/10045

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Create complications for Apple Watch

https://developer.apple.com/wwdc20/10046

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Enable encrypted DNS

https://developer.apple.com/wwdc20/10047

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Build complications in SwiftUI

https://developer.apple.com/wwdc20/10048

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Keep your complications up to date

https://developer.apple.com/wwdc20/10049

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Build with iOS pickers, menus and actions

https://developer.apple.com/wwdc20/10052

Presenters: Eric Dudiac, David Duncan

  • UISlider and UIProgressView: More consistent across platforms now
  • UIActivityIndicatorView: New simpler design, Use color API and modern styles, Updates “pull-to-refresh”
  • UIPickerView: Updated styling
  • UIPageControl
    • New interactions (scrubbing, scrolling)
    • Unlimited pages
    • Optional custom indicator icons: .preferredIndicatorImage(UIImage()) to set all or .setIndicatorImage(UIImage(), forPage: 0) for a specific image
    • Multiple styles: .backgroundStyle = .prominent to highlight the background
  • UIColorPickerViewController
    • New view controller for picking colors
    • Eyedropper, Favorites, Hex specification
  • UIDatePicker
    • New compact style to select date and time
    • In-line style on iOS - great for iPad or if date picking is primary UI (matches modal presentation)
    • Useful when you have space constraints
    • Full modal calendar when selecting dates
    • Keyboard for selecting times
    • New macOS style (10.15.4)
      • Compact, modal calendar presentation
      • Supported in Catalyst apps
  • Menus
    • Provided on UIControl
    • Directly supported by UIButton and UIBarButtonItem by button.menu = UIMenu(...)
    • Triggered via long-press by default
    • Show the menu by a simple tap by setting button.showsMenuAsPrimaryAction = true and don’t provide a primary action
    • Back buttons implement menus to quickly jump back in navigation stack
    • Take action when the menu action is recognized, register for UIControl.Event.menuActionTriggered
    • UIDeferredMenuElement to async provide menu items
    • UIContextMenuInteraction to modify or replace provided menu updateVisibleMenu(_ block menu: (UIMenu) -> UIMenu)
      • Use UIContextMenuInteraction.rich to display previews and .compact to only show a menu
    • New UIBarButtonItem initializers init(systemItem:primaryAction:menu:), init(title:image:primaryAction:menu:)
    • New UIBarButtonItem .fixedSpace() and .flexibleSpace
    • UIButton can finally be initialized using an UIAction: init(type:primaryAction:) -> native block based API
    • UISegmentedControls can now finally be initialized using UIActions -> native block based API

Optimize the interface of your Mac Catalyst app

https://developer.apple.com/wwdc20/10056

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Identify trends with the Power and Performance API

https://developer.apple.com/wwdc20/10057

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Design high quality Siri media interactions

https://developer.apple.com/wwdc20/10060

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Expand your SiriKit Media Intents to more platforms

https://developer.apple.com/wwdc20/10061

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Background execution demystified

https://developer.apple.com/wwdc20/10063

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

What’s new in SiriKit and Shortcuts

https://developer.apple.com/wwdc20/10068

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Evaluate and optimize voice interaction for your app

https://developer.apple.com/wwdc20/10071

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Empower your intents

https://developer.apple.com/wwdc20/10073

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Decipher and deal with common Siri errors

https://developer.apple.com/wwdc20/10074

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Diagnose performance issues with the Xcode Organizer

https://developer.apple.com/wwdc20/10076

Presenters: Example Guy, Another Person

TO-DO! You can contribute to this session, please see CONTRIBUTING.md

Eliminate animation hitches with XCTest

https://developer.apple.com/wwdc20/10077

Presenter: Tanuja Mohan

  • Hitch: A frame appears on screen later than expected
  • VSYNC: Time the screen swaps the frame onto the display
  • Hitch time: Time in ms that a frame is late to display
  • Hitch ratio: Hitch time in ms per second for a given duration
  • Apple doesn’t use frames per second (fps) since:
    • 60 or 120 fps is not always the desired target
    • Display may intentionally not be updated
    • Target frame rate may intentionally be lower than possible
  • Hitch ratio is always comparable across tests, following ratios are recommended:
    • Good: < 5ms/s
    • Warning: 5…10ms/s - users will start recognizing hitches
    • Critical: >10ms/s
  • Can be measured using XCTestMetrics and unit tests or for production apps using MetricsKit and Xcode Organizer
  • XCTOSSignpostMetric gives you the following when using an animation os_signpost interval:
    • Duration
    • Total count of hitches
    • Total duration of hitches
    • Hitch time ratio
    • Frame rate
    • Frame count
  • Specify an animation os_signpost interval by:
    • os_signpost(.animationBegin, log: logHandle, name: "performanceAnimationInterval")
    • os_signpost(.end, log: logHandle, name: "performanceAnimationInterval")
  • UIKit has pre-defined metrics:
    • XCTOSSignpostMetric.navigationTransitionMetric
    • XCTOSSignpostMetric.customNavigationTransitionMetric
    • XCTOSSignpostMetric.scrollDecelerationMetric
    • XCTOSSignpostMetric.scrollDraggingMetric
  • Application state can be reset to avoid tests influencing themselves: XCTMeasureOptions().invocationOptions = [.manualStop]
  • Listen to a live testing session at 8:15

Why is my app getting killed?

https://developer.apple.com/wwdc20/10078

Presenter: Andy Aude

  • Most common reasons why apps can be terminated in the background
    • Crash
      • Segmentation fault
      • Illegal instruction
      • Asserts and uncaught exceptions
    • CPU resource limit
      • High sustained CPU load in background
      • Energy Exception Report
        • Xcode Organizer
        • MXCPUExceptionDiagnostic
      • Reports contain call stack points out hotspots in code
      • Consider moving work into BGProcessingTask
    • Watchdog
      • Long hang during key app transitions
        • application(_:didFinishLaunchingWithOptions:)
        • applicationDidEnterBackground(_:)
        • applicationWillEnterForeground(_:)
      • These transitions have a time limit on the order of 20 seconds
      • Terminations are disabled in Simulator and in the Debugger
      • Eliminate deadlocks, infinite loops, synchronous work
      • Report available via MXCrashDiagnostic
    • Memory limit exceeded
      • App using too much memory
      • Same limit for foreground and background
      • Use Instruments and Memory Debugger
      • Keep in mind older devices
    • Memory pressure exit (jetsam)
      • Not a bug with your app
      • Most common termination
      • System freeing up memory for active applications
      • Reducing jetsame rate
        • Aim for less than 50MB in background
        • Upon background flush state to disk, clear out image views, drop caches
      • Recovering from jetsame
        • Save state upon entering background
        • Adopt UIKit State Restoration
        • User should not realize app was terminated
    • Background task timeout
      • UIApplication.beginBackgroundTask(expirationHandler:)
      • UIApplication.endBackgroundTask(_:)
      • Failure to end the task explicitly result in termination
      • Counts exposed via MXBackgroundExitData
      • Preventable
        • Use the named variant of the UIKit API beginBackgroundTask(withName:expirationHandler:)
        • Terminations do not occur in Debugger
        • New console message in iOS 13.4 (Background Task DatabaseTransaction was created over 30 seconds ago. In Applications running in the background, this creates a risk of termination. Remember to call endBackgroundTask for your task in a timely manner to avoid this.)
      • Expiration handler
        • Implement an expirationHandler
        • Call endBackgroundTask(_:) inside the handler
        • Do not begin new work
        • Do not rely on it exclusively
        • Add telemetry at the start and end of each expiration handler
        • Inspect MXMetricPayload
      • Check backgroundTimeRemaining
        • Only start work if plenty of time remains
        • Unsafe to begin tasks with

README 内容过长,已截取前 64 KB。完整内容请前往 GitHub 仓库查看。

评论

登录 后发表评论
暂无评论
GitRead 中文社区
深度解读 · 趋势洞察 · 价值精选

关于

关于我们联系我们编辑准则收录标准赞赏人员

发现

技术趋势新手训练营资源精选实战指南精选专题热门话题GitHub 文档

条款

隐私政策服务条款网站地图
26.9万收录项目
5.3万中文话题
155精选专题
发现技术价值,连接开源智慧
© 2026 GitRead · GitHub 中文社区 本站与 GitHub, Inc. 无隶属关系;GitHub 是 GitHub, Inc. 的商标。