2023 App ServicesEssentialsSystem ServicesSwiftUI & UI Frameworks
WWDC23 · 27 min · App Services / Essentials / System Services / SwiftUI & UI Frameworks
What’s new in AppKit
Discover the latest advances in Mac app development. We’ll share improvements to controls and menus and explore the tools that can help you break free from your (view) bounds. Learn how to add motion to your user interface, take advantage of improvements to text input, and integrate your existing code with Swift and SwiftUI.
Watch at developer.apple.com ↗Chapters
Code shown on screen · 7 snippets
Configure NSTableView column customization menu
func tableView(_ tableView: NSTableView,
userCanChangeVisibilityOf column: NSTableColumn) -> Bool {
return column.identifier != "Name"
} Configuring NSProgressIndicator to sync with Progress
func fetchData() {
let url = URL(string: "https://developer.apple.com/wwdc23/")!
let task = URLSession.shared.dataTask(with: .init(url: url))
progressIndicator.observedProgress = task.progress
task.resume()
} Adding an inspector to your app
let inspectorItem = NSSplitViewItem(inspectorWithViewController: inspectorViewController)
splitViewController.addSplitViewItem(inspectorItem)
func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
[.toggleSidebar, .sidebarTrackingSeparator, .flexibleSpace, .addPlant,
.inspectorTrackingSeparator, .flexibleSpace, .toggleInspector]
} Show a NSPopover relative to a NSToolbarItem
func toolbarAction(_ toolbarItem: NSToolbarItem) {
let popover = NSPopover()
popover.contentViewController = PopoverViewController()
popover.show(relativeTo: toolbarItem)
} Adding symbol effects to a image view
wifiImageView.image = NSImage(systemSymbolName: "wifi", accessibilityDescription: "wifi icon")
wifiImageView.addSymbolEffect(.variableColor.iterative, options: .repeating) Using @ViewLoading to remove optionality on properties
class ViewController: NSViewController {
var datePicker: NSDatePicker
var date = Date() {
didSet {
datePicker.dateValue = date
}
}
override func loadView() {
super.loadView()
datePicker = NSDatePicker()
datePicker.dateValue = date
view.addSubview(datePicker)
}
} Preview NSView and NSViewController using the Preview macro
#Preview("Tree Species") {
let treeCellView = TreeCellView()
treeCellView.species = .spruce
return treeCellView
} Related sessions
-
29 min -
27 min -
17 min