{"hierarchy":{"modules":[{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#About-this-module"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#SwiftUI-overview"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#Tour-of-the-app"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#Tips-for-success"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#Time-to-begin"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Create-a-project"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Compose-views"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Modify-and-style-views"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Supplement-accessibility-data"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/SwiftUI-essentials"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Import-color-themes"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Create-a-daily-scrum-model"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Create-the-card-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Stylize-the-card"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Customize-the-label-style"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Make-the-card-view-accessible"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-data-in-a-list","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-data-in-a-list#Display-a-list-of-daily-scrums"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-data-in-a-list#Make-scrums-identifiable"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-data-in-a-list#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Views"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Set-up-navigation"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Create-the-detail-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Add-visual-components-to-the-detail-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Iterate-through-attendees"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Navigate-between-screens"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views#Source-of-truth"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views#Swift-property-wrappers"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views#State"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views#Binding"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views#App-architecture"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view#Add-an-edit-view-for-scrum-details"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view#Display-attendees-in-the-edit-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view#Add-accessibility-modifiers"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view#Present-the-edit-view"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Navigation-and-modal-presentation"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Add-a-theme-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Add-a-theme-picker"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Pass-the-edit-view-a-binding-to-data"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Pass-a-binding-into-the-detail-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Pass-a-binding-into-the-list-view"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Passing-data"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-classes-observable","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-classes-observable#Working-with-reference-types"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-classes-observable#Making-a-class-observable"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-classes-observable#Monitoring-an-object-for-changes"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-classes-observable#Putting-it-all-together"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/responding-to-events","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/responding-to-events#Scene-architecture"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/responding-to-events#Scene-phases-and-transitions"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/responding-to-events#Events-and-state"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/responding-to-events#View-life-cycle-events"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Create-an-overlay-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Extract-the-meeting-header"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Add-design-elements-to-the-meeting-header"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Create-a-source-of-truth-for-a-reference-type"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Add-life-cycle-events"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Extract-the-meeting-footer"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Trigger-sound-with-AVFoundation"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/updating-app-data","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/updating-app-data#Use-the-edit-view-to-create-a-new-scrum"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/updating-app-data#Add-scrum-history"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/updating-app-data#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/State-management"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/persisting-data","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/persisting-data#Refactor-structures-into-SwiftData-model-classes"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/persisting-data#Create-sample-SwiftData-for-previews"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/persisting-data#Integrate-SwiftData-models-with-SwiftUI-views"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/persisting-data#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors#Add-an-error-wrapper-structure"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors#Create-an-error-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors#Report-errors"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors#Simulate-persistence-error"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Persistence-and-error-handling"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/drawing-the-timer-view","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/drawing-the-timer-view#Create-the-meeting-timer-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/drawing-the-timer-view#Draw-an-arc-segment"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/drawing-the-timer-view#Draw-the-progress-ring"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/drawing-the-timer-view#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Drawing"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Scrum-timer-meeting-properties"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Scrum-timer-data-flow"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Speech-recognizer-architecture"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Timing-of-speech-recognition-actions"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Request-authorization-to-device-hardware"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Integrate-speech-recognition"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Display-recording-indicators"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Create-a-history-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Display-a-history-view"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#What-youve-learned"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Whats-next"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Connecting-with-others"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Finding-inspiration"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Designing-for-everyone"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Creating-more-apps"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Ready-for-more-training"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Recording-audio"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today#About-this-module"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today#UIKit-overview"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today#Tour-of-the-app"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today#Tips-for-success"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today#Time-to-build-the-app"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Create-a-project"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Add-a-collection-view-controller"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Create-a-reminder-model"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Configure-the-collection-as-a-list"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Configure-the-data-source"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Apply-a-snapshot"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/UIKit-essentials"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views#Displaying-collections"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views#Creating-a-diffable-data-source"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views#Defining-cell-configurations"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views#Generating-data-source-snapshots"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views#Using-modern-collection-views-in-Today"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info#Format-the-date-and-time"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info#Organize-view-controllers"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info#Change-the-cell-background-color"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info#Display-the-reminder-complete-status"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Make-the-model-identifiable"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Create-functions-for-accessing-the-model"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Create-a-custom-button-action"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Wire-a-target-action-pair"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Update-the-snapshot"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Make-the-action-accessible"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Preview-using-Accessibility-Inspector"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Create-a-reminder-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Create-an-enumeration-for-rows"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Set-up-the-data-source"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Set-up-a-snapshot"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Display-the-detail-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Style-the-navigation-bar"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/Collection-views-and-navigation"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing#Create-sections-for-an-editing-mode"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing#Configure-the-view-and-editing-modes"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing#Add-an-edit-button"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing#Show-headers-in-editing-mode"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Using-content-views-in-editing-mode"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Implementing-content-views"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Creating-a-custom-content-view"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Creating-a-custom-content-configuration"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Configuring-your-custom-content-view"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Applying-the-custom-content-configuration"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Using-custom-content-views-in-Today"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Extract-configuration-methods"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Create-a-reusable-layout-function"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Create-a-custom-view-with-a-text-field"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Conform-to-the-content-view-protocol"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Complete-the-content-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Display-the-content-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Create-content-views-for-the-date-and-notes"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Add-a-working-reminder"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Make-the-text-configuration-editable"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Make-the-date-configuration-editable"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Make-the-notes-configuration-editable"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Cancel-edits"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Observe-changes-in-a-view-hierarchy"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/Making-editable-views"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Create-an-add-action"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Connect-the-target-action-pair"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Add-a-new-reminder-to-the-model"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Delete-a-reminder"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders#Create-a-list-style-enumeration"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders#Filter-reminders-by-list-style"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders#Display-a-segmented-control"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders#Add-action-to-segmented-control"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/Adding,-deleting,-and-filtering-reminders"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Accessibility-in-UIKit"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Accessibility-in-Today"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Actions-and-values"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Labels-and-traits"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Custom-accessibility-elements"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Ways-to-make-an-app-accessible"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Resources"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Whats-next"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Create-relational-constraints"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Customize-the-appearance-of-the-progress-circle"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Display-the-header-view"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Update-progress-dynamically"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Make-the-progress-view-accessible"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-gradient-background","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-gradient-background#Create-a-gradient-layer"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-gradient-background#Add-the-gradient-layer-to-the-list"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-gradient-background#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/Custom-views-and-animation"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Fetch-reminders-asynchronously"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Convert-between-model-types"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Create-a-reminder-store"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Read-all-reminders"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Request-access-to-reminder-data"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Display-errors-to-the-user"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Display-reminders"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Test-EventKit-integration"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Respond-to-change-notifications"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Read-reminders-individually"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Convert-between-model-types"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Save-reminders-individually"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Save-added-reminders"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Save-updated-reminders"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Remove-reminders"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#What-youve-learned"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#Whats-next"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#Connecting-with-others"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#Researching-design"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#Creating-more-apps"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#Continuing-your-training"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/System-frameworks"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#About-this-module"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Technology-overview"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Tour-of-the-app"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Tips-for-success"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Time-to-begin"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Special-thanks"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Decode-earthquake-data"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Test-the-decoder"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Decode-GeoJSON"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Decode-a-location"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Test-decoding-a-location"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-existentials-and-generics","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-existentials-and-generics#Comparing-existential-and-generic-types"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-existentials-and-generics#Using-existential-types-in-Earthquakes"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/building-a-network-test-client","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/building-a-network-test-client#Create-a-network-client"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/building-a-network-test-client#Test-the-quake-client"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/building-a-network-test-client#View-client-data"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/building-a-network-test-client#Check-Your-Understanding"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/Next-steps\/Tests"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-structured-concurrency","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-structured-concurrency#Fetching-multiple-URLs"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-structured-concurrency#Protecting-data-with-actors"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/caching-network-data","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/caching-network-data#Fetch-quake-location"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/caching-network-data#Cache-quake-details"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/caching-network-data#Fetch-multiple-locations"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/caching-network-data#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-the-detail-view","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-the-detail-view#Show-quake-details"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-the-detail-view#Display-the-location-details"},{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-the-detail-view#Add-the-map-view"},{"kind":"assessment","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-the-detail-view#Check-Your-Understanding"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#What-youve-learned"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Whats-next"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Connecting-with-others"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Finding-inspiration"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Designing-for-the-network"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Creating-more-apps"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Building-apps-for-other-platforms"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/Next-steps\/Network-data"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#About-this-module"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#macOS-development"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Tour-of-the-app"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Training-plan"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Tips-for-success"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Time-to-begin"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/navigating-the-sample-project","sections":[{"kind":"task","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/navigating-the-sample-project#Explore-Article-Accelerator"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#App-structure-and-responsibilities"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#ArticleStore-package"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#Article"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#Models"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#Whats-next"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/macOS-essentials"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-multi-column-navigation","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-multi-column-navigation#Navigating-parallel-categories"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-multi-column-navigation#Defining-a-sidebar-interface"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-multi-column-navigation#Whats-next"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/Navigation"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swift-data","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swift-data#Article-state"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swift-data#Persistence"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swift-data#Whats-next"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Creating-the-model-container-and-context"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Creating-a-model-container"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Setting-container-options"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Using-model-contexts"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Adding-objects"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Working-with-relationships"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Adding-elements-to-a-relationship"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Listing-elements-in-a-relationship"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Removing-elements-from-a-relationship"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Deleting-all-user-data"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Experimenting-with-SwiftData"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Whats-next"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Fetching-data-using-SwiftData"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Sorting-articles"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Using-sort-descriptors"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Filtering-articles"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Using-dynamic-queries"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Considering-user-data"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Whats-next"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/SwiftData"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Contrasting-toolkits"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Wrapping-a-Cocoa-view"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Creating-and-updating-your-view"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Wrapping-a-Cocoa-view-controller"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Managing-your-view-hierarchy"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Communicating-changes"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Using-coordinators"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#AppKit-in-Article-Accelerator"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Whats-next"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Creating-a-window-scene"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#The-main-window"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Auxiliary-windows"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Creating-a-window-group-for-data-driven-windows"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Sizing-and-positioning-windows"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Opening-and-dismissing-windows-programmatically"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Opening-and-dismissing-unique-windows"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Opening-and-dismissing-a-data-driven-window-group"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Whats-next"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Adding-menu-bar-commands"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Experimenting-with-adaptive-menus"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Experimenting-with-unavailable-menu-commands"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Creating-command-menus"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Supplementing-commands-with-keyboard-shortcuts"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Working-with-default-commands"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Replacing-existing-commands"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Removing-existing-commands"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Creating-a-context-menu"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Whats-next"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars#Styling-a-toolbar"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars#Configuring-toolbar-items"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars#Enabling-toolbar-customization"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars#Ensuring-toolbar-accessibility"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars#Whats-next"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop#Defining-a-draggable-source-view"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop#Defining-a-drop-destination"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop#Reordering-dynamic-content"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop#Experimenting-with-featured-articles"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop#Whats-next"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-app-settings","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-app-settings#Choosing-a-location-for-app-settings"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-app-settings#Creating-a-settings-window"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-app-settings#Defining-Article-Accelerator-settings"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-app-settings#Whats-next"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/Core-macOS-features"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Creating-tips"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Setting-rules"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Defining-actions"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Loading-tips"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Displaying-tips"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Using-inline-tips-in-Article-Accelerator"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Using-popover-tips-in-Article-Accelerator"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Limiting-tip-frequency"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Resetting-tips"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Experimenting-with-tips"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Considering-design"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Whats-next"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/Other-frameworks"},{"projects":[{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Orienting-users-in-your-app"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Displaying-navigation-cues"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Representing-your-content-hierarchy"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Visually-organize-your-app"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Choosing-when-to-fill-available-space"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Adapting-grid-contents-to-fill-a-window"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Restricting-line-length-for-readability"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Balancing-adaptability-and-readability"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Providing-context-clues"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Making-apps-for-everyone"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Whats-next"}]},{"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge","sections":[{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#What-youve-learned"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#Whats-next"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#Reviewing-the-sample-code-in-depth"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#Connecting-with-others"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#Researching-design"},{"kind":"heading","reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#Creating-more-apps"}]}],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/Design"}],"paths":[["doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training","doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI","doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/SwiftUI-essentials"]],"reference":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training"},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger"},"kind":"article","legalNotices":{"copyright":"Copyright &copy; 2026 Apple Inc. All rights reserved.","privacyPolicy":"https:\/\/www.apple.com\/privacy\/privacy-policy","termsOfUse":"https:\/\/www.apple.com\/legal\/internet-services\/terms\/site.html"},"metadata":{"category":"App Dev","categoryPathComponent":"app-dev-training","role":"article","title":"Getting started with Scrumdinger"},"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[{"backgroundImage":"SUI000_hero.png","content":[{"inlineContent":[{"text":"Learn the essentials of iOS app development by building a fully functional app using SwiftUI.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"Before you start the module, take a few minutes to familiarize yourself with the background requirements, the key concepts behind SwiftUI, and the app that you’ll build.","type":"text"}],"type":"paragraph"}],"estimatedTimeInMinutes":5,"image":"SUI000_hero.png","kind":"hero","title":"Getting started with Scrumdinger"},{"content":[{"content":[{"anchor":"About-this-module","level":2,"text":"About this module","type":"heading"},{"inlineContent":[{"text":"These tutorials are created for experienced developers who are new to SwiftUI.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll need to know about Swift before you begin, so start by reviewing ","type":"text"},{"identifier":"https:\/\/docs.swift.org\/swift-book\/documentation\/the-swift-programming-language\/thebasics\/","isActive":true,"type":"reference"},{"text":" of the Swift programming language for an overview of syntax, data types, and unique language features, such as optionals.","type":"text"},{"text":" ","type":"text"},{"text":"Also review the ","type":"text"},{"identifier":"https:\/\/docs.swift.org\/swift-book\/documentation\/the-swift-programming-language\/closures\/","isActive":true,"type":"reference"},{"text":" section because you’ll use them frequently in SwiftUI.","type":"text"}],"type":"paragraph"},{"anchor":"SwiftUI-overview","level":2,"text":"SwiftUI overview","type":"heading"},{"inlineContent":[{"text":"SwiftUI is a declarative framework for building apps for any Apple platform.","type":"text"},{"text":" ","type":"text"},{"text":"SwiftUI provides a common API that you can use to define an app’s user interface and platform-specific behavior.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"Create apps more quickly and with fewer errors with these key SwiftUI features:","type":"text"}],"type":"paragraph"},{"items":[{"content":[{"inlineContent":[{"text":"Declarative syntax—Define which views appear onscreen using simple Swift structures.","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"text":"A compositional API—Quickly create and iterate your user interface using built-in views and modifiers. Compose more complex views by combining simpler views.","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"text":"A powerful layout system—Easily arrange views onscreen relative to their parent views and to each other.","type":"text"},{"text":" ","type":"text"},{"text":"When existing views and controls don’t suit your needs, you can draw your own.","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"text":"Views that reflect app data—Define a view’s data dependencies, and SwiftUI automatically updates the view when data changes, avoiding errors from invalid view states.","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"text":"Automatic accessibility support—SwiftUI adds basic accessibility that you’ll learn to enhance with minimal effort.","type":"text"}],"type":"paragraph"}]}],"type":"unorderedList"},{"anchor":"Tour-of-the-app","level":2,"text":"Tour of the app","type":"heading"},{"inlineContent":[{"text":"Many software engineering teams use daily meetings, known as scrums, to plan their work for the day.","type":"text"},{"text":" ","type":"text"},{"text":"Scrums are short meetings where each attendee discusses what they accomplished yesterday, what they are working on today, and any obstacles that might impact their work.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"This module guides you through the development of Scrumdinger, an iOS app that helps teams manage their daily scrums.","type":"text"},{"text":" ","type":"text"},{"text":"To help keep scrums short and focused, Scrumdinger uses visual and audio cues to indicate when and how long each attendee should speak.","type":"text"},{"text":" ","type":"text"},{"text":"The app also displays a progress screen that shows the time remaining in the meeting and creates a transcript that the users can refer to later.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"Here’s a closer look at what you’ll build in this module.","type":"text"}],"type":"paragraph"}],"kind":"fullWidth"},{"content":[{"anchor":"Scrum-list","level":3,"text":"Scrum list","type":"heading"},{"inlineContent":[{"text":"The main screen of the app displays a summary of each of the user’s daily scrums.","type":"text"},{"text":" ","type":"text"},{"text":"Users can tap a row in the list to view the details of a scrum or create a new scrum by tapping a button in the navigation bar.","type":"text"}],"type":"paragraph"}],"kind":"contentAndMedia","media":"SUI000_001.png","mediaPosition":"trailing"},{"content":[{"anchor":"Scrum-detail-and-edit","level":3,"text":"Scrum detail and edit","type":"heading"},{"inlineContent":[{"text":"The detail screen shows more information about a scrum, including the name of each attendee and a list of previous meetings.","type":"text"},{"text":" ","type":"text"},{"text":"Users can modify any of the scrum’s attributes by tapping a button in the navigation bar.","type":"text"},{"text":" ","type":"text"},{"text":"The edit screen includes a picker with which users can change the color theme of each meeting.","type":"text"},{"text":" ","type":"text"},{"text":"Tapping a button the top of the list of attributes starts a new meeting timer.","type":"text"}],"type":"paragraph"}],"kind":"contentAndMedia","media":"SUI000_002.png","mediaPosition":"trailing"},{"content":[{"anchor":"Meeting-timer","level":3,"text":"Meeting timer","type":"heading"},{"inlineContent":[{"text":"The progress bar at the top of the meeting timer shows the elapsed and remaining time for the meeting.","type":"text"},{"text":" ","type":"text"},{"text":"The app displays the name of the current speaker in the center of the screen and a button to advance to the next attendee at the bottom of the screen.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"Segments in a circular progress ring represent each attendee.","type":"text"},{"text":" ","type":"text"},{"text":"When an attendee uses all their time, Scrumdinger plays a “ding” sound and adds a new segment to the ring.","type":"text"},{"text":" ","type":"text"},{"text":"The meeting ends when the ring is full.","type":"text"}],"type":"paragraph"}],"kind":"contentAndMedia","media":"SUI000_003.png","mediaPosition":"trailing"},{"content":[{"anchor":"Tips-for-success","level":2,"text":"Tips for success","type":"heading"},{"items":[{"content":[{"inlineContent":[{"text":"Learn best by doing. Each tutorial includes starter and completed projects. Open the starter project and complete each step in the tutorial.","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"text":"Take an active role in your learning.","type":"text"},{"text":" ","type":"text"},{"text":"Read each step, and think about how you would accomplish the given task before you view the code suggestion.","type":"text"}],"type":"paragraph"}]},{"content":[{"inlineContent":[{"text":"Make sure that you install the ","type":"text"},{"identifier":"https:\/\/apps.apple.com\/us\/app\/xcode\/id497799835?mt=12","isActive":true,"type":"reference"},{"text":".","type":"text"}],"type":"paragraph"}]}],"type":"unorderedList"},{"anchor":"Time-to-begin","level":2,"text":"Time to begin","type":"heading"},{"inlineContent":[{"text":"Now that you’ve learned about Scrumdinger, it’s time to build it. And don’t worry if you get stuck.","type":"text"},{"text":" ","type":"text"},{"text":"You can view the code suggestions for each step as you work through a tutorial, or you can download and review the completed project in Xcode.","type":"text"},{"text":" ","type":"text"},{"text":"You can also visit the ","type":"text"},{"identifier":"https:\/\/developer.apple.com\/forums\/tags\/swiftui","isActive":true,"type":"reference"},{"text":" to get help on a variety of development topics.","type":"text"}],"type":"paragraph"}],"kind":"fullWidth"}],"kind":"articleBody"},{"abstract":[{"text":"Create, modify, and combine views to compose your app’s user interface using the SwiftUI declarative syntax.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll start building Scrumdinger, an app that manages meetings, by arranging groups of views to create the meeting timer screen.","type":"text"},{"text":" ","type":"text"},{"text":"As you progress through the module, you’ll revisit the timer screen as you work toward the final design.","type":"text"}],"action":{"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views","isActive":true,"overridingTitle":"Get started","overridingTitleInlineContent":[{"text":"Get started","type":"text"}],"type":"reference"},"featuredEyebrow":"Tutorial","kind":"callToAction","media":"SUI010-cta.png","title":"Using stacks to arrange views"}],"variants":[{"paths":["\/tutorials\/app-dev-training\/getting-started-with-scrumdinger"],"traits":[{"interfaceLanguage":"swift"}]}],"references":{"SUI000_001.png":{"alt":"Screenshot of list of scrums under Daily Scrums heading","identifier":"SUI000_001.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/com.apple.app-dev-training\/SUI000_001.png"},{"traits":["2x","light"],"url":"\/images\/com.apple.app-dev-training\/SUI000_001@2x.png"},{"traits":["1x","dark"],"url":"\/images\/com.apple.app-dev-training\/SUI000_001~dark.png"},{"traits":["2x","dark"],"url":"\/images\/com.apple.app-dev-training\/SUI000_001~dark@2x.png"}]},"SUI000_002.png":{"alt":"Screenshot of scrum details shown in grouped lists, including Meeting info, Attendees, and History","identifier":"SUI000_002.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/com.apple.app-dev-training\/SUI000_002.png"},{"traits":["2x","light"],"url":"\/images\/com.apple.app-dev-training\/SUI000_002@2x.png"},{"traits":["1x","dark"],"url":"\/images\/com.apple.app-dev-training\/SUI000_002~dark.png"},{"traits":["2x","dark"],"url":"\/images\/com.apple.app-dev-training\/SUI000_002~dark@2x.png"}]},"SUI000_003.png":{"alt":"Screenshot of meeting timer screen with three main sections","identifier":"SUI000_003.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/com.apple.app-dev-training\/SUI000_003.png"},{"traits":["2x","light"],"url":"\/images\/com.apple.app-dev-training\/SUI000_003@2x.png"},{"traits":["1x","dark"],"url":"\/images\/com.apple.app-dev-training\/SUI000_003~dark.png"},{"traits":["2x","dark"],"url":"\/images\/com.apple.app-dev-training\/SUI000_003~dark@2x.png"}]},"SUI000_hero.png":{"alt":" ","identifier":"SUI000_hero.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/com.apple.app-dev-training\/SUI000_hero.png"},{"traits":["2x","light"],"url":"\/images\/com.apple.app-dev-training\/SUI000_hero@2x.png"}]},"SUI010-cta.png":{"alt":" ","identifier":"SUI010-cta.png","type":"image","variants":[{"traits":["1x","light"],"url":"\/images\/com.apple.app-dev-training\/SUI010-cta.png"},{"traits":["2x","light"],"url":"\/images\/com.apple.app-dev-training\/SUI010-cta@2x.png"}]},"doc://com.apple.app-dev-training/tutorials/app-dev-training":{"abstract":[{"text":"Learn the basics of Xcode, SwiftUI, and UIKit to create compelling apps.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training","kind":"overview","role":"overview","title":"Develop apps for Apple platforms","type":"topic","url":"\/tutorials\/app-dev-training"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/Next-steps/Network-data":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/Next-steps\/Network-data","kind":"article","role":"article","title":"Network data","type":"topic","url":"\/tutorials\/app-dev-training\/next-steps\/network-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/Next-steps/Tests":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/Next-steps\/Tests","kind":"article","role":"article","title":"Tests","type":"topic","url":"\/tutorials\/app-dev-training\/next-steps\/tests"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/SwiftUI/Drawing":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Drawing","kind":"article","role":"article","title":"Drawing","type":"topic","url":"\/tutorials\/app-dev-training\/swiftui\/drawing"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/SwiftUI/Navigation-and-modal-presentation":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Navigation-and-modal-presentation","kind":"article","role":"article","title":"Navigation and modal presentation","type":"topic","url":"\/tutorials\/app-dev-training\/swiftui\/navigation-and-modal-presentation"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/SwiftUI/Passing-data":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Passing-data","kind":"article","role":"article","title":"Passing data","type":"topic","url":"\/tutorials\/app-dev-training\/swiftui\/passing-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/SwiftUI/Persistence-and-error-handling":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Persistence-and-error-handling","kind":"article","role":"article","title":"Persistence and error handling","type":"topic","url":"\/tutorials\/app-dev-training\/swiftui\/persistence-and-error-handling"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/SwiftUI/Recording-audio":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Recording-audio","kind":"article","role":"article","title":"Recording audio","type":"topic","url":"\/tutorials\/app-dev-training\/swiftui\/recording-audio"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/SwiftUI/State-management":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/State-management","kind":"article","role":"article","title":"State management","type":"topic","url":"\/tutorials\/app-dev-training\/swiftui\/state-management"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/SwiftUI/SwiftUI-essentials":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/SwiftUI-essentials","kind":"article","role":"article","title":"SwiftUI essentials","type":"topic","url":"\/tutorials\/app-dev-training\/swiftui\/swiftui-essentials"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/SwiftUI/Views":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/SwiftUI\/Views","kind":"article","role":"article","title":"Views","type":"topic","url":"\/tutorials\/app-dev-training\/swiftui\/views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/UIKit/Adding,-deleting,-and-filtering-reminders":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/Adding,-deleting,-and-filtering-reminders","kind":"article","role":"article","title":"Adding, deleting, and filtering reminders","type":"topic","url":"\/tutorials\/app-dev-training\/uikit\/adding,-deleting,-and-filtering-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/UIKit/Collection-views-and-navigation":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/Collection-views-and-navigation","kind":"article","role":"article","title":"Collection views and navigation","type":"topic","url":"\/tutorials\/app-dev-training\/uikit\/collection-views-and-navigation"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/UIKit/Custom-views-and-animation":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/Custom-views-and-animation","kind":"article","role":"article","title":"Custom views and animation","type":"topic","url":"\/tutorials\/app-dev-training\/uikit\/custom-views-and-animation"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/UIKit/Making-editable-views":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/Making-editable-views","kind":"article","role":"article","title":"Making editable views","type":"topic","url":"\/tutorials\/app-dev-training\/uikit\/making-editable-views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/UIKit/System-frameworks":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/System-frameworks","kind":"article","role":"article","title":"System frameworks","type":"topic","url":"\/tutorials\/app-dev-training\/uikit\/system-frameworks"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/UIKit/UIKit-essentials":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/UIKit\/UIKit-essentials","kind":"article","role":"article","title":"UIKit essentials","type":"topic","url":"\/tutorials\/app-dev-training\/uikit\/uikit-essentials"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-reminders":{"abstract":[{"text":"In this tutorial, you’ll add the ability to create new reminders and delete existing ones.","type":"text"}],"estimatedTime":"20min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders","kind":"project","role":"project","title":"Adding and deleting reminders","type":"topic","url":"\/tutorials\/app-dev-training\/adding-and-deleting-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-reminders#Add-a-new-reminder-to-the-model":{"abstract":[{"text":"In this tutorial, you’ll add the ability to create new reminders and delete existing ones.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Add-a-new-reminder-to-the-model","kind":"section","role":"pseudoSymbol","title":"Add a new reminder to the model","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Add-a-new-reminder-to-the-model"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-reminders#Connect-the-target-action-pair":{"abstract":[{"text":"In this tutorial, you’ll add the ability to create new reminders and delete existing ones.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Connect-the-target-action-pair","kind":"section","role":"pseudoSymbol","title":"Connect the target-action pair","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Connect-the-target-action-pair"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-reminders#Create-an-add-action":{"abstract":[{"text":"In this tutorial, you’ll add the ability to create new reminders and delete existing ones.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Create-an-add-action","kind":"section","role":"pseudoSymbol","title":"Create an add action","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Create-an-add-action"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-reminders#Delete-a-reminder":{"abstract":[{"text":"In this tutorial, you’ll add the ability to create new reminders and delete existing ones.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Delete-a-reminder","kind":"section","role":"pseudoSymbol","title":"Delete a reminder","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-reminders#Delete-a-reminder"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"estimatedTime":"15min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata","kind":"article","role":"article","title":"Adding and deleting data","type":"topic","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Adding-elements-to-a-relationship":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Adding-elements-to-a-relationship","kind":"section","role":"pseudoSymbol","title":"Adding elements to a relationship","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Adding-elements-to-a-relationship"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Adding-objects":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Adding-objects","kind":"section","role":"pseudoSymbol","title":"Adding objects","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Adding-objects"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Creating-a-model-container":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Creating-a-model-container","kind":"section","role":"pseudoSymbol","title":"Creating a model container","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Creating-a-model-container"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Creating-the-model-container-and-context":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Creating-the-model-container-and-context","kind":"section","role":"pseudoSymbol","title":"Creating the model container and context","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Creating-the-model-container-and-context"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Deleting-all-user-data":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Deleting-all-user-data","kind":"section","role":"pseudoSymbol","title":"Deleting all user data","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Deleting-all-user-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Experimenting-with-SwiftData":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Experimenting-with-SwiftData","kind":"section","role":"pseudoSymbol","title":"Experimenting with SwiftData","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Experimenting-with-SwiftData"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Listing-elements-in-a-relationship":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Listing-elements-in-a-relationship","kind":"section","role":"pseudoSymbol","title":"Listing elements in a relationship","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Listing-elements-in-a-relationship"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Removing-elements-from-a-relationship":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Removing-elements-from-a-relationship","kind":"section","role":"pseudoSymbol","title":"Removing elements from a relationship","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Removing-elements-from-a-relationship"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Setting-container-options":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Setting-container-options","kind":"section","role":"pseudoSymbol","title":"Setting container options","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Setting-container-options"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Using-model-contexts":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Using-model-contexts","kind":"section","role":"pseudoSymbol","title":"Using model contexts","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Using-model-contexts"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Whats-next":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-and-deleting-using-swiftdata#Working-with-relationships":{"abstract":[{"text":"In the previous article, you examined how to define your app’s storage schema in its model code.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll learn how to define a model container and establish a model context to which you can add instances of your model data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Working-with-relationships","kind":"section","role":"pseudoSymbol","title":"Working with relationships","type":"section","url":"\/tutorials\/app-dev-training\/adding-and-deleting-using-swiftdata#Working-with-relationships"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-the-detail-view":{"abstract":[{"text":"Earthquakes displays a list, with each element showing a sample of the available information for a recent earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"When the user taps a quake in the list, you’ll provide detailed information about that quake in a view that transitions onscreen.","type":"text"}],"estimatedTime":"25min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-the-detail-view","kind":"project","role":"project","title":"Adding the detail view","type":"topic","url":"\/tutorials\/app-dev-training\/adding-the-detail-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-the-detail-view#Add-the-map-view":{"abstract":[{"text":"Earthquakes displays a list, with each element showing a sample of the available information for a recent earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"When the user taps a quake in the list, you’ll provide detailed information about that quake in a view that transitions onscreen.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-the-detail-view#Add-the-map-view","kind":"section","role":"pseudoSymbol","title":"Add the map view","type":"section","url":"\/tutorials\/app-dev-training\/adding-the-detail-view#Add-the-map-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-the-detail-view#Display-the-location-details":{"abstract":[{"text":"Earthquakes displays a list, with each element showing a sample of the available information for a recent earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"When the user taps a quake in the list, you’ll provide detailed information about that quake in a view that transitions onscreen.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-the-detail-view#Display-the-location-details","kind":"section","role":"pseudoSymbol","title":"Display the location details","type":"section","url":"\/tutorials\/app-dev-training\/adding-the-detail-view#Display-the-location-details"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adding-the-detail-view#Show-quake-details":{"abstract":[{"text":"Earthquakes displays a list, with each element showing a sample of the available information for a recent earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"When the user taps a quake in the list, you’ll provide detailed information about that quake in a view that transitions onscreen.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adding-the-detail-view#Show-quake-details","kind":"section","role":"pseudoSymbol","title":"Show quake details","type":"section","url":"\/tutorials\/app-dev-training\/adding-the-detail-view#Show-quake-details"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adopting-collection-views":{"abstract":[{"text":"Collection views manage ordered collections of data items and use customizable layouts to present them.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views","kind":"article","role":"article","title":"Adopting collection views","type":"topic","url":"\/tutorials\/app-dev-training\/adopting-collection-views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adopting-collection-views#Creating-a-diffable-data-source":{"abstract":[{"text":"Collection views manage ordered collections of data items and use customizable layouts to present them.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views#Creating-a-diffable-data-source","kind":"section","role":"pseudoSymbol","title":"Creating a diffable data source","type":"section","url":"\/tutorials\/app-dev-training\/adopting-collection-views#Creating-a-diffable-data-source"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adopting-collection-views#Defining-cell-configurations":{"abstract":[{"text":"Collection views manage ordered collections of data items and use customizable layouts to present them.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views#Defining-cell-configurations","kind":"section","role":"pseudoSymbol","title":"Defining cell configurations","type":"section","url":"\/tutorials\/app-dev-training\/adopting-collection-views#Defining-cell-configurations"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adopting-collection-views#Displaying-collections":{"abstract":[{"text":"Collection views manage ordered collections of data items and use customizable layouts to present them.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views#Displaying-collections","kind":"section","role":"pseudoSymbol","title":"Displaying collections","type":"section","url":"\/tutorials\/app-dev-training\/adopting-collection-views#Displaying-collections"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adopting-collection-views#Generating-data-source-snapshots":{"abstract":[{"text":"Collection views manage ordered collections of data items and use customizable layouts to present them.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views#Generating-data-source-snapshots","kind":"section","role":"pseudoSymbol","title":"Generating data source snapshots","type":"section","url":"\/tutorials\/app-dev-training\/adopting-collection-views#Generating-data-source-snapshots"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/adopting-collection-views#Using-modern-collection-views-in-Today":{"abstract":[{"text":"Collection views manage ordered collections of data items and use customizable layouts to present them.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/adopting-collection-views#Using-modern-collection-views-in-Today","kind":"section","role":"pseudoSymbol","title":"Using modern collection views in Today","type":"section","url":"\/tutorials\/app-dev-training\/adopting-collection-views#Using-modern-collection-views-in-Today"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/building-a-network-test-client":{"abstract":[{"text":"Start building a network client by building a test client.","type":"text"},{"text":" ","type":"text"},{"text":"Test and preview your views without a network.","type":"text"}],"estimatedTime":"25min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/building-a-network-test-client","kind":"project","role":"project","title":"Building a network test client","type":"topic","url":"\/tutorials\/app-dev-training\/building-a-network-test-client"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/building-a-network-test-client#Create-a-network-client":{"abstract":[{"text":"Start building a network client by building a test client.","type":"text"},{"text":" ","type":"text"},{"text":"Test and preview your views without a network.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/building-a-network-test-client#Create-a-network-client","kind":"section","role":"pseudoSymbol","title":"Create a network client","type":"section","url":"\/tutorials\/app-dev-training\/building-a-network-test-client#Create-a-network-client"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/building-a-network-test-client#Test-the-quake-client":{"abstract":[{"text":"Start building a network client by building a test client.","type":"text"},{"text":" ","type":"text"},{"text":"Test and preview your views without a network.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/building-a-network-test-client#Test-the-quake-client","kind":"section","role":"pseudoSymbol","title":"Test the quake client","type":"section","url":"\/tutorials\/app-dev-training\/building-a-network-test-client#Test-the-quake-client"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/building-a-network-test-client#View-client-data":{"abstract":[{"text":"Start building a network client by building a test client.","type":"text"},{"text":" ","type":"text"},{"text":"Test and preview your views without a network.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/building-a-network-test-client#View-client-data","kind":"section","role":"pseudoSymbol","title":"View client data","type":"section","url":"\/tutorials\/app-dev-training\/building-a-network-test-client#View-client-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/caching-network-data":{"abstract":[{"text":"Your quake client fetches a list of earthquakes from the network.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll extend the client to fetch location details for each earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"Each earthquake requires one additional fetch to retrieve the location information.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll make multiple network connections concurrently while maintaining a cache of replies.","type":"text"}],"estimatedTime":"25min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/caching-network-data","kind":"project","role":"project","title":"Caching network data","type":"topic","url":"\/tutorials\/app-dev-training\/caching-network-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/caching-network-data#Cache-quake-details":{"abstract":[{"text":"Your quake client fetches a list of earthquakes from the network.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll extend the client to fetch location details for each earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"Each earthquake requires one additional fetch to retrieve the location information.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll make multiple network connections concurrently while maintaining a cache of replies.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/caching-network-data#Cache-quake-details","kind":"section","role":"pseudoSymbol","title":"Cache quake details","type":"section","url":"\/tutorials\/app-dev-training\/caching-network-data#Cache-quake-details"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/caching-network-data#Fetch-multiple-locations":{"abstract":[{"text":"Your quake client fetches a list of earthquakes from the network.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll extend the client to fetch location details for each earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"Each earthquake requires one additional fetch to retrieve the location information.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll make multiple network connections concurrently while maintaining a cache of replies.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/caching-network-data#Fetch-multiple-locations","kind":"section","role":"pseudoSymbol","title":"Fetch multiple locations","type":"section","url":"\/tutorials\/app-dev-training\/caching-network-data#Fetch-multiple-locations"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/caching-network-data#Fetch-quake-location":{"abstract":[{"text":"Your quake client fetches a list of earthquakes from the network.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll extend the client to fetch location details for each earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"Each earthquake requires one additional fetch to retrieve the location information.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll make multiple network connections concurrently while maintaining a cache of replies.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/caching-network-data#Fetch-quake-location","kind":"section","role":"pseudoSymbol","title":"Fetch quake location","type":"section","url":"\/tutorials\/app-dev-training\/caching-network-data#Fetch-quake-location"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/continuing-your-learning":{"abstract":[{"text":"You completed this introduction to UIKit and built a complete app that integrates with Reminders.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned and get ideas about where to go from here.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning","kind":"article","role":"article","title":"Continuing your learning","type":"topic","url":"\/tutorials\/app-dev-training\/continuing-your-learning"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/continuing-your-learning#Connecting-with-others":{"abstract":[{"text":"You completed this introduction to UIKit and built a complete app that integrates with Reminders.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#Connecting-with-others","kind":"section","role":"pseudoSymbol","title":"Connecting with others","type":"section","url":"\/tutorials\/app-dev-training\/continuing-your-learning#Connecting-with-others"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/continuing-your-learning#Continuing-your-training":{"abstract":[{"text":"You completed this introduction to UIKit and built a complete app that integrates with Reminders.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#Continuing-your-training","kind":"section","role":"pseudoSymbol","title":"Continuing your training","type":"section","url":"\/tutorials\/app-dev-training\/continuing-your-learning#Continuing-your-training"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/continuing-your-learning#Creating-more-apps":{"abstract":[{"text":"You completed this introduction to UIKit and built a complete app that integrates with Reminders.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#Creating-more-apps","kind":"section","role":"pseudoSymbol","title":"Creating more apps","type":"section","url":"\/tutorials\/app-dev-training\/continuing-your-learning#Creating-more-apps"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/continuing-your-learning#Researching-design":{"abstract":[{"text":"You completed this introduction to UIKit and built a complete app that integrates with Reminders.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#Researching-design","kind":"section","role":"pseudoSymbol","title":"Researching design","type":"section","url":"\/tutorials\/app-dev-training\/continuing-your-learning#Researching-design"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/continuing-your-learning#What-youve-learned":{"abstract":[{"text":"You completed this introduction to UIKit and built a complete app that integrates with Reminders.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#What-youve-learned","kind":"section","role":"pseudoSymbol","title":"What you’ve learned","type":"section","url":"\/tutorials\/app-dev-training\/continuing-your-learning#What-youve-learned"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/continuing-your-learning#Whats-next":{"abstract":[{"text":"You completed this introduction to UIKit and built a complete app that integrates with Reminders.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/continuing-your-learning#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/continuing-your-learning#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-card-view":{"abstract":[{"text":"Scrumdinger keeps a list of daily scrums that the user attends, and it displays that list in its root view.","type":"text"}],"estimatedTime":"20min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view","kind":"project","role":"project","title":"Creating a card view","type":"topic","url":"\/tutorials\/app-dev-training\/creating-a-card-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-card-view#Create-a-daily-scrum-model":{"abstract":[{"text":"Scrumdinger keeps a list of daily scrums that the user attends, and it displays that list in its root view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Create-a-daily-scrum-model","kind":"section","role":"pseudoSymbol","title":"Create a daily scrum model","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-card-view#Create-a-daily-scrum-model"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-card-view#Create-the-card-view":{"abstract":[{"text":"Scrumdinger keeps a list of daily scrums that the user attends, and it displays that list in its root view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Create-the-card-view","kind":"section","role":"pseudoSymbol","title":"Create the card view","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-card-view#Create-the-card-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-card-view#Customize-the-label-style":{"abstract":[{"text":"Scrumdinger keeps a list of daily scrums that the user attends, and it displays that list in its root view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Customize-the-label-style","kind":"section","role":"pseudoSymbol","title":"Customize the label style","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-card-view#Customize-the-label-style"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-card-view#Import-color-themes":{"abstract":[{"text":"Scrumdinger keeps a list of daily scrums that the user attends, and it displays that list in its root view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Import-color-themes","kind":"section","role":"pseudoSymbol","title":"Import color themes","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-card-view#Import-color-themes"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-card-view#Make-the-card-view-accessible":{"abstract":[{"text":"Scrumdinger keeps a list of daily scrums that the user attends, and it displays that list in its root view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Make-the-card-view-accessible","kind":"section","role":"pseudoSymbol","title":"Make the card view accessible","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-card-view#Make-the-card-view-accessible"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-card-view#Stylize-the-card":{"abstract":[{"text":"Scrumdinger keeps a list of daily scrums that the user attends, and it displays that list in its root view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-card-view#Stylize-the-card","kind":"section","role":"pseudoSymbol","title":"Stylize the card","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-card-view#Stylize-the-card"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-gradient-background":{"abstract":[{"text":"Color is an important aspect of app design and can help establish visual consistency, communicate functionality, and align with brand identity.","type":"text"}],"estimatedTime":"10min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-gradient-background","kind":"project","role":"project","title":"Creating a gradient background","type":"topic","url":"\/tutorials\/app-dev-training\/creating-a-gradient-background"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-gradient-background#Add-the-gradient-layer-to-the-list":{"abstract":[{"text":"Color is an important aspect of app design and can help establish visual consistency, communicate functionality, and align with brand identity.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-gradient-background#Add-the-gradient-layer-to-the-list","kind":"section","role":"pseudoSymbol","title":"Add the gradient layer to the list","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-gradient-background#Add-the-gradient-layer-to-the-list"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-gradient-background#Create-a-gradient-layer":{"abstract":[{"text":"Color is an important aspect of app design and can help establish visual consistency, communicate functionality, and align with brand identity.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-gradient-background#Create-a-gradient-layer","kind":"section","role":"pseudoSymbol","title":"Create a gradient layer","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-gradient-background#Create-a-gradient-layer"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-list-view":{"abstract":[{"text":"In this tutorial, you’ll create your app’s root view, a collection view with a list layout that displays the user’s daily reminders.","type":"text"}],"estimatedTime":"30min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view","kind":"project","role":"project","title":"Creating a list view","type":"topic","url":"\/tutorials\/app-dev-training\/creating-a-list-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-list-view#Add-a-collection-view-controller":{"abstract":[{"text":"In this tutorial, you’ll create your app’s root view, a collection view with a list layout that displays the user’s daily reminders.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Add-a-collection-view-controller","kind":"section","role":"pseudoSymbol","title":"Add a collection view controller","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-list-view#Add-a-collection-view-controller"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-list-view#Apply-a-snapshot":{"abstract":[{"text":"In this tutorial, you’ll create your app’s root view, a collection view with a list layout that displays the user’s daily reminders.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Apply-a-snapshot","kind":"section","role":"pseudoSymbol","title":"Apply a snapshot","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-list-view#Apply-a-snapshot"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-list-view#Configure-the-collection-as-a-list":{"abstract":[{"text":"In this tutorial, you’ll create your app’s root view, a collection view with a list layout that displays the user’s daily reminders.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Configure-the-collection-as-a-list","kind":"section","role":"pseudoSymbol","title":"Configure the collection as a list","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-list-view#Configure-the-collection-as-a-list"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-list-view#Configure-the-data-source":{"abstract":[{"text":"In this tutorial, you’ll create your app’s root view, a collection view with a list layout that displays the user’s daily reminders.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Configure-the-data-source","kind":"section","role":"pseudoSymbol","title":"Configure the data source","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-list-view#Configure-the-data-source"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-list-view#Create-a-project":{"abstract":[{"text":"In this tutorial, you’ll create your app’s root view, a collection view with a list layout that displays the user’s daily reminders.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Create-a-project","kind":"section","role":"pseudoSymbol","title":"Create a project","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-list-view#Create-a-project"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-list-view#Create-a-reminder-model":{"abstract":[{"text":"In this tutorial, you’ll create your app’s root view, a collection view with a list layout that displays the user’s daily reminders.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-list-view#Create-a-reminder-model","kind":"section","role":"pseudoSymbol","title":"Create a reminder model","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-list-view#Create-a-reminder-model"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-navigation-hierarchy":{"abstract":[{"text":"You’ve learned how to create SwiftUI views, but you need to know how to navigate between them.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a navigation hierarchy.","type":"text"}],"estimatedTime":"20min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy","kind":"project","role":"project","title":"Creating a navigation hierarchy","type":"topic","url":"\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-navigation-hierarchy#Add-visual-components-to-the-detail-view":{"abstract":[{"text":"You’ve learned how to create SwiftUI views, but you need to know how to navigate between them.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a navigation hierarchy.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Add-visual-components-to-the-detail-view","kind":"section","role":"pseudoSymbol","title":"Add visual components to the detail view","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Add-visual-components-to-the-detail-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-navigation-hierarchy#Create-the-detail-view":{"abstract":[{"text":"You’ve learned how to create SwiftUI views, but you need to know how to navigate between them.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a navigation hierarchy.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Create-the-detail-view","kind":"section","role":"pseudoSymbol","title":"Create the detail view","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Create-the-detail-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-navigation-hierarchy#Iterate-through-attendees":{"abstract":[{"text":"You’ve learned how to create SwiftUI views, but you need to know how to navigate between them.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a navigation hierarchy.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Iterate-through-attendees","kind":"section","role":"pseudoSymbol","title":"Iterate through attendees","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Iterate-through-attendees"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-navigation-hierarchy#Navigate-between-screens":{"abstract":[{"text":"You’ve learned how to create SwiftUI views, but you need to know how to navigate between them.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a navigation hierarchy.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Navigate-between-screens","kind":"section","role":"pseudoSymbol","title":"Navigate between screens","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Navigate-between-screens"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-navigation-hierarchy#Set-up-navigation":{"abstract":[{"text":"You’ve learned how to create SwiftUI views, but you need to know how to navigate between them.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a navigation hierarchy.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Set-up-navigation","kind":"section","role":"pseudoSymbol","title":"Set up navigation","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-navigation-hierarchy#Set-up-navigation"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-progress-view":{"abstract":[{"text":"Create a progress view in Today so that users can track the percentage of reminders they’ve completed.","type":"text"}],"estimatedTime":"40min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view","kind":"project","role":"project","title":"Creating a progress view","type":"topic","url":"\/tutorials\/app-dev-training\/creating-a-progress-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-progress-view#Create-relational-constraints":{"abstract":[{"text":"Create a progress view in Today so that users can track the percentage of reminders they’ve completed.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Create-relational-constraints","kind":"section","role":"pseudoSymbol","title":"Create relational constraints","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-progress-view#Create-relational-constraints"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-progress-view#Customize-the-appearance-of-the-progress-circle":{"abstract":[{"text":"Create a progress view in Today so that users can track the percentage of reminders they’ve completed.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Customize-the-appearance-of-the-progress-circle","kind":"section","role":"pseudoSymbol","title":"Customize the appearance of the progress circle","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-progress-view#Customize-the-appearance-of-the-progress-circle"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-progress-view#Display-the-header-view":{"abstract":[{"text":"Create a progress view in Today so that users can track the percentage of reminders they’ve completed.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Display-the-header-view","kind":"section","role":"pseudoSymbol","title":"Display the header view","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-progress-view#Display-the-header-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-progress-view#Make-the-progress-view-accessible":{"abstract":[{"text":"Create a progress view in Today so that users can track the percentage of reminders they’ve completed.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Make-the-progress-view-accessible","kind":"section","role":"pseudoSymbol","title":"Make the progress view accessible","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-progress-view#Make-the-progress-view-accessible"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-a-progress-view#Update-progress-dynamically":{"abstract":[{"text":"Create a progress view in Today so that users can track the percentage of reminders they’ve completed.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-a-progress-view#Update-progress-dynamically","kind":"section","role":"pseudoSymbol","title":"Update progress dynamically","type":"section","url":"\/tutorials\/app-dev-training\/creating-a-progress-view#Update-progress-dynamically"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-the-edit-view":{"abstract":[{"text":"In this tutorial, you’ll create a new view containing controls to edit a scrum.","type":"text"},{"text":" ","type":"text"},{"text":"SwiftUI provides all the standard controls for iOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll add buttons, a slider, and a text field.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll update the detail view to present your new edit view.","type":"text"}],"estimatedTime":"30min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view","kind":"project","role":"project","title":"Creating the edit view","type":"topic","url":"\/tutorials\/app-dev-training\/creating-the-edit-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-the-edit-view#Add-accessibility-modifiers":{"abstract":[{"text":"In this tutorial, you’ll create a new view containing controls to edit a scrum.","type":"text"},{"text":" ","type":"text"},{"text":"SwiftUI provides all the standard controls for iOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll add buttons, a slider, and a text field.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll update the detail view to present your new edit view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view#Add-accessibility-modifiers","kind":"section","role":"pseudoSymbol","title":"Add accessibility modifiers","type":"section","url":"\/tutorials\/app-dev-training\/creating-the-edit-view#Add-accessibility-modifiers"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-the-edit-view#Add-an-edit-view-for-scrum-details":{"abstract":[{"text":"In this tutorial, you’ll create a new view containing controls to edit a scrum.","type":"text"},{"text":" ","type":"text"},{"text":"SwiftUI provides all the standard controls for iOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll add buttons, a slider, and a text field.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll update the detail view to present your new edit view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view#Add-an-edit-view-for-scrum-details","kind":"section","role":"pseudoSymbol","title":"Add an edit view for scrum details","type":"section","url":"\/tutorials\/app-dev-training\/creating-the-edit-view#Add-an-edit-view-for-scrum-details"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-the-edit-view#Display-attendees-in-the-edit-view":{"abstract":[{"text":"In this tutorial, you’ll create a new view containing controls to edit a scrum.","type":"text"},{"text":" ","type":"text"},{"text":"SwiftUI provides all the standard controls for iOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll add buttons, a slider, and a text field.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll update the detail view to present your new edit view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view#Display-attendees-in-the-edit-view","kind":"section","role":"pseudoSymbol","title":"Display attendees in the edit view","type":"section","url":"\/tutorials\/app-dev-training\/creating-the-edit-view#Display-attendees-in-the-edit-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/creating-the-edit-view#Present-the-edit-view":{"abstract":[{"text":"In this tutorial, you’ll create a new view containing controls to edit a scrum.","type":"text"},{"text":" ","type":"text"},{"text":"SwiftUI provides all the standard controls for iOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll add buttons, a slider, and a text field.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll update the detail view to present your new edit view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/creating-the-edit-view#Present-the-edit-view","kind":"section","role":"pseudoSymbol","title":"Present the edit view","type":"section","url":"\/tutorials\/app-dev-training\/creating-the-edit-view#Present-the-edit-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"estimatedTime":"15min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts","kind":"article","role":"article","title":"Customizing menus","type":"topic","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts#Adding-menu-bar-commands":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Adding-menu-bar-commands","kind":"section","role":"pseudoSymbol","title":"Adding menu bar commands","type":"section","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Adding-menu-bar-commands"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts#Creating-a-context-menu":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Creating-a-context-menu","kind":"section","role":"pseudoSymbol","title":"Creating a context menu","type":"section","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Creating-a-context-menu"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts#Creating-command-menus":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Creating-command-menus","kind":"section","role":"pseudoSymbol","title":"Creating command menus","type":"section","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Creating-command-menus"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts#Experimenting-with-adaptive-menus":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Experimenting-with-adaptive-menus","kind":"section","role":"pseudoSymbol","title":"Experimenting with adaptive menus","type":"section","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Experimenting-with-adaptive-menus"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts#Experimenting-with-unavailable-menu-commands":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Experimenting-with-unavailable-menu-commands","kind":"section","role":"pseudoSymbol","title":"Experimenting with unavailable menu commands","type":"section","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Experimenting-with-unavailable-menu-commands"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts#Removing-existing-commands":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Removing-existing-commands","kind":"section","role":"pseudoSymbol","title":"Removing existing commands","type":"section","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Removing-existing-commands"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts#Replacing-existing-commands":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Replacing-existing-commands","kind":"section","role":"pseudoSymbol","title":"Replacing existing commands","type":"section","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Replacing-existing-commands"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts#Supplementing-commands-with-keyboard-shortcuts":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Supplementing-commands-with-keyboard-shortcuts","kind":"section","role":"pseudoSymbol","title":"Supplementing commands with keyboard shortcuts","type":"section","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Supplementing-commands-with-keyboard-shortcuts"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts#Whats-next":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/customizing-menus-with-commands-and-shortcuts#Working-with-default-commands":{"abstract":[{"text":"Menu bars and keyboard shortcuts are ubiquitous to the macOS experience.","type":"text"},{"text":" ","type":"text"},{"text":"Although users can directly interact with UI elements, macOS apps support alternate workflows by surfacing frequent actions in an app’s menu or with keyboard shortcuts.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Working-with-default-commands","kind":"section","role":"pseudoSymbol","title":"Working with default commands","type":"section","url":"\/tutorials\/app-dev-training\/customizing-menus-with-commands-and-shortcuts#Working-with-default-commands"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/decoding-structured-json":{"abstract":[{"text":"In this tutorial, you’ll use Swift APIs to decode earthquake information that the USGS provides.","type":"text"},{"text":" ","type":"text"},{"text":"The USGS encodes the earthquake observations in JSON format, which is a popular choice for providing data on the web.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll access child objects within a JSON hierarchy and ignore fields your app doesn’t need.","type":"text"}],"estimatedTime":"30min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json","kind":"project","role":"project","title":"Decoding structured JSON","type":"topic","url":"\/tutorials\/app-dev-training\/decoding-structured-json"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/decoding-structured-json#Decode-GeoJSON":{"abstract":[{"text":"In this tutorial, you’ll use Swift APIs to decode earthquake information that the USGS provides.","type":"text"},{"text":" ","type":"text"},{"text":"The USGS encodes the earthquake observations in JSON format, which is a popular choice for providing data on the web.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll access child objects within a JSON hierarchy and ignore fields your app doesn’t need.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Decode-GeoJSON","kind":"section","role":"pseudoSymbol","title":"Decode GeoJSON","type":"section","url":"\/tutorials\/app-dev-training\/decoding-structured-json#Decode-GeoJSON"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/decoding-structured-json#Decode-a-location":{"abstract":[{"text":"In this tutorial, you’ll use Swift APIs to decode earthquake information that the USGS provides.","type":"text"},{"text":" ","type":"text"},{"text":"The USGS encodes the earthquake observations in JSON format, which is a popular choice for providing data on the web.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll access child objects within a JSON hierarchy and ignore fields your app doesn’t need.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Decode-a-location","kind":"section","role":"pseudoSymbol","title":"Decode a location","type":"section","url":"\/tutorials\/app-dev-training\/decoding-structured-json#Decode-a-location"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/decoding-structured-json#Decode-earthquake-data":{"abstract":[{"text":"In this tutorial, you’ll use Swift APIs to decode earthquake information that the USGS provides.","type":"text"},{"text":" ","type":"text"},{"text":"The USGS encodes the earthquake observations in JSON format, which is a popular choice for providing data on the web.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll access child objects within a JSON hierarchy and ignore fields your app doesn’t need.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Decode-earthquake-data","kind":"section","role":"pseudoSymbol","title":"Decode earthquake data","type":"section","url":"\/tutorials\/app-dev-training\/decoding-structured-json#Decode-earthquake-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/decoding-structured-json#Test-decoding-a-location":{"abstract":[{"text":"In this tutorial, you’ll use Swift APIs to decode earthquake information that the USGS provides.","type":"text"},{"text":" ","type":"text"},{"text":"The USGS encodes the earthquake observations in JSON format, which is a popular choice for providing data on the web.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll access child objects within a JSON hierarchy and ignore fields your app doesn’t need.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Test-decoding-a-location","kind":"section","role":"pseudoSymbol","title":"Test decoding a location","type":"section","url":"\/tutorials\/app-dev-training\/decoding-structured-json#Test-decoding-a-location"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/decoding-structured-json#Test-the-decoder":{"abstract":[{"text":"In this tutorial, you’ll use Swift APIs to decode earthquake information that the USGS provides.","type":"text"},{"text":" ","type":"text"},{"text":"The USGS encodes the earthquake observations in JSON format, which is a popular choice for providing data on the web.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll access child objects within a JSON hierarchy and ignore fields your app doesn’t need.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/decoding-structured-json#Test-the-decoder","kind":"section","role":"pseudoSymbol","title":"Test the decoder","type":"section","url":"\/tutorials\/app-dev-training\/decoding-structured-json#Test-the-decoder"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-app-settings":{"abstract":[{"text":"macOS apps often offer users a way to customize their experience.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the different areas where you can surface app settings.","type":"text"},{"text":" ","type":"text"},{"text":"Examine how Article Accelerator creates an app-specific settings window.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-app-settings","kind":"article","role":"article","title":"Displaying app settings","type":"topic","url":"\/tutorials\/app-dev-training\/displaying-app-settings"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-app-settings#Choosing-a-location-for-app-settings":{"abstract":[{"text":"macOS apps often offer users a way to customize their experience.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the different areas where you can surface app settings.","type":"text"},{"text":" ","type":"text"},{"text":"Examine how Article Accelerator creates an app-specific settings window.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-app-settings#Choosing-a-location-for-app-settings","kind":"section","role":"pseudoSymbol","title":"Choosing a location for app settings","type":"section","url":"\/tutorials\/app-dev-training\/displaying-app-settings#Choosing-a-location-for-app-settings"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-app-settings#Creating-a-settings-window":{"abstract":[{"text":"macOS apps often offer users a way to customize their experience.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the different areas where you can surface app settings.","type":"text"},{"text":" ","type":"text"},{"text":"Examine how Article Accelerator creates an app-specific settings window.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-app-settings#Creating-a-settings-window","kind":"section","role":"pseudoSymbol","title":"Creating a settings window","type":"section","url":"\/tutorials\/app-dev-training\/displaying-app-settings#Creating-a-settings-window"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-app-settings#Defining-Article-Accelerator-settings":{"abstract":[{"text":"macOS apps often offer users a way to customize their experience.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the different areas where you can surface app settings.","type":"text"},{"text":" ","type":"text"},{"text":"Examine how Article Accelerator creates an app-specific settings window.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-app-settings#Defining-Article-Accelerator-settings","kind":"section","role":"pseudoSymbol","title":"Defining Article Accelerator settings","type":"section","url":"\/tutorials\/app-dev-training\/displaying-app-settings#Defining-Article-Accelerator-settings"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-app-settings#Whats-next":{"abstract":[{"text":"macOS apps often offer users a way to customize their experience.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the different areas where you can surface app settings.","type":"text"},{"text":" ","type":"text"},{"text":"Examine how Article Accelerator creates an app-specific settings window.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-app-settings#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/displaying-app-settings#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-cell-info":{"abstract":[{"text":"Today uses a collection view to display a list of reminders in a sequence of cells.","type":"text"}],"estimatedTime":"20min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info","kind":"project","role":"project","title":"Displaying cell info","type":"topic","url":"\/tutorials\/app-dev-training\/displaying-cell-info"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-cell-info#Change-the-cell-background-color":{"abstract":[{"text":"Today uses a collection view to display a list of reminders in a sequence of cells.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info#Change-the-cell-background-color","kind":"section","role":"pseudoSymbol","title":"Change the cell background color","type":"section","url":"\/tutorials\/app-dev-training\/displaying-cell-info#Change-the-cell-background-color"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-cell-info#Display-the-reminder-complete-status":{"abstract":[{"text":"Today uses a collection view to display a list of reminders in a sequence of cells.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info#Display-the-reminder-complete-status","kind":"section","role":"pseudoSymbol","title":"Display the reminder complete status","type":"section","url":"\/tutorials\/app-dev-training\/displaying-cell-info#Display-the-reminder-complete-status"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-cell-info#Format-the-date-and-time":{"abstract":[{"text":"Today uses a collection view to display a list of reminders in a sequence of cells.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info#Format-the-date-and-time","kind":"section","role":"pseudoSymbol","title":"Format the date and time","type":"section","url":"\/tutorials\/app-dev-training\/displaying-cell-info#Format-the-date-and-time"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-cell-info#Organize-view-controllers":{"abstract":[{"text":"Today uses a collection view to display a list of reminders in a sequence of cells.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-cell-info#Organize-view-controllers","kind":"section","role":"pseudoSymbol","title":"Organize view controllers","type":"section","url":"\/tutorials\/app-dev-training\/displaying-cell-info#Organize-view-controllers"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-data-in-a-list":{"abstract":[{"code":"List","type":"codeVoice"},{"text":" is a container view that displays rows of data arranged in a single, scrollable column.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll use a ","type":"text"},{"code":"List","type":"codeVoice"},{"text":" view to display a summary of the user’s daily scrums.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll make the list the main screen of the app.","type":"text"}],"estimatedTime":"15min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-data-in-a-list","kind":"project","role":"project","title":"Displaying data in a list","type":"topic","url":"\/tutorials\/app-dev-training\/displaying-data-in-a-list"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-data-in-a-list#Display-a-list-of-daily-scrums":{"abstract":[{"code":"List","type":"codeVoice"},{"text":" is a container view that displays rows of data arranged in a single, scrollable column.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll use a ","type":"text"},{"code":"List","type":"codeVoice"},{"text":" view to display a summary of the user’s daily scrums.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll make the list the main screen of the app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-data-in-a-list#Display-a-list-of-daily-scrums","kind":"section","role":"pseudoSymbol","title":"Display a list of daily scrums","type":"section","url":"\/tutorials\/app-dev-training\/displaying-data-in-a-list#Display-a-list-of-daily-scrums"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-data-in-a-list#Make-scrums-identifiable":{"abstract":[{"code":"List","type":"codeVoice"},{"text":" is a container view that displays rows of data arranged in a single, scrollable column.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll use a ","type":"text"},{"code":"List","type":"codeVoice"},{"text":" view to display a summary of the user’s daily scrums.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll make the list the main screen of the app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-data-in-a-list#Make-scrums-identifiable","kind":"section","role":"pseudoSymbol","title":"Make scrums identifiable","type":"section","url":"\/tutorials\/app-dev-training\/displaying-data-in-a-list#Make-scrums-identifiable"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-multi-column-navigation":{"abstract":[{"text":"An intuitive navigation structure helps organize your app’s user interface so that users can easily find the content they’re looking for.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll explore how Article Accelerator uses a multicolumn container to guide users through a hierarchy of information.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-multi-column-navigation","kind":"article","role":"article","title":"Displaying multicolumn navigation","type":"topic","url":"\/tutorials\/app-dev-training\/displaying-multi-column-navigation"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-multi-column-navigation#Defining-a-sidebar-interface":{"abstract":[{"text":"An intuitive navigation structure helps organize your app’s user interface so that users can easily find the content they’re looking for.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll explore how Article Accelerator uses a multicolumn container to guide users through a hierarchy of information.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-multi-column-navigation#Defining-a-sidebar-interface","kind":"section","role":"pseudoSymbol","title":"Defining a sidebar interface","type":"section","url":"\/tutorials\/app-dev-training\/displaying-multi-column-navigation#Defining-a-sidebar-interface"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-multi-column-navigation#Navigating-parallel-categories":{"abstract":[{"text":"An intuitive navigation structure helps organize your app’s user interface so that users can easily find the content they’re looking for.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll explore how Article Accelerator uses a multicolumn container to guide users through a hierarchy of information.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-multi-column-navigation#Navigating-parallel-categories","kind":"section","role":"pseudoSymbol","title":"Navigating parallel categories","type":"section","url":"\/tutorials\/app-dev-training\/displaying-multi-column-navigation#Navigating-parallel-categories"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-multi-column-navigation#Whats-next":{"abstract":[{"text":"An intuitive navigation structure helps organize your app’s user interface so that users can easily find the content they’re looking for.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll explore how Article Accelerator uses a multicolumn container to guide users through a hierarchy of information.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-multi-column-navigation#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/displaying-multi-column-navigation#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-reminder-details":{"abstract":[{"text":"Every reminder has properties that make it unique.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a detail view controller that displays the details of a reminder in a list collection view.","type":"text"}],"estimatedTime":"25min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details","kind":"project","role":"project","title":"Displaying reminder details","type":"topic","url":"\/tutorials\/app-dev-training\/displaying-reminder-details"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-reminder-details#Create-a-reminder-view":{"abstract":[{"text":"Every reminder has properties that make it unique.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a detail view controller that displays the details of a reminder in a list collection view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Create-a-reminder-view","kind":"section","role":"pseudoSymbol","title":"Create a reminder view","type":"section","url":"\/tutorials\/app-dev-training\/displaying-reminder-details#Create-a-reminder-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-reminder-details#Create-an-enumeration-for-rows":{"abstract":[{"text":"Every reminder has properties that make it unique.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a detail view controller that displays the details of a reminder in a list collection view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Create-an-enumeration-for-rows","kind":"section","role":"pseudoSymbol","title":"Create an enumeration for rows","type":"section","url":"\/tutorials\/app-dev-training\/displaying-reminder-details#Create-an-enumeration-for-rows"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-reminder-details#Display-the-detail-view":{"abstract":[{"text":"Every reminder has properties that make it unique.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a detail view controller that displays the details of a reminder in a list collection view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Display-the-detail-view","kind":"section","role":"pseudoSymbol","title":"Display the detail view","type":"section","url":"\/tutorials\/app-dev-training\/displaying-reminder-details#Display-the-detail-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-reminder-details#Set-up-a-snapshot":{"abstract":[{"text":"Every reminder has properties that make it unique.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a detail view controller that displays the details of a reminder in a list collection view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Set-up-a-snapshot","kind":"section","role":"pseudoSymbol","title":"Set up a snapshot","type":"section","url":"\/tutorials\/app-dev-training\/displaying-reminder-details#Set-up-a-snapshot"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-reminder-details#Set-up-the-data-source":{"abstract":[{"text":"Every reminder has properties that make it unique.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a detail view controller that displays the details of a reminder in a list collection view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Set-up-the-data-source","kind":"section","role":"pseudoSymbol","title":"Set up the data source","type":"section","url":"\/tutorials\/app-dev-training\/displaying-reminder-details#Set-up-the-data-source"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/displaying-reminder-details#Style-the-navigation-bar":{"abstract":[{"text":"Every reminder has properties that make it unique.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll create a detail view controller that displays the details of a reminder in a list collection view.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/displaying-reminder-details#Style-the-navigation-bar","kind":"section","role":"pseudoSymbol","title":"Style the navigation bar","type":"section","url":"\/tutorials\/app-dev-training\/displaying-reminder-details#Style-the-navigation-bar"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/dissecting-an-apps-architecture":{"abstract":[{"text":"Article Accelerator acts on a mixture of immutable data that a service provides and mutable data that a user creates.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll investigate the app’s structure and learn how data flows in and through the app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also learn how Article Accelerator organizes that data into various types.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture","kind":"article","role":"article","title":"Dissecting an app's architecture","type":"topic","url":"\/tutorials\/app-dev-training\/dissecting-an-apps-architecture"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/dissecting-an-apps-architecture#App-structure-and-responsibilities":{"abstract":[{"text":"Article Accelerator acts on a mixture of immutable data that a service provides and mutable data that a user creates.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll investigate the app’s structure and learn how data flows in and through the app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also learn how Article Accelerator organizes that data into various types.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#App-structure-and-responsibilities","kind":"section","role":"pseudoSymbol","title":"App structure and responsibilities","type":"section","url":"\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#App-structure-and-responsibilities"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/dissecting-an-apps-architecture#Article":{"abstract":[{"text":"Article Accelerator acts on a mixture of immutable data that a service provides and mutable data that a user creates.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll investigate the app’s structure and learn how data flows in and through the app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also learn how Article Accelerator organizes that data into various types.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#Article","kind":"section","role":"pseudoSymbol","title":"Article","type":"section","url":"\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#Article"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/dissecting-an-apps-architecture#ArticleStore-package":{"abstract":[{"text":"Article Accelerator acts on a mixture of immutable data that a service provides and mutable data that a user creates.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll investigate the app’s structure and learn how data flows in and through the app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also learn how Article Accelerator organizes that data into various types.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#ArticleStore-package","kind":"section","role":"pseudoSymbol","title":"ArticleStore package","type":"section","url":"\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#ArticleStore-package"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/dissecting-an-apps-architecture#Models":{"abstract":[{"text":"Article Accelerator acts on a mixture of immutable data that a service provides and mutable data that a user creates.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll investigate the app’s structure and learn how data flows in and through the app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also learn how Article Accelerator organizes that data into various types.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#Models","kind":"section","role":"pseudoSymbol","title":"Models","type":"section","url":"\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#Models"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/dissecting-an-apps-architecture#Whats-next":{"abstract":[{"text":"Article Accelerator acts on a mixture of immutable data that a service provides and mutable data that a user creates.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll investigate the app’s structure and learn how data flows in and through the app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also learn how Article Accelerator organizes that data into various types.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/dissecting-an-apps-architecture#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/drawing-the-timer-view":{"abstract":[{"text":"Scrumdinger tracks progress during daily scrum meetings, giving each attendee an equal amount of speaking time.","type":"text"}],"estimatedTime":"20min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/drawing-the-timer-view","kind":"project","role":"project","title":"Drawing the timer view","type":"topic","url":"\/tutorials\/app-dev-training\/drawing-the-timer-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/drawing-the-timer-view#Create-the-meeting-timer-view":{"abstract":[{"text":"Scrumdinger tracks progress during daily scrum meetings, giving each attendee an equal amount of speaking time.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/drawing-the-timer-view#Create-the-meeting-timer-view","kind":"section","role":"pseudoSymbol","title":"Create the meeting timer view","type":"section","url":"\/tutorials\/app-dev-training\/drawing-the-timer-view#Create-the-meeting-timer-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/drawing-the-timer-view#Draw-an-arc-segment":{"abstract":[{"text":"Scrumdinger tracks progress during daily scrum meetings, giving each attendee an equal amount of speaking time.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/drawing-the-timer-view#Draw-an-arc-segment","kind":"section","role":"pseudoSymbol","title":"Draw an arc segment","type":"section","url":"\/tutorials\/app-dev-training\/drawing-the-timer-view#Draw-an-arc-segment"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/drawing-the-timer-view#Draw-the-progress-ring":{"abstract":[{"text":"Scrumdinger tracks progress during daily scrum meetings, giving each attendee an equal amount of speaking time.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/drawing-the-timer-view#Draw-the-progress-ring","kind":"section","role":"pseudoSymbol","title":"Draw the progress ring","type":"section","url":"\/tutorials\/app-dev-training\/drawing-the-timer-view#Draw-the-progress-ring"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/editing-reminders":{"abstract":[{"text":"In this tutorial, you’ll add an editing mode to Today that lets users edit the details of a reminder.","type":"text"}],"estimatedTime":"30min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders","kind":"project","role":"project","title":"Editing reminders","type":"topic","url":"\/tutorials\/app-dev-training\/editing-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/editing-reminders#Add-a-working-reminder":{"abstract":[{"text":"In this tutorial, you’ll add an editing mode to Today that lets users edit the details of a reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Add-a-working-reminder","kind":"section","role":"pseudoSymbol","title":"Add a working reminder","type":"section","url":"\/tutorials\/app-dev-training\/editing-reminders#Add-a-working-reminder"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/editing-reminders#Cancel-edits":{"abstract":[{"text":"In this tutorial, you’ll add an editing mode to Today that lets users edit the details of a reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Cancel-edits","kind":"section","role":"pseudoSymbol","title":"Cancel edits","type":"section","url":"\/tutorials\/app-dev-training\/editing-reminders#Cancel-edits"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/editing-reminders#Make-the-date-configuration-editable":{"abstract":[{"text":"In this tutorial, you’ll add an editing mode to Today that lets users edit the details of a reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Make-the-date-configuration-editable","kind":"section","role":"pseudoSymbol","title":"Make the date configuration editable","type":"section","url":"\/tutorials\/app-dev-training\/editing-reminders#Make-the-date-configuration-editable"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/editing-reminders#Make-the-notes-configuration-editable":{"abstract":[{"text":"In this tutorial, you’ll add an editing mode to Today that lets users edit the details of a reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Make-the-notes-configuration-editable","kind":"section","role":"pseudoSymbol","title":"Make the notes configuration editable","type":"section","url":"\/tutorials\/app-dev-training\/editing-reminders#Make-the-notes-configuration-editable"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/editing-reminders#Make-the-text-configuration-editable":{"abstract":[{"text":"In this tutorial, you’ll add an editing mode to Today that lets users edit the details of a reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Make-the-text-configuration-editable","kind":"section","role":"pseudoSymbol","title":"Make the text configuration editable","type":"section","url":"\/tutorials\/app-dev-training\/editing-reminders#Make-the-text-configuration-editable"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/editing-reminders#Observe-changes-in-a-view-hierarchy":{"abstract":[{"text":"In this tutorial, you’ll add an editing mode to Today that lets users edit the details of a reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/editing-reminders#Observe-changes-in-a-view-hierarchy","kind":"section","role":"pseudoSymbol","title":"Observe changes in a view hierarchy","type":"section","url":"\/tutorials\/app-dev-training\/editing-reminders#Observe-changes-in-a-view-hierarchy"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-accessibility-in-today":{"abstract":[{"text":"During the development of Today, you’ve created a custom accessibility action, label, and value.","type":"text"},{"text":" ","type":"text"},{"text":"However, the app takes advantage of many accessibility features by default.","type":"text"}],"estimatedTime":"10min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today","kind":"article","role":"article","title":"Examining accessibility in Today","type":"topic","url":"\/tutorials\/app-dev-training\/examining-accessibility-in-today"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-accessibility-in-today#Accessibility-in-Today":{"abstract":[{"text":"During the development of Today, you’ve created a custom accessibility action, label, and value.","type":"text"},{"text":" ","type":"text"},{"text":"However, the app takes advantage of many accessibility features by default.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Accessibility-in-Today","kind":"section","role":"pseudoSymbol","title":"Accessibility in Today","type":"section","url":"\/tutorials\/app-dev-training\/examining-accessibility-in-today#Accessibility-in-Today"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-accessibility-in-today#Accessibility-in-UIKit":{"abstract":[{"text":"During the development of Today, you’ve created a custom accessibility action, label, and value.","type":"text"},{"text":" ","type":"text"},{"text":"However, the app takes advantage of many accessibility features by default.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Accessibility-in-UIKit","kind":"section","role":"pseudoSymbol","title":"Accessibility in UIKit","type":"section","url":"\/tutorials\/app-dev-training\/examining-accessibility-in-today#Accessibility-in-UIKit"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-accessibility-in-today#Actions-and-values":{"abstract":[{"text":"During the development of Today, you’ve created a custom accessibility action, label, and value.","type":"text"},{"text":" ","type":"text"},{"text":"However, the app takes advantage of many accessibility features by default.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Actions-and-values","kind":"section","role":"pseudoSymbol","title":"Actions and values","type":"section","url":"\/tutorials\/app-dev-training\/examining-accessibility-in-today#Actions-and-values"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-accessibility-in-today#Custom-accessibility-elements":{"abstract":[{"text":"During the development of Today, you’ve created a custom accessibility action, label, and value.","type":"text"},{"text":" ","type":"text"},{"text":"However, the app takes advantage of many accessibility features by default.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Custom-accessibility-elements","kind":"section","role":"pseudoSymbol","title":"Custom accessibility elements","type":"section","url":"\/tutorials\/app-dev-training\/examining-accessibility-in-today#Custom-accessibility-elements"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-accessibility-in-today#Labels-and-traits":{"abstract":[{"text":"During the development of Today, you’ve created a custom accessibility action, label, and value.","type":"text"},{"text":" ","type":"text"},{"text":"However, the app takes advantage of many accessibility features by default.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Labels-and-traits","kind":"section","role":"pseudoSymbol","title":"Labels and traits","type":"section","url":"\/tutorials\/app-dev-training\/examining-accessibility-in-today#Labels-and-traits"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-accessibility-in-today#Resources":{"abstract":[{"text":"During the development of Today, you’ve created a custom accessibility action, label, and value.","type":"text"},{"text":" ","type":"text"},{"text":"However, the app takes advantage of many accessibility features by default.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Resources","kind":"section","role":"pseudoSymbol","title":"Resources","type":"section","url":"\/tutorials\/app-dev-training\/examining-accessibility-in-today#Resources"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-accessibility-in-today#Ways-to-make-an-app-accessible":{"abstract":[{"text":"During the development of Today, you’ve created a custom accessibility action, label, and value.","type":"text"},{"text":" ","type":"text"},{"text":"However, the app takes advantage of many accessibility features by default.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Ways-to-make-an-app-accessible","kind":"section","role":"pseudoSymbol","title":"Ways to make an app accessible","type":"section","url":"\/tutorials\/app-dev-training\/examining-accessibility-in-today#Ways-to-make-an-app-accessible"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-accessibility-in-today#Whats-next":{"abstract":[{"text":"During the development of Today, you’ve created a custom accessibility action, label, and value.","type":"text"},{"text":" ","type":"text"},{"text":"However, the app takes advantage of many accessibility features by default.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-accessibility-in-today#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next","type":"section","url":"\/tutorials\/app-dev-training\/examining-accessibility-in-today#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-data-flow-in-scrumdinger":{"abstract":[{"text":"Scrumdinger includes two model objects in the starter projects: ","type":"text"},{"code":"ScrumTimer","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"SpeechRecognizer","type":"codeVoice"},{"text":".","type":"text"},{"text":" ","type":"text"},{"text":"These objects manage dynamic data that display in the Scrumdinger interface.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger","kind":"article","role":"article","title":"Examining data flow in Scrumdinger","type":"topic","url":"\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-data-flow-in-scrumdinger#Scrum-timer-data-flow":{"abstract":[{"text":"Scrumdinger includes two model objects in the starter projects: ","type":"text"},{"code":"ScrumTimer","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"SpeechRecognizer","type":"codeVoice"},{"text":".","type":"text"},{"text":" ","type":"text"},{"text":"These objects manage dynamic data that display in the Scrumdinger interface.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Scrum-timer-data-flow","kind":"section","role":"pseudoSymbol","title":"Scrum timer data flow","type":"section","url":"\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Scrum-timer-data-flow"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-data-flow-in-scrumdinger#Scrum-timer-meeting-properties":{"abstract":[{"text":"Scrumdinger includes two model objects in the starter projects: ","type":"text"},{"code":"ScrumTimer","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"SpeechRecognizer","type":"codeVoice"},{"text":".","type":"text"},{"text":" ","type":"text"},{"text":"These objects manage dynamic data that display in the Scrumdinger interface.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Scrum-timer-meeting-properties","kind":"section","role":"pseudoSymbol","title":"Scrum timer meeting properties","type":"section","url":"\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Scrum-timer-meeting-properties"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-data-flow-in-scrumdinger#Speech-recognizer-architecture":{"abstract":[{"text":"Scrumdinger includes two model objects in the starter projects: ","type":"text"},{"code":"ScrumTimer","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"SpeechRecognizer","type":"codeVoice"},{"text":".","type":"text"},{"text":" ","type":"text"},{"text":"These objects manage dynamic data that display in the Scrumdinger interface.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Speech-recognizer-architecture","kind":"section","role":"pseudoSymbol","title":"Speech recognizer architecture","type":"section","url":"\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Speech-recognizer-architecture"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/examining-data-flow-in-scrumdinger#Timing-of-speech-recognition-actions":{"abstract":[{"text":"Scrumdinger includes two model objects in the starter projects: ","type":"text"},{"code":"ScrumTimer","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"SpeechRecognizer","type":"codeVoice"},{"text":".","type":"text"},{"text":" ","type":"text"},{"text":"These objects manage dynamic data that display in the Scrumdinger interface.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Timing-of-speech-recognition-actions","kind":"section","role":"pseudoSymbol","title":"Timing of speech recognition actions","type":"section","url":"\/tutorials\/app-dev-training\/examining-data-flow-in-scrumdinger#Timing-of-speech-recognition-actions"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"estimatedTime":"10min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design","kind":"article","role":"article","title":"Exploring app design","type":"topic","url":"\/tutorials\/app-dev-training\/exploring-app-design"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Adapting-grid-contents-to-fill-a-window":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Adapting-grid-contents-to-fill-a-window","kind":"section","role":"pseudoSymbol","title":"Adapting grid contents to fill a window","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Adapting-grid-contents-to-fill-a-window"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Balancing-adaptability-and-readability":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Balancing-adaptability-and-readability","kind":"section","role":"pseudoSymbol","title":"Balancing adaptability and readability","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Balancing-adaptability-and-readability"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Choosing-when-to-fill-available-space":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Choosing-when-to-fill-available-space","kind":"section","role":"pseudoSymbol","title":"Choosing when to fill available space","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Choosing-when-to-fill-available-space"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Displaying-navigation-cues":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Displaying-navigation-cues","kind":"section","role":"pseudoSymbol","title":"Displaying navigation cues","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Displaying-navigation-cues"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Making-apps-for-everyone":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Making-apps-for-everyone","kind":"section","role":"pseudoSymbol","title":"Making apps for everyone","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Making-apps-for-everyone"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Orienting-users-in-your-app":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Orienting-users-in-your-app","kind":"section","role":"pseudoSymbol","title":"Orienting users in your app","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Orienting-users-in-your-app"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Providing-context-clues":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Providing-context-clues","kind":"section","role":"pseudoSymbol","title":"Providing context clues","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Providing-context-clues"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Representing-your-content-hierarchy":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Representing-your-content-hierarchy","kind":"section","role":"pseudoSymbol","title":"Representing your content hierarchy","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Representing-your-content-hierarchy"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Restricting-line-length-for-readability":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Restricting-line-length-for-readability","kind":"section","role":"pseudoSymbol","title":"Restricting line length for readability","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Restricting-line-length-for-readability"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Visually-organize-your-app":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Visually-organize-your-app","kind":"section","role":"pseudoSymbol","title":"Visually organize your app","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Visually-organize-your-app"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/exploring-app-design#Whats-next":{"abstract":[{"text":"Explore aspects of the app’s user experience and visual design.","type":"text"},{"text":" ","type":"text"},{"text":"In the previous chapters, you reviewed the technical aspects of Article Accelerator and learned some elements of user experience along the way.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll review more facets of user experience and visual design and learn what to look for in your own app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/exploring-app-design#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/exploring-app-design#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/filtering-reminders":{"abstract":[{"text":"For users to more easily access their reminders on the Today app’s main view, you’ll create a ","type":"text"},{"code":"ListStyle","type":"codeVoice"},{"text":" enumeration that separates reminders into three categories: Today, Future, and All.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also add a segmented control that lets users select different styles for the reminders list.","type":"text"}],"estimatedTime":"25min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders","kind":"project","role":"project","title":"Filtering reminders","type":"topic","url":"\/tutorials\/app-dev-training\/filtering-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/filtering-reminders#Add-action-to-segmented-control":{"abstract":[{"text":"For users to more easily access their reminders on the Today app’s main view, you’ll create a ","type":"text"},{"code":"ListStyle","type":"codeVoice"},{"text":" enumeration that separates reminders into three categories: Today, Future, and All.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also add a segmented control that lets users select different styles for the reminders list.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders#Add-action-to-segmented-control","kind":"section","role":"pseudoSymbol","title":"Add action to segmented control","type":"section","url":"\/tutorials\/app-dev-training\/filtering-reminders#Add-action-to-segmented-control"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/filtering-reminders#Create-a-list-style-enumeration":{"abstract":[{"text":"For users to more easily access their reminders on the Today app’s main view, you’ll create a ","type":"text"},{"code":"ListStyle","type":"codeVoice"},{"text":" enumeration that separates reminders into three categories: Today, Future, and All.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also add a segmented control that lets users select different styles for the reminders list.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders#Create-a-list-style-enumeration","kind":"section","role":"pseudoSymbol","title":"Create a list style enumeration","type":"section","url":"\/tutorials\/app-dev-training\/filtering-reminders#Create-a-list-style-enumeration"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/filtering-reminders#Display-a-segmented-control":{"abstract":[{"text":"For users to more easily access their reminders on the Today app’s main view, you’ll create a ","type":"text"},{"code":"ListStyle","type":"codeVoice"},{"text":" enumeration that separates reminders into three categories: Today, Future, and All.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also add a segmented control that lets users select different styles for the reminders list.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders#Display-a-segmented-control","kind":"section","role":"pseudoSymbol","title":"Display a segmented control","type":"section","url":"\/tutorials\/app-dev-training\/filtering-reminders#Display-a-segmented-control"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/filtering-reminders#Filter-reminders-by-list-style":{"abstract":[{"text":"For users to more easily access their reminders on the Today app’s main view, you’ll create a ","type":"text"},{"code":"ListStyle","type":"codeVoice"},{"text":" enumeration that separates reminders into three categories: Today, Future, and All.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also add a segmented control that lets users select different styles for the reminders list.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/filtering-reminders#Filter-reminders-by-list-style","kind":"section","role":"pseudoSymbol","title":"Filter reminders by list style","type":"section","url":"\/tutorials\/app-dev-training\/filtering-reminders#Filter-reminders-by-list-style"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/finding-more-resources":{"abstract":[{"text":"You completed this module on SwiftUI and built your first app. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources","kind":"article","role":"article","title":"Finding more resources","type":"topic","url":"\/tutorials\/app-dev-training\/finding-more-resources"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/finding-more-resources#Connecting-with-others":{"abstract":[{"text":"You completed this module on SwiftUI and built your first app. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Connecting-with-others","kind":"section","role":"pseudoSymbol","title":"Connecting with others","type":"section","url":"\/tutorials\/app-dev-training\/finding-more-resources#Connecting-with-others"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/finding-more-resources#Creating-more-apps":{"abstract":[{"text":"You completed this module on SwiftUI and built your first app. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Creating-more-apps","kind":"section","role":"pseudoSymbol","title":"Creating more apps","type":"section","url":"\/tutorials\/app-dev-training\/finding-more-resources#Creating-more-apps"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/finding-more-resources#Designing-for-everyone":{"abstract":[{"text":"You completed this module on SwiftUI and built your first app. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Designing-for-everyone","kind":"section","role":"pseudoSymbol","title":"Designing for everyone","type":"section","url":"\/tutorials\/app-dev-training\/finding-more-resources#Designing-for-everyone"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/finding-more-resources#Finding-inspiration":{"abstract":[{"text":"You completed this module on SwiftUI and built your first app. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Finding-inspiration","kind":"section","role":"pseudoSymbol","title":"Finding inspiration","type":"section","url":"\/tutorials\/app-dev-training\/finding-more-resources#Finding-inspiration"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/finding-more-resources#Ready-for-more-training":{"abstract":[{"text":"You completed this module on SwiftUI and built your first app. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Ready-for-more-training","kind":"section","role":"pseudoSymbol","title":"Ready for more training?","type":"section","url":"\/tutorials\/app-dev-training\/finding-more-resources#Ready-for-more-training"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/finding-more-resources#What-youve-learned":{"abstract":[{"text":"You completed this module on SwiftUI and built your first app. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#What-youve-learned","kind":"section","role":"pseudoSymbol","title":"What you’ve learned","type":"section","url":"\/tutorials\/app-dev-training\/finding-more-resources#What-youve-learned"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/finding-more-resources#Whats-next":{"abstract":[{"text":"You completed this module on SwiftUI and built your first app. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/finding-more-resources#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/finding-more-resources#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-ready-for-editing":{"abstract":[{"text":"In this tutorial, you’ll begin implementing an editing mode for Today so that users can modify the details of a reminder they’re viewing.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll configure the data source for view and editing modes, and add a button that transitions between the two modes.","type":"text"}],"estimatedTime":"30min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing","kind":"project","role":"project","title":"Getting ready for editing","type":"topic","url":"\/tutorials\/app-dev-training\/getting-ready-for-editing"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-ready-for-editing#Add-an-edit-button":{"abstract":[{"text":"In this tutorial, you’ll begin implementing an editing mode for Today so that users can modify the details of a reminder they’re viewing.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll configure the data source for view and editing modes, and add a button that transitions between the two modes.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing#Add-an-edit-button","kind":"section","role":"pseudoSymbol","title":"Add an edit button","type":"section","url":"\/tutorials\/app-dev-training\/getting-ready-for-editing#Add-an-edit-button"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-ready-for-editing#Configure-the-view-and-editing-modes":{"abstract":[{"text":"In this tutorial, you’ll begin implementing an editing mode for Today so that users can modify the details of a reminder they’re viewing.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll configure the data source for view and editing modes, and add a button that transitions between the two modes.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing#Configure-the-view-and-editing-modes","kind":"section","role":"pseudoSymbol","title":"Configure the view and editing modes","type":"section","url":"\/tutorials\/app-dev-training\/getting-ready-for-editing#Configure-the-view-and-editing-modes"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-ready-for-editing#Create-sections-for-an-editing-mode":{"abstract":[{"text":"In this tutorial, you’ll begin implementing an editing mode for Today so that users can modify the details of a reminder they’re viewing.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll configure the data source for view and editing modes, and add a button that transitions between the two modes.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing#Create-sections-for-an-editing-mode","kind":"section","role":"pseudoSymbol","title":"Create sections for an editing mode","type":"section","url":"\/tutorials\/app-dev-training\/getting-ready-for-editing#Create-sections-for-an-editing-mode"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-ready-for-editing#Show-headers-in-editing-mode":{"abstract":[{"text":"In this tutorial, you’ll begin implementing an editing mode for Today so that users can modify the details of a reminder they’re viewing.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll configure the data source for view and editing modes, and add a button that transitions between the two modes.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-ready-for-editing#Show-headers-in-editing-mode","kind":"section","role":"pseudoSymbol","title":"Show headers in editing mode","type":"section","url":"\/tutorials\/app-dev-training\/getting-ready-for-editing#Show-headers-in-editing-mode"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-article-accelerator":{"abstract":[{"text":"Explore SwiftUI sample code to learn how to build a desktop-class macOS app.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the development and design principles that make an app feel at home on Mac.","type":"text"}],"estimatedTime":"10min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator","kind":"article","role":"article","title":"Getting started with Article Accelerator","type":"topic","url":"\/tutorials\/app-dev-training\/getting-started-with-article-accelerator"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-article-accelerator#About-this-module":{"abstract":[{"text":"Explore SwiftUI sample code to learn how to build a desktop-class macOS app.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the development and design principles that make an app feel at home on Mac.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#About-this-module","kind":"section","role":"pseudoSymbol","title":"About this module","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#About-this-module"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-article-accelerator#Time-to-begin":{"abstract":[{"text":"Explore SwiftUI sample code to learn how to build a desktop-class macOS app.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the development and design principles that make an app feel at home on Mac.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Time-to-begin","kind":"section","role":"pseudoSymbol","title":"Time to begin","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Time-to-begin"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-article-accelerator#Tips-for-success":{"abstract":[{"text":"Explore SwiftUI sample code to learn how to build a desktop-class macOS app.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the development and design principles that make an app feel at home on Mac.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Tips-for-success","kind":"section","role":"pseudoSymbol","title":"Tips for success","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Tips-for-success"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-article-accelerator#Tour-of-the-app":{"abstract":[{"text":"Explore SwiftUI sample code to learn how to build a desktop-class macOS app.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the development and design principles that make an app feel at home on Mac.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Tour-of-the-app","kind":"section","role":"pseudoSymbol","title":"Tour of the app","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Tour-of-the-app"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-article-accelerator#Training-plan":{"abstract":[{"text":"Explore SwiftUI sample code to learn how to build a desktop-class macOS app.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the development and design principles that make an app feel at home on Mac.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Training-plan","kind":"section","role":"pseudoSymbol","title":"Training plan","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#Training-plan"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-article-accelerator#macOS-development":{"abstract":[{"text":"Explore SwiftUI sample code to learn how to build a desktop-class macOS app.","type":"text"},{"text":" ","type":"text"},{"text":"Learn about the development and design principles that make an app feel at home on Mac.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#macOS-development","kind":"section","role":"pseudoSymbol","title":"macOS development","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-article-accelerator#macOS-development"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-earthquakes":{"abstract":[{"text":"Take the next steps in app development, and build an app to download, decode, and present data from a network data source.","type":"text"},{"text":" ","type":"text"},{"text":"Use SwiftUI to build a simple interface to display dynamic data from a concurrent network client.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes","kind":"article","role":"article","title":"Getting started with Earthquakes","type":"topic","url":"\/tutorials\/app-dev-training\/getting-started-with-earthquakes"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-earthquakes#About-this-module":{"abstract":[{"text":"Take the next steps in app development, and build an app to download, decode, and present data from a network data source.","type":"text"},{"text":" ","type":"text"},{"text":"Use SwiftUI to build a simple interface to display dynamic data from a concurrent network client.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#About-this-module","kind":"section","role":"pseudoSymbol","title":"About this module","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-earthquakes#About-this-module"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-earthquakes#Special-thanks":{"abstract":[{"text":"Take the next steps in app development, and build an app to download, decode, and present data from a network data source.","type":"text"},{"text":" ","type":"text"},{"text":"Use SwiftUI to build a simple interface to display dynamic data from a concurrent network client.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Special-thanks","kind":"section","role":"pseudoSymbol","title":"Special thanks","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Special-thanks"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-earthquakes#Technology-overview":{"abstract":[{"text":"Take the next steps in app development, and build an app to download, decode, and present data from a network data source.","type":"text"},{"text":" ","type":"text"},{"text":"Use SwiftUI to build a simple interface to display dynamic data from a concurrent network client.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Technology-overview","kind":"section","role":"pseudoSymbol","title":"Technology overview","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Technology-overview"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-earthquakes#Time-to-begin":{"abstract":[{"text":"Take the next steps in app development, and build an app to download, decode, and present data from a network data source.","type":"text"},{"text":" ","type":"text"},{"text":"Use SwiftUI to build a simple interface to display dynamic data from a concurrent network client.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Time-to-begin","kind":"section","role":"pseudoSymbol","title":"Time to begin","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Time-to-begin"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-earthquakes#Tips-for-success":{"abstract":[{"text":"Take the next steps in app development, and build an app to download, decode, and present data from a network data source.","type":"text"},{"text":" ","type":"text"},{"text":"Use SwiftUI to build a simple interface to display dynamic data from a concurrent network client.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Tips-for-success","kind":"section","role":"pseudoSymbol","title":"Tips for success","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Tips-for-success"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-earthquakes#Tour-of-the-app":{"abstract":[{"text":"Take the next steps in app development, and build an app to download, decode, and present data from a network data source.","type":"text"},{"text":" ","type":"text"},{"text":"Use SwiftUI to build a simple interface to display dynamic data from a concurrent network client.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Tour-of-the-app","kind":"section","role":"pseudoSymbol","title":"Tour of the app","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-earthquakes#Tour-of-the-app"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-scrumdinger":{"abstract":[{"text":"Learn the essentials of iOS app development by building a fully functional app using SwiftUI.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger","kind":"article","role":"article","title":"Getting started with Scrumdinger","type":"topic","url":"\/tutorials\/app-dev-training\/getting-started-with-scrumdinger"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-scrumdinger#About-this-module":{"abstract":[{"text":"Learn the essentials of iOS app development by building a fully functional app using SwiftUI.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#About-this-module","kind":"section","role":"pseudoSymbol","title":"About this module","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#About-this-module"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-scrumdinger#SwiftUI-overview":{"abstract":[{"text":"Learn the essentials of iOS app development by building a fully functional app using SwiftUI.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#SwiftUI-overview","kind":"section","role":"pseudoSymbol","title":"SwiftUI overview","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#SwiftUI-overview"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-scrumdinger#Time-to-begin":{"abstract":[{"text":"Learn the essentials of iOS app development by building a fully functional app using SwiftUI.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#Time-to-begin","kind":"section","role":"pseudoSymbol","title":"Time to begin","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#Time-to-begin"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-scrumdinger#Tips-for-success":{"abstract":[{"text":"Learn the essentials of iOS app development by building a fully functional app using SwiftUI.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#Tips-for-success","kind":"section","role":"pseudoSymbol","title":"Tips for success","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#Tips-for-success"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-scrumdinger#Tour-of-the-app":{"abstract":[{"text":"Learn the essentials of iOS app development by building a fully functional app using SwiftUI.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#Tour-of-the-app","kind":"section","role":"pseudoSymbol","title":"Tour of the app","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-scrumdinger#Tour-of-the-app"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-today":{"abstract":[{"text":"Learn to develop a fully functional app with the UIKit framework.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today","kind":"article","role":"article","title":"Getting started with Today","type":"topic","url":"\/tutorials\/app-dev-training\/getting-started-with-today"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-today#About-this-module":{"abstract":[{"text":"Learn to develop a fully functional app with the UIKit framework.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today#About-this-module","kind":"section","role":"pseudoSymbol","title":"About this module","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-today#About-this-module"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-today#Time-to-build-the-app":{"abstract":[{"text":"Learn to develop a fully functional app with the UIKit framework.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today#Time-to-build-the-app","kind":"section","role":"pseudoSymbol","title":"Time to build the app","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-today#Time-to-build-the-app"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-today#Tips-for-success":{"abstract":[{"text":"Learn to develop a fully functional app with the UIKit framework.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today#Tips-for-success","kind":"section","role":"pseudoSymbol","title":"Tips for success","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-today#Tips-for-success"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-today#Tour-of-the-app":{"abstract":[{"text":"Learn to develop a fully functional app with the UIKit framework.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today#Tour-of-the-app","kind":"section","role":"pseudoSymbol","title":"Tour of the app","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-today#Tour-of-the-app"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/getting-started-with-today#UIKit-overview":{"abstract":[{"text":"Learn to develop a fully functional app with the UIKit framework.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/getting-started-with-today#UIKit-overview","kind":"section","role":"pseudoSymbol","title":"UIKit overview","type":"section","url":"\/tutorials\/app-dev-training\/getting-started-with-today#UIKit-overview"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/growing-your-knowledge":{"abstract":[{"text":"You’ve completed this module and studied a macOS sample app.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge","kind":"article","role":"article","title":"Growing your knowledge","type":"topic","url":"\/tutorials\/app-dev-training\/growing-your-knowledge"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/growing-your-knowledge#Connecting-with-others":{"abstract":[{"text":"You’ve completed this module and studied a macOS sample app.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#Connecting-with-others","kind":"section","role":"pseudoSymbol","title":"Connecting with others","type":"section","url":"\/tutorials\/app-dev-training\/growing-your-knowledge#Connecting-with-others"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/growing-your-knowledge#Creating-more-apps":{"abstract":[{"text":"You’ve completed this module and studied a macOS sample app.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#Creating-more-apps","kind":"section","role":"pseudoSymbol","title":"Creating more apps","type":"section","url":"\/tutorials\/app-dev-training\/growing-your-knowledge#Creating-more-apps"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/growing-your-knowledge#Researching-design":{"abstract":[{"text":"You’ve completed this module and studied a macOS sample app.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#Researching-design","kind":"section","role":"pseudoSymbol","title":"Researching design","type":"section","url":"\/tutorials\/app-dev-training\/growing-your-knowledge#Researching-design"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/growing-your-knowledge#Reviewing-the-sample-code-in-depth":{"abstract":[{"text":"You’ve completed this module and studied a macOS sample app.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#Reviewing-the-sample-code-in-depth","kind":"section","role":"pseudoSymbol","title":"Reviewing the sample code in depth","type":"section","url":"\/tutorials\/app-dev-training\/growing-your-knowledge#Reviewing-the-sample-code-in-depth"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/growing-your-knowledge#What-youve-learned":{"abstract":[{"text":"You’ve completed this module and studied a macOS sample app.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#What-youve-learned","kind":"section","role":"pseudoSymbol","title":"What you’ve learned","type":"section","url":"\/tutorials\/app-dev-training\/growing-your-knowledge#What-youve-learned"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/growing-your-knowledge#Whats-next":{"abstract":[{"text":"You’ve completed this module and studied a macOS sample app.","type":"text"},{"text":" ","type":"text"},{"text":"Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/growing-your-knowledge#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/growing-your-knowledge#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/handling-errors":{"abstract":[{"text":"During the development of your app, you may have encountered and fixed syntax or semantic errors.","type":"text"},{"text":" ","type":"text"},{"text":"But unexpected issues that are out of your control can still happen.","type":"text"},{"text":" ","type":"text"},{"text":"Network connections can break.","type":"text"},{"text":" ","type":"text"},{"text":"Reading data from a file can fail in several ways.","type":"text"}],"estimatedTime":"20min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors","kind":"project","role":"project","title":"Handling errors","type":"topic","url":"\/tutorials\/app-dev-training\/handling-errors"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/handling-errors#Add-an-error-wrapper-structure":{"abstract":[{"text":"During the development of your app, you may have encountered and fixed syntax or semantic errors.","type":"text"},{"text":" ","type":"text"},{"text":"But unexpected issues that are out of your control can still happen.","type":"text"},{"text":" ","type":"text"},{"text":"Network connections can break.","type":"text"},{"text":" ","type":"text"},{"text":"Reading data from a file can fail in several ways.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors#Add-an-error-wrapper-structure","kind":"section","role":"pseudoSymbol","title":"Add an error wrapper structure","type":"section","url":"\/tutorials\/app-dev-training\/handling-errors#Add-an-error-wrapper-structure"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/handling-errors#Create-an-error-view":{"abstract":[{"text":"During the development of your app, you may have encountered and fixed syntax or semantic errors.","type":"text"},{"text":" ","type":"text"},{"text":"But unexpected issues that are out of your control can still happen.","type":"text"},{"text":" ","type":"text"},{"text":"Network connections can break.","type":"text"},{"text":" ","type":"text"},{"text":"Reading data from a file can fail in several ways.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors#Create-an-error-view","kind":"section","role":"pseudoSymbol","title":"Create an error view","type":"section","url":"\/tutorials\/app-dev-training\/handling-errors#Create-an-error-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/handling-errors#Report-errors":{"abstract":[{"text":"During the development of your app, you may have encountered and fixed syntax or semantic errors.","type":"text"},{"text":" ","type":"text"},{"text":"But unexpected issues that are out of your control can still happen.","type":"text"},{"text":" ","type":"text"},{"text":"Network connections can break.","type":"text"},{"text":" ","type":"text"},{"text":"Reading data from a file can fail in several ways.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors#Report-errors","kind":"section","role":"pseudoSymbol","title":"Report errors","type":"section","url":"\/tutorials\/app-dev-training\/handling-errors#Report-errors"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/handling-errors#Simulate-persistence-error":{"abstract":[{"text":"During the development of your app, you may have encountered and fixed syntax or semantic errors.","type":"text"},{"text":" ","type":"text"},{"text":"But unexpected issues that are out of your control can still happen.","type":"text"},{"text":" ","type":"text"},{"text":"Network connections can break.","type":"text"},{"text":" ","type":"text"},{"text":"Reading data from a file can fail in several ways.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/handling-errors#Simulate-persistence-error","kind":"section","role":"pseudoSymbol","title":"Simulate persistence error","type":"section","url":"\/tutorials\/app-dev-training\/handling-errors#Simulate-persistence-error"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/integrating-appkit":{"abstract":[{"text":"The AppKit framework provides a powerful and extensive API for building graphical interfaces for macOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"Using AppKit, you’ll create amazing apps that tap into the full power of macOS.","type":"text"}],"estimatedTime":"15min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit","kind":"article","role":"article","title":"Integrating AppKit","type":"topic","url":"\/tutorials\/app-dev-training\/integrating-appkit"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/integrating-appkit#AppKit-in-Article-Accelerator":{"abstract":[{"text":"The AppKit framework provides a powerful and extensive API for building graphical interfaces for macOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"Using AppKit, you’ll create amazing apps that tap into the full power of macOS.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#AppKit-in-Article-Accelerator","kind":"section","role":"pseudoSymbol","title":"AppKit in Article Accelerator","type":"section","url":"\/tutorials\/app-dev-training\/integrating-appkit#AppKit-in-Article-Accelerator"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/integrating-appkit#Communicating-changes":{"abstract":[{"text":"The AppKit framework provides a powerful and extensive API for building graphical interfaces for macOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"Using AppKit, you’ll create amazing apps that tap into the full power of macOS.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Communicating-changes","kind":"section","role":"pseudoSymbol","title":"Communicating changes","type":"section","url":"\/tutorials\/app-dev-training\/integrating-appkit#Communicating-changes"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/integrating-appkit#Contrasting-toolkits":{"abstract":[{"text":"The AppKit framework provides a powerful and extensive API for building graphical interfaces for macOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"Using AppKit, you’ll create amazing apps that tap into the full power of macOS.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Contrasting-toolkits","kind":"section","role":"pseudoSymbol","title":"Contrasting toolkits","type":"section","url":"\/tutorials\/app-dev-training\/integrating-appkit#Contrasting-toolkits"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/integrating-appkit#Creating-and-updating-your-view":{"abstract":[{"text":"The AppKit framework provides a powerful and extensive API for building graphical interfaces for macOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"Using AppKit, you’ll create amazing apps that tap into the full power of macOS.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Creating-and-updating-your-view","kind":"section","role":"pseudoSymbol","title":"Creating and updating your view","type":"section","url":"\/tutorials\/app-dev-training\/integrating-appkit#Creating-and-updating-your-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/integrating-appkit#Managing-your-view-hierarchy":{"abstract":[{"text":"The AppKit framework provides a powerful and extensive API for building graphical interfaces for macOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"Using AppKit, you’ll create amazing apps that tap into the full power of macOS.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Managing-your-view-hierarchy","kind":"section","role":"pseudoSymbol","title":"Managing your view hierarchy","type":"section","url":"\/tutorials\/app-dev-training\/integrating-appkit#Managing-your-view-hierarchy"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/integrating-appkit#Using-coordinators":{"abstract":[{"text":"The AppKit framework provides a powerful and extensive API for building graphical interfaces for macOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"Using AppKit, you’ll create amazing apps that tap into the full power of macOS.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Using-coordinators","kind":"section","role":"pseudoSymbol","title":"Using coordinators","type":"section","url":"\/tutorials\/app-dev-training\/integrating-appkit#Using-coordinators"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/integrating-appkit#Whats-next":{"abstract":[{"text":"The AppKit framework provides a powerful and extensive API for building graphical interfaces for macOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"Using AppKit, you’ll create amazing apps that tap into the full power of macOS.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/integrating-appkit#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/integrating-appkit#Wrapping-a-Cocoa-view":{"abstract":[{"text":"The AppKit framework provides a powerful and extensive API for building graphical interfaces for macOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"Using AppKit, you’ll create amazing apps that tap into the full power of macOS.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Wrapping-a-Cocoa-view","kind":"section","role":"pseudoSymbol","title":"Wrapping a Cocoa view","type":"section","url":"\/tutorials\/app-dev-training\/integrating-appkit#Wrapping-a-Cocoa-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/integrating-appkit#Wrapping-a-Cocoa-view-controller":{"abstract":[{"text":"The AppKit framework provides a powerful and extensive API for building graphical interfaces for macOS apps.","type":"text"},{"text":" ","type":"text"},{"text":"Using AppKit, you’ll create amazing apps that tap into the full power of macOS.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/integrating-appkit#Wrapping-a-Cocoa-view-controller","kind":"section","role":"pseudoSymbol","title":"Wrapping a Cocoa view controller","type":"section","url":"\/tutorials\/app-dev-training\/integrating-appkit#Wrapping-a-Cocoa-view-controller"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/loading-reminders":{"abstract":[{"text":"With the EventKit framework, you can request access to a user’s calendar events and reminders.","type":"text"},{"text":" ","type":"text"},{"text":"You can use EventKit to share data between the Reminders and Today apps.","type":"text"}],"estimatedTime":"40min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders","kind":"project","role":"project","title":"Loading reminders","type":"topic","url":"\/tutorials\/app-dev-training\/loading-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/loading-reminders#Convert-between-model-types":{"abstract":[{"text":"With the EventKit framework, you can request access to a user’s calendar events and reminders.","type":"text"},{"text":" ","type":"text"},{"text":"You can use EventKit to share data between the Reminders and Today apps.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Convert-between-model-types","kind":"section","role":"pseudoSymbol","title":"Convert between model types","type":"section","url":"\/tutorials\/app-dev-training\/loading-reminders#Convert-between-model-types"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/loading-reminders#Create-a-reminder-store":{"abstract":[{"text":"With the EventKit framework, you can request access to a user’s calendar events and reminders.","type":"text"},{"text":" ","type":"text"},{"text":"You can use EventKit to share data between the Reminders and Today apps.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Create-a-reminder-store","kind":"section","role":"pseudoSymbol","title":"Create a reminder store","type":"section","url":"\/tutorials\/app-dev-training\/loading-reminders#Create-a-reminder-store"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/loading-reminders#Display-errors-to-the-user":{"abstract":[{"text":"With the EventKit framework, you can request access to a user’s calendar events and reminders.","type":"text"},{"text":" ","type":"text"},{"text":"You can use EventKit to share data between the Reminders and Today apps.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Display-errors-to-the-user","kind":"section","role":"pseudoSymbol","title":"Display errors to the user","type":"section","url":"\/tutorials\/app-dev-training\/loading-reminders#Display-errors-to-the-user"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/loading-reminders#Display-reminders":{"abstract":[{"text":"With the EventKit framework, you can request access to a user’s calendar events and reminders.","type":"text"},{"text":" ","type":"text"},{"text":"You can use EventKit to share data between the Reminders and Today apps.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Display-reminders","kind":"section","role":"pseudoSymbol","title":"Display reminders","type":"section","url":"\/tutorials\/app-dev-training\/loading-reminders#Display-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/loading-reminders#Fetch-reminders-asynchronously":{"abstract":[{"text":"With the EventKit framework, you can request access to a user’s calendar events and reminders.","type":"text"},{"text":" ","type":"text"},{"text":"You can use EventKit to share data between the Reminders and Today apps.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Fetch-reminders-asynchronously","kind":"section","role":"pseudoSymbol","title":"Fetch reminders asynchronously","type":"section","url":"\/tutorials\/app-dev-training\/loading-reminders#Fetch-reminders-asynchronously"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/loading-reminders#Read-all-reminders":{"abstract":[{"text":"With the EventKit framework, you can request access to a user’s calendar events and reminders.","type":"text"},{"text":" ","type":"text"},{"text":"You can use EventKit to share data between the Reminders and Today apps.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Read-all-reminders","kind":"section","role":"pseudoSymbol","title":"Read all reminders","type":"section","url":"\/tutorials\/app-dev-training\/loading-reminders#Read-all-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/loading-reminders#Request-access-to-reminder-data":{"abstract":[{"text":"With the EventKit framework, you can request access to a user’s calendar events and reminders.","type":"text"},{"text":" ","type":"text"},{"text":"You can use EventKit to share data between the Reminders and Today apps.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Request-access-to-reminder-data","kind":"section","role":"pseudoSymbol","title":"Request access to reminder data","type":"section","url":"\/tutorials\/app-dev-training\/loading-reminders#Request-access-to-reminder-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/loading-reminders#Test-EventKit-integration":{"abstract":[{"text":"With the EventKit framework, you can request access to a user’s calendar events and reminders.","type":"text"},{"text":" ","type":"text"},{"text":"You can use EventKit to share data between the Reminders and Today apps.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/loading-reminders#Test-EventKit-integration","kind":"section","role":"pseudoSymbol","title":"Test EventKit integration","type":"section","url":"\/tutorials\/app-dev-training\/loading-reminders#Test-EventKit-integration"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/macOS/Core-macOS-features":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/Core-macOS-features","kind":"article","role":"article","title":"Core macOS features","type":"topic","url":"\/tutorials\/app-dev-training\/macos\/core-macos-features"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/macOS/Design":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/Design","kind":"article","role":"article","title":"Design","type":"topic","url":"\/tutorials\/app-dev-training\/macos\/design"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/macOS/Navigation":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/Navigation","kind":"article","role":"article","title":"Navigation","type":"topic","url":"\/tutorials\/app-dev-training\/macos\/navigation"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/macOS/Other-frameworks":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/Other-frameworks","kind":"article","role":"article","title":"Other frameworks","type":"topic","url":"\/tutorials\/app-dev-training\/macos\/other-frameworks"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/macOS/SwiftData":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/SwiftData","kind":"article","role":"article","title":"SwiftData","type":"topic","url":"\/tutorials\/app-dev-training\/macos\/swiftdata"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/macOS/macOS-essentials":{"abstract":[],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/macOS\/macOS-essentials","kind":"article","role":"article","title":"macOS essentials","type":"topic","url":"\/tutorials\/app-dev-training\/macos\/macos-essentials"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-classes-observable":{"abstract":[{"text":"You’ve used the ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" property wrappers to define a value type as a source of truth for triggering updates in your view hierarchy.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to define a reference type as a source of truth for your app’s user interface.","type":"text"}],"estimatedTime":"10min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-classes-observable","kind":"article","role":"article","title":"Making classes observable","type":"topic","url":"\/tutorials\/app-dev-training\/making-classes-observable"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-classes-observable#Making-a-class-observable":{"abstract":[{"text":"You’ve used the ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" property wrappers to define a value type as a source of truth for triggering updates in your view hierarchy.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to define a reference type as a source of truth for your app’s user interface.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-classes-observable#Making-a-class-observable","kind":"section","role":"pseudoSymbol","title":"Making a class observable","type":"section","url":"\/tutorials\/app-dev-training\/making-classes-observable#Making-a-class-observable"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-classes-observable#Monitoring-an-object-for-changes":{"abstract":[{"text":"You’ve used the ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" property wrappers to define a value type as a source of truth for triggering updates in your view hierarchy.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to define a reference type as a source of truth for your app’s user interface.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-classes-observable#Monitoring-an-object-for-changes","kind":"section","role":"pseudoSymbol","title":"Monitoring an object for changes","type":"section","url":"\/tutorials\/app-dev-training\/making-classes-observable#Monitoring-an-object-for-changes"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-classes-observable#Putting-it-all-together":{"abstract":[{"text":"You’ve used the ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" property wrappers to define a value type as a source of truth for triggering updates in your view hierarchy.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to define a reference type as a source of truth for your app’s user interface.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-classes-observable#Putting-it-all-together","kind":"section","role":"pseudoSymbol","title":"Putting it all together","type":"section","url":"\/tutorials\/app-dev-training\/making-classes-observable#Putting-it-all-together"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-classes-observable#Working-with-reference-types":{"abstract":[{"text":"You’ve used the ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" property wrappers to define a value type as a source of truth for triggering updates in your view hierarchy.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to define a reference type as a source of truth for your app’s user interface.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-classes-observable#Working-with-reference-types","kind":"section","role":"pseudoSymbol","title":"Working with reference types","type":"section","url":"\/tutorials\/app-dev-training\/making-classes-observable#Working-with-reference-types"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-reminders-identifiable":{"abstract":[{"text":"A ","type":"text"},{"inlineContent":[{"text":"diffable data source","type":"text"}],"type":"emphasis"},{"text":" stores a list of identifiers that represents the identities of the items in the collection view.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll make the reminder model ","type":"text"},{"inlineContent":[{"text":"identifiable","type":"text"}],"type":"emphasis"},{"text":" so that you can uniquely identify each reminder.","type":"text"}],"estimatedTime":"35min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable","kind":"project","role":"project","title":"Making reminders identifiable","type":"topic","url":"\/tutorials\/app-dev-training\/making-reminders-identifiable"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-reminders-identifiable#Create-a-custom-button-action":{"abstract":[{"text":"A ","type":"text"},{"inlineContent":[{"text":"diffable data source","type":"text"}],"type":"emphasis"},{"text":" stores a list of identifiers that represents the identities of the items in the collection view.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll make the reminder model ","type":"text"},{"inlineContent":[{"text":"identifiable","type":"text"}],"type":"emphasis"},{"text":" so that you can uniquely identify each reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Create-a-custom-button-action","kind":"section","role":"pseudoSymbol","title":"Create a custom button action","type":"section","url":"\/tutorials\/app-dev-training\/making-reminders-identifiable#Create-a-custom-button-action"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-reminders-identifiable#Create-functions-for-accessing-the-model":{"abstract":[{"text":"A ","type":"text"},{"inlineContent":[{"text":"diffable data source","type":"text"}],"type":"emphasis"},{"text":" stores a list of identifiers that represents the identities of the items in the collection view.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll make the reminder model ","type":"text"},{"inlineContent":[{"text":"identifiable","type":"text"}],"type":"emphasis"},{"text":" so that you can uniquely identify each reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Create-functions-for-accessing-the-model","kind":"section","role":"pseudoSymbol","title":"Create functions for accessing the model","type":"section","url":"\/tutorials\/app-dev-training\/making-reminders-identifiable#Create-functions-for-accessing-the-model"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-reminders-identifiable#Make-the-action-accessible":{"abstract":[{"text":"A ","type":"text"},{"inlineContent":[{"text":"diffable data source","type":"text"}],"type":"emphasis"},{"text":" stores a list of identifiers that represents the identities of the items in the collection view.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll make the reminder model ","type":"text"},{"inlineContent":[{"text":"identifiable","type":"text"}],"type":"emphasis"},{"text":" so that you can uniquely identify each reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Make-the-action-accessible","kind":"section","role":"pseudoSymbol","title":"Make the action accessible","type":"section","url":"\/tutorials\/app-dev-training\/making-reminders-identifiable#Make-the-action-accessible"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-reminders-identifiable#Make-the-model-identifiable":{"abstract":[{"text":"A ","type":"text"},{"inlineContent":[{"text":"diffable data source","type":"text"}],"type":"emphasis"},{"text":" stores a list of identifiers that represents the identities of the items in the collection view.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll make the reminder model ","type":"text"},{"inlineContent":[{"text":"identifiable","type":"text"}],"type":"emphasis"},{"text":" so that you can uniquely identify each reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Make-the-model-identifiable","kind":"section","role":"pseudoSymbol","title":"Make the model identifiable","type":"section","url":"\/tutorials\/app-dev-training\/making-reminders-identifiable#Make-the-model-identifiable"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-reminders-identifiable#Preview-using-Accessibility-Inspector":{"abstract":[{"text":"A ","type":"text"},{"inlineContent":[{"text":"diffable data source","type":"text"}],"type":"emphasis"},{"text":" stores a list of identifiers that represents the identities of the items in the collection view.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll make the reminder model ","type":"text"},{"inlineContent":[{"text":"identifiable","type":"text"}],"type":"emphasis"},{"text":" so that you can uniquely identify each reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Preview-using-Accessibility-Inspector","kind":"section","role":"pseudoSymbol","title":"Preview using Accessibility Inspector","type":"section","url":"\/tutorials\/app-dev-training\/making-reminders-identifiable#Preview-using-Accessibility-Inspector"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-reminders-identifiable#Update-the-snapshot":{"abstract":[{"text":"A ","type":"text"},{"inlineContent":[{"text":"diffable data source","type":"text"}],"type":"emphasis"},{"text":" stores a list of identifiers that represents the identities of the items in the collection view.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll make the reminder model ","type":"text"},{"inlineContent":[{"text":"identifiable","type":"text"}],"type":"emphasis"},{"text":" so that you can uniquely identify each reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Update-the-snapshot","kind":"section","role":"pseudoSymbol","title":"Update the snapshot","type":"section","url":"\/tutorials\/app-dev-training\/making-reminders-identifiable#Update-the-snapshot"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/making-reminders-identifiable#Wire-a-target-action-pair":{"abstract":[{"text":"A ","type":"text"},{"inlineContent":[{"text":"diffable data source","type":"text"}],"type":"emphasis"},{"text":" stores a list of identifiers that represents the identities of the items in the collection view.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll make the reminder model ","type":"text"},{"inlineContent":[{"text":"identifiable","type":"text"}],"type":"emphasis"},{"text":" so that you can uniquely identify each reminder.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/making-reminders-identifiable#Wire-a-target-action-pair","kind":"section","role":"pseudoSymbol","title":"Wire a target-action pair","type":"section","url":"\/tutorials\/app-dev-training\/making-reminders-identifiable#Wire-a-target-action-pair"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-content-views":{"abstract":[{"text":"Content views let you focus on information that you want to display in a view, without worrying about when to update or how to style a view.","type":"text"},{"text":" ","type":"text"},{"text":"They work with content configurations to keep your app’s information and user interface in sync.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views","kind":"article","role":"article","title":"Managing content views","type":"topic","url":"\/tutorials\/app-dev-training\/managing-content-views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-content-views#Applying-the-custom-content-configuration":{"abstract":[{"text":"Content views let you focus on information that you want to display in a view, without worrying about when to update or how to style a view.","type":"text"},{"text":" ","type":"text"},{"text":"They work with content configurations to keep your app’s information and user interface in sync.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Applying-the-custom-content-configuration","kind":"section","role":"pseudoSymbol","title":"Applying the custom content configuration","type":"section","url":"\/tutorials\/app-dev-training\/managing-content-views#Applying-the-custom-content-configuration"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-content-views#Configuring-your-custom-content-view":{"abstract":[{"text":"Content views let you focus on information that you want to display in a view, without worrying about when to update or how to style a view.","type":"text"},{"text":" ","type":"text"},{"text":"They work with content configurations to keep your app’s information and user interface in sync.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Configuring-your-custom-content-view","kind":"section","role":"pseudoSymbol","title":"Configuring your custom content view","type":"section","url":"\/tutorials\/app-dev-training\/managing-content-views#Configuring-your-custom-content-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-content-views#Creating-a-custom-content-configuration":{"abstract":[{"text":"Content views let you focus on information that you want to display in a view, without worrying about when to update or how to style a view.","type":"text"},{"text":" ","type":"text"},{"text":"They work with content configurations to keep your app’s information and user interface in sync.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Creating-a-custom-content-configuration","kind":"section","role":"pseudoSymbol","title":"Creating a custom content configuration","type":"section","url":"\/tutorials\/app-dev-training\/managing-content-views#Creating-a-custom-content-configuration"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-content-views#Creating-a-custom-content-view":{"abstract":[{"text":"Content views let you focus on information that you want to display in a view, without worrying about when to update or how to style a view.","type":"text"},{"text":" ","type":"text"},{"text":"They work with content configurations to keep your app’s information and user interface in sync.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Creating-a-custom-content-view","kind":"section","role":"pseudoSymbol","title":"Creating a custom content view","type":"section","url":"\/tutorials\/app-dev-training\/managing-content-views#Creating-a-custom-content-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-content-views#Implementing-content-views":{"abstract":[{"text":"Content views let you focus on information that you want to display in a view, without worrying about when to update or how to style a view.","type":"text"},{"text":" ","type":"text"},{"text":"They work with content configurations to keep your app’s information and user interface in sync.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Implementing-content-views","kind":"section","role":"pseudoSymbol","title":"Implementing content views","type":"section","url":"\/tutorials\/app-dev-training\/managing-content-views#Implementing-content-views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-content-views#Using-content-views-in-editing-mode":{"abstract":[{"text":"Content views let you focus on information that you want to display in a view, without worrying about when to update or how to style a view.","type":"text"},{"text":" ","type":"text"},{"text":"They work with content configurations to keep your app’s information and user interface in sync.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Using-content-views-in-editing-mode","kind":"section","role":"pseudoSymbol","title":"Using content views in editing mode","type":"section","url":"\/tutorials\/app-dev-training\/managing-content-views#Using-content-views-in-editing-mode"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-content-views#Using-custom-content-views-in-Today":{"abstract":[{"text":"Content views let you focus on information that you want to display in a view, without worrying about when to update or how to style a view.","type":"text"},{"text":" ","type":"text"},{"text":"They work with content configurations to keep your app’s information and user interface in sync.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-content-views#Using-custom-content-views-in-Today","kind":"section","role":"pseudoSymbol","title":"Using custom content views in Today","type":"section","url":"\/tutorials\/app-dev-training\/managing-content-views#Using-custom-content-views-in-Today"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-data-flow-between-views":{"abstract":[{"text":"Displaying information to the user and modifying data in response to user interactions are essential functions of most apps.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to use ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" to ensure that your user interface reflects the current state of your app’s data.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views","kind":"article","role":"article","title":"Managing data flow between views","type":"topic","url":"\/tutorials\/app-dev-training\/managing-data-flow-between-views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-data-flow-between-views#App-architecture":{"abstract":[{"text":"Displaying information to the user and modifying data in response to user interactions are essential functions of most apps.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to use ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" to ensure that your user interface reflects the current state of your app’s data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views#App-architecture","kind":"section","role":"pseudoSymbol","title":"App architecture","type":"section","url":"\/tutorials\/app-dev-training\/managing-data-flow-between-views#App-architecture"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-data-flow-between-views#Binding":{"abstract":[{"text":"Displaying information to the user and modifying data in response to user interactions are essential functions of most apps.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to use ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" to ensure that your user interface reflects the current state of your app’s data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views#Binding","kind":"section","role":"pseudoSymbol","title":"Binding","type":"section","url":"\/tutorials\/app-dev-training\/managing-data-flow-between-views#Binding"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-data-flow-between-views#Source-of-truth":{"abstract":[{"text":"Displaying information to the user and modifying data in response to user interactions are essential functions of most apps.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to use ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" to ensure that your user interface reflects the current state of your app’s data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views#Source-of-truth","kind":"section","role":"pseudoSymbol","title":"Source of truth","type":"section","url":"\/tutorials\/app-dev-training\/managing-data-flow-between-views#Source-of-truth"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-data-flow-between-views#State":{"abstract":[{"text":"Displaying information to the user and modifying data in response to user interactions are essential functions of most apps.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to use ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" to ensure that your user interface reflects the current state of your app’s data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views#State","kind":"section","role":"pseudoSymbol","title":"State","type":"section","url":"\/tutorials\/app-dev-training\/managing-data-flow-between-views#State"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-data-flow-between-views#Swift-property-wrappers":{"abstract":[{"text":"Displaying information to the user and modifying data in response to user interactions are essential functions of most apps.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how to use ","type":"text"},{"code":"@State","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"@Binding","type":"codeVoice"},{"text":" to ensure that your user interface reflects the current state of your app’s data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-data-flow-between-views#Swift-property-wrappers","kind":"section","role":"pseudoSymbol","title":"Swift property wrappers","type":"section","url":"\/tutorials\/app-dev-training\/managing-data-flow-between-views#Swift-property-wrappers"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-state-and-life-cycle":{"abstract":[{"text":"Scrumdinger keeps you informed as your scrum changes.","type":"text"},{"text":" ","type":"text"},{"text":"To build this key feature in the app, you’ll use life cycle methods to control a model that manages the scrum state.","type":"text"}],"estimatedTime":"30min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle","kind":"project","role":"project","title":"Managing state and life cycle","type":"topic","url":"\/tutorials\/app-dev-training\/managing-state-and-life-cycle"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-state-and-life-cycle#Add-design-elements-to-the-meeting-header":{"abstract":[{"text":"Scrumdinger keeps you informed as your scrum changes.","type":"text"},{"text":" ","type":"text"},{"text":"To build this key feature in the app, you’ll use life cycle methods to control a model that manages the scrum state.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Add-design-elements-to-the-meeting-header","kind":"section","role":"pseudoSymbol","title":"Add design elements to the meeting header","type":"section","url":"\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Add-design-elements-to-the-meeting-header"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-state-and-life-cycle#Add-life-cycle-events":{"abstract":[{"text":"Scrumdinger keeps you informed as your scrum changes.","type":"text"},{"text":" ","type":"text"},{"text":"To build this key feature in the app, you’ll use life cycle methods to control a model that manages the scrum state.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Add-life-cycle-events","kind":"section","role":"pseudoSymbol","title":"Add life cycle events","type":"section","url":"\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Add-life-cycle-events"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-state-and-life-cycle#Create-a-source-of-truth-for-a-reference-type":{"abstract":[{"text":"Scrumdinger keeps you informed as your scrum changes.","type":"text"},{"text":" ","type":"text"},{"text":"To build this key feature in the app, you’ll use life cycle methods to control a model that manages the scrum state.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Create-a-source-of-truth-for-a-reference-type","kind":"section","role":"pseudoSymbol","title":"Create a source of truth for a reference type","type":"section","url":"\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Create-a-source-of-truth-for-a-reference-type"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-state-and-life-cycle#Create-an-overlay-view":{"abstract":[{"text":"Scrumdinger keeps you informed as your scrum changes.","type":"text"},{"text":" ","type":"text"},{"text":"To build this key feature in the app, you’ll use life cycle methods to control a model that manages the scrum state.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Create-an-overlay-view","kind":"section","role":"pseudoSymbol","title":"Create an overlay view","type":"section","url":"\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Create-an-overlay-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-state-and-life-cycle#Extract-the-meeting-footer":{"abstract":[{"text":"Scrumdinger keeps you informed as your scrum changes.","type":"text"},{"text":" ","type":"text"},{"text":"To build this key feature in the app, you’ll use life cycle methods to control a model that manages the scrum state.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Extract-the-meeting-footer","kind":"section","role":"pseudoSymbol","title":"Extract the meeting footer","type":"section","url":"\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Extract-the-meeting-footer"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-state-and-life-cycle#Extract-the-meeting-header":{"abstract":[{"text":"Scrumdinger keeps you informed as your scrum changes.","type":"text"},{"text":" ","type":"text"},{"text":"To build this key feature in the app, you’ll use life cycle methods to control a model that manages the scrum state.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Extract-the-meeting-header","kind":"section","role":"pseudoSymbol","title":"Extract the meeting header","type":"section","url":"\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Extract-the-meeting-header"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-state-and-life-cycle#Trigger-sound-with-AVFoundation":{"abstract":[{"text":"Scrumdinger keeps you informed as your scrum changes.","type":"text"},{"text":" ","type":"text"},{"text":"To build this key feature in the app, you’ll use life cycle methods to control a model that manages the scrum state.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Trigger-sound-with-AVFoundation","kind":"section","role":"pseudoSymbol","title":"Trigger sound with AVFoundation","type":"section","url":"\/tutorials\/app-dev-training\/managing-state-and-life-cycle#Trigger-sound-with-AVFoundation"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-structured-concurrency":{"abstract":[{"text":"Earthquakes fetches network data asynchronously.","type":"text"},{"text":" ","type":"text"},{"text":"In the following tutorials, you’ll update the app to make additional network requests to fetch the details of each earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll update the client to make multiple network requests concurrently.","type":"text"}],"estimatedTime":"15min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-structured-concurrency","kind":"article","role":"article","title":"Managing structured concurrency","type":"topic","url":"\/tutorials\/app-dev-training\/managing-structured-concurrency"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-structured-concurrency#Fetching-multiple-URLs":{"abstract":[{"text":"Earthquakes fetches network data asynchronously.","type":"text"},{"text":" ","type":"text"},{"text":"In the following tutorials, you’ll update the app to make additional network requests to fetch the details of each earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll update the client to make multiple network requests concurrently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-structured-concurrency#Fetching-multiple-URLs","kind":"section","role":"pseudoSymbol","title":"Fetching multiple URLs","type":"section","url":"\/tutorials\/app-dev-training\/managing-structured-concurrency#Fetching-multiple-URLs"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/managing-structured-concurrency#Protecting-data-with-actors":{"abstract":[{"text":"Earthquakes fetches network data asynchronously.","type":"text"},{"text":" ","type":"text"},{"text":"In the following tutorials, you’ll update the app to make additional network requests to fetch the details of each earthquake.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll update the client to make multiple network requests concurrently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/managing-structured-concurrency#Protecting-data-with-actors","kind":"section","role":"pseudoSymbol","title":"Protecting data with actors","type":"section","url":"\/tutorials\/app-dev-training\/managing-structured-concurrency#Protecting-data-with-actors"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/navigating-the-sample-project":{"abstract":[{"text":"Welcome to the Article Accelerator app.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll explore how the project is organized, run the completed app, and test some user flows.","type":"text"}],"estimatedTime":"10min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/navigating-the-sample-project","kind":"project","role":"project","title":"Navigating the sample project","type":"topic","url":"\/tutorials\/app-dev-training\/navigating-the-sample-project"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/navigating-the-sample-project#Explore-Article-Accelerator":{"abstract":[{"text":"Welcome to the Article Accelerator app.","type":"text"},{"text":" ","type":"text"},{"text":"In this tutorial, you’ll explore how the project is organized, run the completed app, and test some user flows.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/navigating-the-sample-project#Explore-Article-Accelerator","kind":"section","role":"pseudoSymbol","title":"Explore Article Accelerator","type":"section","url":"\/tutorials\/app-dev-training\/navigating-the-sample-project#Explore-Article-Accelerator"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/passing-data-with-bindings":{"abstract":[{"text":"In the previous tutorial, you used bindings to share data between the edit view and individual UI controls within that view.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll expand the editing capabilities by building a color theme picker using bindings that allow the theme picker and edit views to share their data.","type":"text"}],"estimatedTime":"30min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings","kind":"project","role":"project","title":"Passing data with bindings","type":"topic","url":"\/tutorials\/app-dev-training\/passing-data-with-bindings"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/passing-data-with-bindings#Add-a-theme-picker":{"abstract":[{"text":"In the previous tutorial, you used bindings to share data between the edit view and individual UI controls within that view.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll expand the editing capabilities by building a color theme picker using bindings that allow the theme picker and edit views to share their data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Add-a-theme-picker","kind":"section","role":"pseudoSymbol","title":"Add a theme picker","type":"section","url":"\/tutorials\/app-dev-training\/passing-data-with-bindings#Add-a-theme-picker"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/passing-data-with-bindings#Add-a-theme-view":{"abstract":[{"text":"In the previous tutorial, you used bindings to share data between the edit view and individual UI controls within that view.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll expand the editing capabilities by building a color theme picker using bindings that allow the theme picker and edit views to share their data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Add-a-theme-view","kind":"section","role":"pseudoSymbol","title":"Add a theme view","type":"section","url":"\/tutorials\/app-dev-training\/passing-data-with-bindings#Add-a-theme-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/passing-data-with-bindings#Pass-a-binding-into-the-detail-view":{"abstract":[{"text":"In the previous tutorial, you used bindings to share data between the edit view and individual UI controls within that view.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll expand the editing capabilities by building a color theme picker using bindings that allow the theme picker and edit views to share their data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Pass-a-binding-into-the-detail-view","kind":"section","role":"pseudoSymbol","title":"Pass a binding into the detail view","type":"section","url":"\/tutorials\/app-dev-training\/passing-data-with-bindings#Pass-a-binding-into-the-detail-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/passing-data-with-bindings#Pass-a-binding-into-the-list-view":{"abstract":[{"text":"In the previous tutorial, you used bindings to share data between the edit view and individual UI controls within that view.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll expand the editing capabilities by building a color theme picker using bindings that allow the theme picker and edit views to share their data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Pass-a-binding-into-the-list-view","kind":"section","role":"pseudoSymbol","title":"Pass a binding into the list view","type":"section","url":"\/tutorials\/app-dev-training\/passing-data-with-bindings#Pass-a-binding-into-the-list-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/passing-data-with-bindings#Pass-the-edit-view-a-binding-to-data":{"abstract":[{"text":"In the previous tutorial, you used bindings to share data between the edit view and individual UI controls within that view.","type":"text"},{"text":" ","type":"text"},{"text":"Now, you’ll expand the editing capabilities by building a color theme picker using bindings that allow the theme picker and edit views to share their data.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/passing-data-with-bindings#Pass-the-edit-view-a-binding-to-data","kind":"section","role":"pseudoSymbol","title":"Pass the edit view a binding to data","type":"section","url":"\/tutorials\/app-dev-training\/passing-data-with-bindings#Pass-the-edit-view-a-binding-to-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/persisting-data":{"abstract":[{"text":"Users can now create and edit scrums, and SwiftUI automatically keeps the app’s user interface up to date.","type":"text"},{"text":" ","type":"text"},{"text":"However, quitting and relaunching Scrumdinger resets all data back to its initial state.","type":"text"}],"estimatedTime":"20min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/persisting-data","kind":"project","role":"project","title":"Persisting data","type":"topic","url":"\/tutorials\/app-dev-training\/persisting-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/persisting-data#Create-sample-SwiftData-for-previews":{"abstract":[{"text":"Users can now create and edit scrums, and SwiftUI automatically keeps the app’s user interface up to date.","type":"text"},{"text":" ","type":"text"},{"text":"However, quitting and relaunching Scrumdinger resets all data back to its initial state.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/persisting-data#Create-sample-SwiftData-for-previews","kind":"section","role":"pseudoSymbol","title":"Create sample SwiftData for previews","type":"section","url":"\/tutorials\/app-dev-training\/persisting-data#Create-sample-SwiftData-for-previews"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/persisting-data#Integrate-SwiftData-models-with-SwiftUI-views":{"abstract":[{"text":"Users can now create and edit scrums, and SwiftUI automatically keeps the app’s user interface up to date.","type":"text"},{"text":" ","type":"text"},{"text":"However, quitting and relaunching Scrumdinger resets all data back to its initial state.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/persisting-data#Integrate-SwiftData-models-with-SwiftUI-views","kind":"section","role":"pseudoSymbol","title":"Integrate SwiftData models with SwiftUI views","type":"section","url":"\/tutorials\/app-dev-training\/persisting-data#Integrate-SwiftData-models-with-SwiftUI-views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/persisting-data#Refactor-structures-into-SwiftData-model-classes":{"abstract":[{"text":"Users can now create and edit scrums, and SwiftUI automatically keeps the app’s user interface up to date.","type":"text"},{"text":" ","type":"text"},{"text":"However, quitting and relaunching Scrumdinger resets all data back to its initial state.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/persisting-data#Refactor-structures-into-SwiftData-model-classes","kind":"section","role":"pseudoSymbol","title":"Refactor structures into SwiftData model classes","type":"section","url":"\/tutorials\/app-dev-training\/persisting-data#Refactor-structures-into-SwiftData-model-classes"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/refining-your-craft":{"abstract":[{"text":"You’ve taken the next steps as a developer. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft","kind":"article","role":"article","title":"Refining your craft","type":"topic","url":"\/tutorials\/app-dev-training\/refining-your-craft"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/refining-your-craft#Building-apps-for-other-platforms":{"abstract":[{"text":"You’ve taken the next steps as a developer. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Building-apps-for-other-platforms","kind":"section","role":"pseudoSymbol","title":"Building apps for other platforms","type":"section","url":"\/tutorials\/app-dev-training\/refining-your-craft#Building-apps-for-other-platforms"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/refining-your-craft#Connecting-with-others":{"abstract":[{"text":"You’ve taken the next steps as a developer. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Connecting-with-others","kind":"section","role":"pseudoSymbol","title":"Connecting with others","type":"section","url":"\/tutorials\/app-dev-training\/refining-your-craft#Connecting-with-others"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/refining-your-craft#Creating-more-apps":{"abstract":[{"text":"You’ve taken the next steps as a developer. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Creating-more-apps","kind":"section","role":"pseudoSymbol","title":"Creating more apps","type":"section","url":"\/tutorials\/app-dev-training\/refining-your-craft#Creating-more-apps"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/refining-your-craft#Designing-for-the-network":{"abstract":[{"text":"You’ve taken the next steps as a developer. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Designing-for-the-network","kind":"section","role":"pseudoSymbol","title":"Designing for the network","type":"section","url":"\/tutorials\/app-dev-training\/refining-your-craft#Designing-for-the-network"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/refining-your-craft#Finding-inspiration":{"abstract":[{"text":"You’ve taken the next steps as a developer. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Finding-inspiration","kind":"section","role":"pseudoSymbol","title":"Finding inspiration","type":"section","url":"\/tutorials\/app-dev-training\/refining-your-craft#Finding-inspiration"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/refining-your-craft#What-youve-learned":{"abstract":[{"text":"You’ve taken the next steps as a developer. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#What-youve-learned","kind":"section","role":"pseudoSymbol","title":"What you’ve learned","type":"section","url":"\/tutorials\/app-dev-training\/refining-your-craft#What-youve-learned"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/refining-your-craft#Whats-next":{"abstract":[{"text":"You’ve taken the next steps as a developer. Review what you’ve learned, and get ideas about where to go from here.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/refining-your-craft#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/refining-your-craft#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/responding-to-events":{"abstract":[{"text":"As you’ve learned so far in this module, you can use SwiftUI property wrappers to manage state in your app’s user interface and respond to user interaction.","type":"text"},{"text":" ","type":"text"},{"text":"But how do you perform actions in response to changes in app state?","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/responding-to-events","kind":"article","role":"article","title":"Responding to events","type":"topic","url":"\/tutorials\/app-dev-training\/responding-to-events"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/responding-to-events#Events-and-state":{"abstract":[{"text":"As you’ve learned so far in this module, you can use SwiftUI property wrappers to manage state in your app’s user interface and respond to user interaction.","type":"text"},{"text":" ","type":"text"},{"text":"But how do you perform actions in response to changes in app state?","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/responding-to-events#Events-and-state","kind":"section","role":"pseudoSymbol","title":"Events and state","type":"section","url":"\/tutorials\/app-dev-training\/responding-to-events#Events-and-state"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/responding-to-events#Scene-architecture":{"abstract":[{"text":"As you’ve learned so far in this module, you can use SwiftUI property wrappers to manage state in your app’s user interface and respond to user interaction.","type":"text"},{"text":" ","type":"text"},{"text":"But how do you perform actions in response to changes in app state?","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/responding-to-events#Scene-architecture","kind":"section","role":"pseudoSymbol","title":"Scene architecture","type":"section","url":"\/tutorials\/app-dev-training\/responding-to-events#Scene-architecture"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/responding-to-events#Scene-phases-and-transitions":{"abstract":[{"text":"As you’ve learned so far in this module, you can use SwiftUI property wrappers to manage state in your app’s user interface and respond to user interaction.","type":"text"},{"text":" ","type":"text"},{"text":"But how do you perform actions in response to changes in app state?","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/responding-to-events#Scene-phases-and-transitions","kind":"section","role":"pseudoSymbol","title":"Scene phases and transitions","type":"section","url":"\/tutorials\/app-dev-training\/responding-to-events#Scene-phases-and-transitions"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/responding-to-events#View-life-cycle-events":{"abstract":[{"text":"As you’ve learned so far in this module, you can use SwiftUI property wrappers to manage state in your app’s user interface and respond to user interaction.","type":"text"},{"text":" ","type":"text"},{"text":"But how do you perform actions in response to changes in app state?","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/responding-to-events#View-life-cycle-events","kind":"section","role":"pseudoSymbol","title":"View life cycle events","type":"section","url":"\/tutorials\/app-dev-training\/responding-to-events#View-life-cycle-events"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/saving-reminders":{"abstract":[{"text":"You still have some important features to add to your app.","type":"text"},{"text":" ","type":"text"},{"text":"When Today closes, it loses changes that the user made within the app.","type":"text"},{"text":" ","type":"text"},{"text":"And it doesn’t automatically reflect changes the user makes outside of the app.","type":"text"}],"estimatedTime":"35min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders","kind":"project","role":"project","title":"Saving reminders","type":"topic","url":"\/tutorials\/app-dev-training\/saving-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/saving-reminders#Convert-between-model-types":{"abstract":[{"text":"You still have some important features to add to your app.","type":"text"},{"text":" ","type":"text"},{"text":"When Today closes, it loses changes that the user made within the app.","type":"text"},{"text":" ","type":"text"},{"text":"And it doesn’t automatically reflect changes the user makes outside of the app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Convert-between-model-types","kind":"section","role":"pseudoSymbol","title":"Convert between model types","type":"section","url":"\/tutorials\/app-dev-training\/saving-reminders#Convert-between-model-types"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/saving-reminders#Read-reminders-individually":{"abstract":[{"text":"You still have some important features to add to your app.","type":"text"},{"text":" ","type":"text"},{"text":"When Today closes, it loses changes that the user made within the app.","type":"text"},{"text":" ","type":"text"},{"text":"And it doesn’t automatically reflect changes the user makes outside of the app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Read-reminders-individually","kind":"section","role":"pseudoSymbol","title":"Read reminders individually","type":"section","url":"\/tutorials\/app-dev-training\/saving-reminders#Read-reminders-individually"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/saving-reminders#Remove-reminders":{"abstract":[{"text":"You still have some important features to add to your app.","type":"text"},{"text":" ","type":"text"},{"text":"When Today closes, it loses changes that the user made within the app.","type":"text"},{"text":" ","type":"text"},{"text":"And it doesn’t automatically reflect changes the user makes outside of the app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Remove-reminders","kind":"section","role":"pseudoSymbol","title":"Remove reminders","type":"section","url":"\/tutorials\/app-dev-training\/saving-reminders#Remove-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/saving-reminders#Respond-to-change-notifications":{"abstract":[{"text":"You still have some important features to add to your app.","type":"text"},{"text":" ","type":"text"},{"text":"When Today closes, it loses changes that the user made within the app.","type":"text"},{"text":" ","type":"text"},{"text":"And it doesn’t automatically reflect changes the user makes outside of the app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Respond-to-change-notifications","kind":"section","role":"pseudoSymbol","title":"Respond to change notifications","type":"section","url":"\/tutorials\/app-dev-training\/saving-reminders#Respond-to-change-notifications"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/saving-reminders#Save-added-reminders":{"abstract":[{"text":"You still have some important features to add to your app.","type":"text"},{"text":" ","type":"text"},{"text":"When Today closes, it loses changes that the user made within the app.","type":"text"},{"text":" ","type":"text"},{"text":"And it doesn’t automatically reflect changes the user makes outside of the app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Save-added-reminders","kind":"section","role":"pseudoSymbol","title":"Save added reminders","type":"section","url":"\/tutorials\/app-dev-training\/saving-reminders#Save-added-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/saving-reminders#Save-reminders-individually":{"abstract":[{"text":"You still have some important features to add to your app.","type":"text"},{"text":" ","type":"text"},{"text":"When Today closes, it loses changes that the user made within the app.","type":"text"},{"text":" ","type":"text"},{"text":"And it doesn’t automatically reflect changes the user makes outside of the app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Save-reminders-individually","kind":"section","role":"pseudoSymbol","title":"Save reminders individually","type":"section","url":"\/tutorials\/app-dev-training\/saving-reminders#Save-reminders-individually"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/saving-reminders#Save-updated-reminders":{"abstract":[{"text":"You still have some important features to add to your app.","type":"text"},{"text":" ","type":"text"},{"text":"When Today closes, it loses changes that the user made within the app.","type":"text"},{"text":" ","type":"text"},{"text":"And it doesn’t automatically reflect changes the user makes outside of the app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/saving-reminders#Save-updated-reminders","kind":"section","role":"pseudoSymbol","title":"Save updated reminders","type":"section","url":"\/tutorials\/app-dev-training\/saving-reminders#Save-updated-reminders"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-drag-and-drop":{"abstract":[{"text":"On macOS, users can drag an item from one place in an app to another location.","type":"text"},{"text":" ","type":"text"},{"text":"With these drag-and-drop operations, users can perform actions like moving or copying an item.","type":"text"}],"estimatedTime":"10min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop","kind":"article","role":"article","title":"Supporting drag and drop","type":"topic","url":"\/tutorials\/app-dev-training\/supporting-drag-and-drop"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-drag-and-drop#Defining-a-draggable-source-view":{"abstract":[{"text":"On macOS, users can drag an item from one place in an app to another location.","type":"text"},{"text":" ","type":"text"},{"text":"With these drag-and-drop operations, users can perform actions like moving or copying an item.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop#Defining-a-draggable-source-view","kind":"section","role":"pseudoSymbol","title":"Defining a draggable source view","type":"section","url":"\/tutorials\/app-dev-training\/supporting-drag-and-drop#Defining-a-draggable-source-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-drag-and-drop#Defining-a-drop-destination":{"abstract":[{"text":"On macOS, users can drag an item from one place in an app to another location.","type":"text"},{"text":" ","type":"text"},{"text":"With these drag-and-drop operations, users can perform actions like moving or copying an item.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop#Defining-a-drop-destination","kind":"section","role":"pseudoSymbol","title":"Defining a drop destination","type":"section","url":"\/tutorials\/app-dev-training\/supporting-drag-and-drop#Defining-a-drop-destination"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-drag-and-drop#Experimenting-with-featured-articles":{"abstract":[{"text":"On macOS, users can drag an item from one place in an app to another location.","type":"text"},{"text":" ","type":"text"},{"text":"With these drag-and-drop operations, users can perform actions like moving or copying an item.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop#Experimenting-with-featured-articles","kind":"section","role":"pseudoSymbol","title":"Experimenting with featured articles","type":"section","url":"\/tutorials\/app-dev-training\/supporting-drag-and-drop#Experimenting-with-featured-articles"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-drag-and-drop#Reordering-dynamic-content":{"abstract":[{"text":"On macOS, users can drag an item from one place in an app to another location.","type":"text"},{"text":" ","type":"text"},{"text":"With these drag-and-drop operations, users can perform actions like moving or copying an item.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop#Reordering-dynamic-content","kind":"section","role":"pseudoSymbol","title":"Reordering dynamic content","type":"section","url":"\/tutorials\/app-dev-training\/supporting-drag-and-drop#Reordering-dynamic-content"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-drag-and-drop#Whats-next":{"abstract":[{"text":"On macOS, users can drag an item from one place in an app to another location.","type":"text"},{"text":" ","type":"text"},{"text":"With these drag-and-drop operations, users can perform actions like moving or copying an item.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-drag-and-drop#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/supporting-drag-and-drop#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-multiple-windows":{"abstract":[{"text":"Mac users expect to use multiple windows to multitask, quickly switch between frequently used features of an app, or work with multiple pieces of an app’s content at the same time.","type":"text"},{"text":" ","type":"text"},{"text":"A window can contain a title, toolbar, menu commands, and keyboard shortcuts to help users work efficiently.","type":"text"}],"estimatedTime":"20min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows","kind":"article","role":"article","title":"Supporting multiple windows","type":"topic","url":"\/tutorials\/app-dev-training\/supporting-multiple-windows"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-multiple-windows#Auxiliary-windows":{"abstract":[{"text":"Mac users expect to use multiple windows to multitask, quickly switch between frequently used features of an app, or work with multiple pieces of an app’s content at the same time.","type":"text"},{"text":" ","type":"text"},{"text":"A window can contain a title, toolbar, menu commands, and keyboard shortcuts to help users work efficiently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Auxiliary-windows","kind":"section","role":"pseudoSymbol","title":"Auxiliary windows","type":"section","url":"\/tutorials\/app-dev-training\/supporting-multiple-windows#Auxiliary-windows"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-multiple-windows#Creating-a-window-group-for-data-driven-windows":{"abstract":[{"text":"Mac users expect to use multiple windows to multitask, quickly switch between frequently used features of an app, or work with multiple pieces of an app’s content at the same time.","type":"text"},{"text":" ","type":"text"},{"text":"A window can contain a title, toolbar, menu commands, and keyboard shortcuts to help users work efficiently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Creating-a-window-group-for-data-driven-windows","kind":"section","role":"pseudoSymbol","title":"Creating a window group for data-driven windows","type":"section","url":"\/tutorials\/app-dev-training\/supporting-multiple-windows#Creating-a-window-group-for-data-driven-windows"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-multiple-windows#Creating-a-window-scene":{"abstract":[{"text":"Mac users expect to use multiple windows to multitask, quickly switch between frequently used features of an app, or work with multiple pieces of an app’s content at the same time.","type":"text"},{"text":" ","type":"text"},{"text":"A window can contain a title, toolbar, menu commands, and keyboard shortcuts to help users work efficiently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Creating-a-window-scene","kind":"section","role":"pseudoSymbol","title":"Creating a window scene","type":"section","url":"\/tutorials\/app-dev-training\/supporting-multiple-windows#Creating-a-window-scene"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-multiple-windows#Opening-and-dismissing-a-data-driven-window-group":{"abstract":[{"text":"Mac users expect to use multiple windows to multitask, quickly switch between frequently used features of an app, or work with multiple pieces of an app’s content at the same time.","type":"text"},{"text":" ","type":"text"},{"text":"A window can contain a title, toolbar, menu commands, and keyboard shortcuts to help users work efficiently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Opening-and-dismissing-a-data-driven-window-group","kind":"section","role":"pseudoSymbol","title":"Opening and dismissing a data-driven window group","type":"section","url":"\/tutorials\/app-dev-training\/supporting-multiple-windows#Opening-and-dismissing-a-data-driven-window-group"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-multiple-windows#Opening-and-dismissing-unique-windows":{"abstract":[{"text":"Mac users expect to use multiple windows to multitask, quickly switch between frequently used features of an app, or work with multiple pieces of an app’s content at the same time.","type":"text"},{"text":" ","type":"text"},{"text":"A window can contain a title, toolbar, menu commands, and keyboard shortcuts to help users work efficiently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Opening-and-dismissing-unique-windows","kind":"section","role":"pseudoSymbol","title":"Opening and dismissing unique windows","type":"section","url":"\/tutorials\/app-dev-training\/supporting-multiple-windows#Opening-and-dismissing-unique-windows"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-multiple-windows#Opening-and-dismissing-windows-programmatically":{"abstract":[{"text":"Mac users expect to use multiple windows to multitask, quickly switch between frequently used features of an app, or work with multiple pieces of an app’s content at the same time.","type":"text"},{"text":" ","type":"text"},{"text":"A window can contain a title, toolbar, menu commands, and keyboard shortcuts to help users work efficiently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Opening-and-dismissing-windows-programmatically","kind":"section","role":"pseudoSymbol","title":"Opening and dismissing windows programmatically","type":"section","url":"\/tutorials\/app-dev-training\/supporting-multiple-windows#Opening-and-dismissing-windows-programmatically"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-multiple-windows#Sizing-and-positioning-windows":{"abstract":[{"text":"Mac users expect to use multiple windows to multitask, quickly switch between frequently used features of an app, or work with multiple pieces of an app’s content at the same time.","type":"text"},{"text":" ","type":"text"},{"text":"A window can contain a title, toolbar, menu commands, and keyboard shortcuts to help users work efficiently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Sizing-and-positioning-windows","kind":"section","role":"pseudoSymbol","title":"Sizing and positioning windows","type":"section","url":"\/tutorials\/app-dev-training\/supporting-multiple-windows#Sizing-and-positioning-windows"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-multiple-windows#The-main-window":{"abstract":[{"text":"Mac users expect to use multiple windows to multitask, quickly switch between frequently used features of an app, or work with multiple pieces of an app’s content at the same time.","type":"text"},{"text":" ","type":"text"},{"text":"A window can contain a title, toolbar, menu commands, and keyboard shortcuts to help users work efficiently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#The-main-window","kind":"section","role":"pseudoSymbol","title":"The main window","type":"section","url":"\/tutorials\/app-dev-training\/supporting-multiple-windows#The-main-window"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/supporting-multiple-windows#Whats-next":{"abstract":[{"text":"Mac users expect to use multiple windows to multitask, quickly switch between frequently used features of an app, or work with multiple pieces of an app’s content at the same time.","type":"text"},{"text":" ","type":"text"},{"text":"A window can contain a title, toolbar, menu commands, and keyboard shortcuts to help users work efficiently.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/supporting-multiple-windows#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/supporting-multiple-windows#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit","kind":"article","role":"article","title":"Surfacing app features","type":"topic","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Considering-design":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Considering-design","kind":"section","role":"pseudoSymbol","title":"Considering design","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Considering-design"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Creating-tips":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Creating-tips","kind":"section","role":"pseudoSymbol","title":"Creating tips","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Creating-tips"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Defining-actions":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Defining-actions","kind":"section","role":"pseudoSymbol","title":"Defining actions","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Defining-actions"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Displaying-tips":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Displaying-tips","kind":"section","role":"pseudoSymbol","title":"Displaying tips","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Displaying-tips"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Experimenting-with-tips":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Experimenting-with-tips","kind":"section","role":"pseudoSymbol","title":"Experimenting with tips","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Experimenting-with-tips"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Limiting-tip-frequency":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Limiting-tip-frequency","kind":"section","role":"pseudoSymbol","title":"Limiting tip frequency","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Limiting-tip-frequency"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Loading-tips":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Loading-tips","kind":"section","role":"pseudoSymbol","title":"Loading tips","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Loading-tips"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Resetting-tips":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Resetting-tips","kind":"section","role":"pseudoSymbol","title":"Resetting tips","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Resetting-tips"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Setting-rules":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Setting-rules","kind":"section","role":"pseudoSymbol","title":"Setting rules","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Setting-rules"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Using-inline-tips-in-Article-Accelerator":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Using-inline-tips-in-Article-Accelerator","kind":"section","role":"pseudoSymbol","title":"Using inline tips in Article Accelerator","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Using-inline-tips-in-Article-Accelerator"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Using-popover-tips-in-Article-Accelerator":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Using-popover-tips-in-Article-Accelerator","kind":"section","role":"pseudoSymbol","title":"Using popover tips in Article Accelerator","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Using-popover-tips-in-Article-Accelerator"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/surfacing-app-features-with-tipkit#Whats-next":{"abstract":[{"text":"In this article, you’ll learn how to use the TipKit framework to help users discover unused features in your app.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll learn how to customize the appearance of your tips and control where and when they appear in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/surfacing-app-features-with-tipkit#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swift-data":{"abstract":[{"text":"Users expect their progress and data to persist reliably between launches of an app.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator stores content that users create separately from the app’s immutable content.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also discover how the app uses SwiftData to persist user-created content, such as article highlights.","type":"text"}],"estimatedTime":"10min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swift-data","kind":"article","role":"article","title":"Persisting user data","type":"topic","url":"\/tutorials\/app-dev-training\/swift-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swift-data#Article-state":{"abstract":[{"text":"Users expect their progress and data to persist reliably between launches of an app.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator stores content that users create separately from the app’s immutable content.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also discover how the app uses SwiftData to persist user-created content, such as article highlights.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swift-data#Article-state","kind":"section","role":"pseudoSymbol","title":"Article state","type":"section","url":"\/tutorials\/app-dev-training\/swift-data#Article-state"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swift-data#Persistence":{"abstract":[{"text":"Users expect their progress and data to persist reliably between launches of an app.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator stores content that users create separately from the app’s immutable content.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also discover how the app uses SwiftData to persist user-created content, such as article highlights.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swift-data#Persistence","kind":"section","role":"pseudoSymbol","title":"Persistence","type":"section","url":"\/tutorials\/app-dev-training\/swift-data#Persistence"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swift-data#Whats-next":{"abstract":[{"text":"Users expect their progress and data to persist reliably between launches of an app.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator stores content that users create separately from the app’s immutable content.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll also discover how the app uses SwiftData to persist user-created content, such as article highlights.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swift-data#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/swift-data#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swiftdata-sorting-and-filtering":{"abstract":[{"text":"Previously, you learned how to create a SwiftData model context and add objects to it.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator fetches objects from a persistent store.","type":"text"},{"text":" ","type":"text"},{"text":"And you’ll explore how to sort and filter the objects to list only the objects that you want.","type":"text"}],"estimatedTime":"15min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering","kind":"article","role":"article","title":"Fetching, sorting, and filtering data","type":"topic","url":"\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swiftdata-sorting-and-filtering#Considering-user-data":{"abstract":[{"text":"Previously, you learned how to create a SwiftData model context and add objects to it.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator fetches objects from a persistent store.","type":"text"},{"text":" ","type":"text"},{"text":"And you’ll explore how to sort and filter the objects to list only the objects that you want.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Considering-user-data","kind":"section","role":"pseudoSymbol","title":"Considering user data","type":"section","url":"\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Considering-user-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swiftdata-sorting-and-filtering#Fetching-data-using-SwiftData":{"abstract":[{"text":"Previously, you learned how to create a SwiftData model context and add objects to it.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator fetches objects from a persistent store.","type":"text"},{"text":" ","type":"text"},{"text":"And you’ll explore how to sort and filter the objects to list only the objects that you want.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Fetching-data-using-SwiftData","kind":"section","role":"pseudoSymbol","title":"Fetching data using SwiftData","type":"section","url":"\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Fetching-data-using-SwiftData"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swiftdata-sorting-and-filtering#Filtering-articles":{"abstract":[{"text":"Previously, you learned how to create a SwiftData model context and add objects to it.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator fetches objects from a persistent store.","type":"text"},{"text":" ","type":"text"},{"text":"And you’ll explore how to sort and filter the objects to list only the objects that you want.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Filtering-articles","kind":"section","role":"pseudoSymbol","title":"Filtering articles","type":"section","url":"\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Filtering-articles"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swiftdata-sorting-and-filtering#Sorting-articles":{"abstract":[{"text":"Previously, you learned how to create a SwiftData model context and add objects to it.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator fetches objects from a persistent store.","type":"text"},{"text":" ","type":"text"},{"text":"And you’ll explore how to sort and filter the objects to list only the objects that you want.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Sorting-articles","kind":"section","role":"pseudoSymbol","title":"Sorting articles","type":"section","url":"\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Sorting-articles"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swiftdata-sorting-and-filtering#Using-dynamic-queries":{"abstract":[{"text":"Previously, you learned how to create a SwiftData model context and add objects to it.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator fetches objects from a persistent store.","type":"text"},{"text":" ","type":"text"},{"text":"And you’ll explore how to sort and filter the objects to list only the objects that you want.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Using-dynamic-queries","kind":"section","role":"pseudoSymbol","title":"Using dynamic queries","type":"section","url":"\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Using-dynamic-queries"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swiftdata-sorting-and-filtering#Using-sort-descriptors":{"abstract":[{"text":"Previously, you learned how to create a SwiftData model context and add objects to it.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator fetches objects from a persistent store.","type":"text"},{"text":" ","type":"text"},{"text":"And you’ll explore how to sort and filter the objects to list only the objects that you want.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Using-sort-descriptors","kind":"section","role":"pseudoSymbol","title":"Using sort descriptors","type":"section","url":"\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Using-sort-descriptors"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/swiftdata-sorting-and-filtering#Whats-next":{"abstract":[{"text":"Previously, you learned how to create a SwiftData model context and add objects to it.","type":"text"},{"text":" ","type":"text"},{"text":"In this article, you’ll learn how Article Accelerator fetches objects from a persistent store.","type":"text"},{"text":" ","type":"text"},{"text":"And you’ll explore how to sort and filter the objects to list only the objects that you want.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/swiftdata-sorting-and-filtering#Whats-next"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/transcribing-speech-to-text":{"abstract":[{"text":"In this tutorial, you’ll add a feature to Scrumdinger that captures and logs meeting transcripts.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll request access to device hardware like the microphone and integrate the Speech framework to transcribe live audio to text.","type":"text"}],"estimatedTime":"25min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text","kind":"project","role":"project","title":"Transcribing speech to text","type":"topic","url":"\/tutorials\/app-dev-training\/transcribing-speech-to-text"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/transcribing-speech-to-text#Create-a-history-view":{"abstract":[{"text":"In this tutorial, you’ll add a feature to Scrumdinger that captures and logs meeting transcripts.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll request access to device hardware like the microphone and integrate the Speech framework to transcribe live audio to text.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Create-a-history-view","kind":"section","role":"pseudoSymbol","title":"Create a history view","type":"section","url":"\/tutorials\/app-dev-training\/transcribing-speech-to-text#Create-a-history-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/transcribing-speech-to-text#Display-a-history-view":{"abstract":[{"text":"In this tutorial, you’ll add a feature to Scrumdinger that captures and logs meeting transcripts.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll request access to device hardware like the microphone and integrate the Speech framework to transcribe live audio to text.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Display-a-history-view","kind":"section","role":"pseudoSymbol","title":"Display a history view","type":"section","url":"\/tutorials\/app-dev-training\/transcribing-speech-to-text#Display-a-history-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/transcribing-speech-to-text#Display-recording-indicators":{"abstract":[{"text":"In this tutorial, you’ll add a feature to Scrumdinger that captures and logs meeting transcripts.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll request access to device hardware like the microphone and integrate the Speech framework to transcribe live audio to text.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Display-recording-indicators","kind":"section","role":"pseudoSymbol","title":"Display recording indicators","type":"section","url":"\/tutorials\/app-dev-training\/transcribing-speech-to-text#Display-recording-indicators"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/transcribing-speech-to-text#Integrate-speech-recognition":{"abstract":[{"text":"In this tutorial, you’ll add a feature to Scrumdinger that captures and logs meeting transcripts.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll request access to device hardware like the microphone and integrate the Speech framework to transcribe live audio to text.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Integrate-speech-recognition","kind":"section","role":"pseudoSymbol","title":"Integrate speech recognition","type":"section","url":"\/tutorials\/app-dev-training\/transcribing-speech-to-text#Integrate-speech-recognition"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/transcribing-speech-to-text#Request-authorization-to-device-hardware":{"abstract":[{"text":"In this tutorial, you’ll add a feature to Scrumdinger that captures and logs meeting transcripts.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll request access to device hardware like the microphone and integrate the Speech framework to transcribe live audio to text.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/transcribing-speech-to-text#Request-authorization-to-device-hardware","kind":"section","role":"pseudoSymbol","title":"Request authorization to device hardware","type":"section","url":"\/tutorials\/app-dev-training\/transcribing-speech-to-text#Request-authorization-to-device-hardware"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/updating-app-data":{"abstract":[{"text":"In this tutorial, you’ll add two new features to Scrumdinger.","type":"text"},{"text":" ","type":"text"},{"text":"First, you’ll add a view to create new daily scrum meetings.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll update the meeting timer to keep track of past meetings.","type":"text"}],"estimatedTime":"15min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/updating-app-data","kind":"project","role":"project","title":"Updating app data","type":"topic","url":"\/tutorials\/app-dev-training\/updating-app-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/updating-app-data#Add-scrum-history":{"abstract":[{"text":"In this tutorial, you’ll add two new features to Scrumdinger.","type":"text"},{"text":" ","type":"text"},{"text":"First, you’ll add a view to create new daily scrum meetings.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll update the meeting timer to keep track of past meetings.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/updating-app-data#Add-scrum-history","kind":"section","role":"pseudoSymbol","title":"Add scrum history","type":"section","url":"\/tutorials\/app-dev-training\/updating-app-data#Add-scrum-history"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/updating-app-data#Use-the-edit-view-to-create-a-new-scrum":{"abstract":[{"text":"In this tutorial, you’ll add two new features to Scrumdinger.","type":"text"},{"text":" ","type":"text"},{"text":"First, you’ll add a view to create new daily scrum meetings.","type":"text"},{"text":" ","type":"text"},{"text":"Then, you’ll update the meeting timer to keep track of past meetings.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/updating-app-data#Use-the-edit-view-to-create-a-new-scrum","kind":"section","role":"pseudoSymbol","title":"Use the edit view to create a new scrum","type":"section","url":"\/tutorials\/app-dev-training\/updating-app-data#Use-the-edit-view-to-create-a-new-scrum"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-content-views":{"abstract":[{"text":"In this tutorial, you’ll add capabilities to the app’s editing mode that transform a view-only list of reminder details into editable controls.","type":"text"}],"estimatedTime":"35min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views","kind":"project","role":"project","title":"Using content views","type":"topic","url":"\/tutorials\/app-dev-training\/using-content-views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-content-views#Complete-the-content-view":{"abstract":[{"text":"In this tutorial, you’ll add capabilities to the app’s editing mode that transform a view-only list of reminder details into editable controls.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Complete-the-content-view","kind":"section","role":"pseudoSymbol","title":"Complete the content view","type":"section","url":"\/tutorials\/app-dev-training\/using-content-views#Complete-the-content-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-content-views#Conform-to-the-content-view-protocol":{"abstract":[{"text":"In this tutorial, you’ll add capabilities to the app’s editing mode that transform a view-only list of reminder details into editable controls.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Conform-to-the-content-view-protocol","kind":"section","role":"pseudoSymbol","title":"Conform to the content view protocol","type":"section","url":"\/tutorials\/app-dev-training\/using-content-views#Conform-to-the-content-view-protocol"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-content-views#Create-a-custom-view-with-a-text-field":{"abstract":[{"text":"In this tutorial, you’ll add capabilities to the app’s editing mode that transform a view-only list of reminder details into editable controls.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Create-a-custom-view-with-a-text-field","kind":"section","role":"pseudoSymbol","title":"Create a custom view with a text field","type":"section","url":"\/tutorials\/app-dev-training\/using-content-views#Create-a-custom-view-with-a-text-field"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-content-views#Create-a-reusable-layout-function":{"abstract":[{"text":"In this tutorial, you’ll add capabilities to the app’s editing mode that transform a view-only list of reminder details into editable controls.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Create-a-reusable-layout-function","kind":"section","role":"pseudoSymbol","title":"Create a reusable layout function","type":"section","url":"\/tutorials\/app-dev-training\/using-content-views#Create-a-reusable-layout-function"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-content-views#Create-content-views-for-the-date-and-notes":{"abstract":[{"text":"In this tutorial, you’ll add capabilities to the app’s editing mode that transform a view-only list of reminder details into editable controls.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Create-content-views-for-the-date-and-notes","kind":"section","role":"pseudoSymbol","title":"Create content views for the date and notes","type":"section","url":"\/tutorials\/app-dev-training\/using-content-views#Create-content-views-for-the-date-and-notes"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-content-views#Display-the-content-view":{"abstract":[{"text":"In this tutorial, you’ll add capabilities to the app’s editing mode that transform a view-only list of reminder details into editable controls.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Display-the-content-view","kind":"section","role":"pseudoSymbol","title":"Display the content view","type":"section","url":"\/tutorials\/app-dev-training\/using-content-views#Display-the-content-view"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-content-views#Extract-configuration-methods":{"abstract":[{"text":"In this tutorial, you’ll add capabilities to the app’s editing mode that transform a view-only list of reminder details into editable controls.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-content-views#Extract-configuration-methods","kind":"section","role":"pseudoSymbol","title":"Extract configuration methods","type":"section","url":"\/tutorials\/app-dev-training\/using-content-views#Extract-configuration-methods"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-existentials-and-generics":{"abstract":[{"text":"Earthquakes will use a network client to fetch JSON data from a remote server.","type":"text"},{"text":" ","type":"text"},{"text":"This article introduces generic and existential types that you can use to develop a reusable network client.","type":"text"},{"text":" ","type":"text"},{"text":"It also explores using these types in tests to ensure the client is robust.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll consider how these types affect your code’s simplicity and performance.","type":"text"}],"estimatedTime":"5min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-existentials-and-generics","kind":"article","role":"article","title":"Using existentials and generics","type":"topic","url":"\/tutorials\/app-dev-training\/using-existentials-and-generics"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-existentials-and-generics#Comparing-existential-and-generic-types":{"abstract":[{"text":"Earthquakes will use a network client to fetch JSON data from a remote server.","type":"text"},{"text":" ","type":"text"},{"text":"This article introduces generic and existential types that you can use to develop a reusable network client.","type":"text"},{"text":" ","type":"text"},{"text":"It also explores using these types in tests to ensure the client is robust.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll consider how these types affect your code’s simplicity and performance.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-existentials-and-generics#Comparing-existential-and-generic-types","kind":"section","role":"pseudoSymbol","title":"Comparing existential and generic types","type":"section","url":"\/tutorials\/app-dev-training\/using-existentials-and-generics#Comparing-existential-and-generic-types"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-existentials-and-generics#Using-existential-types-in-Earthquakes":{"abstract":[{"text":"Earthquakes will use a network client to fetch JSON data from a remote server.","type":"text"},{"text":" ","type":"text"},{"text":"This article introduces generic and existential types that you can use to develop a reusable network client.","type":"text"},{"text":" ","type":"text"},{"text":"It also explores using these types in tests to ensure the client is robust.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll consider how these types affect your code’s simplicity and performance.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-existentials-and-generics#Using-existential-types-in-Earthquakes","kind":"section","role":"pseudoSymbol","title":"Using existential types in Earthquakes","type":"section","url":"\/tutorials\/app-dev-training\/using-existentials-and-generics#Using-existential-types-in-Earthquakes"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-stacks-to-arrange-views":{"abstract":[{"text":"Create, modify, and combine views to compose your app’s user interface using the SwiftUI declarative syntax.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll start building Scrumdinger, an app that manages meetings, by arranging groups of views to create the meeting timer screen.","type":"text"},{"text":" ","type":"text"},{"text":"As you progress through the module, you’ll revisit the timer screen as you work toward the final design.","type":"text"}],"estimatedTime":"15min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views","kind":"project","role":"project","title":"Using stacks to arrange views","type":"topic","url":"\/tutorials\/app-dev-training\/using-stacks-to-arrange-views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-stacks-to-arrange-views#Compose-views":{"abstract":[{"text":"Create, modify, and combine views to compose your app’s user interface using the SwiftUI declarative syntax.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll start building Scrumdinger, an app that manages meetings, by arranging groups of views to create the meeting timer screen.","type":"text"},{"text":" ","type":"text"},{"text":"As you progress through the module, you’ll revisit the timer screen as you work toward the final design.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Compose-views","kind":"section","role":"pseudoSymbol","title":"Compose views","type":"section","url":"\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Compose-views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-stacks-to-arrange-views#Create-a-project":{"abstract":[{"text":"Create, modify, and combine views to compose your app’s user interface using the SwiftUI declarative syntax.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll start building Scrumdinger, an app that manages meetings, by arranging groups of views to create the meeting timer screen.","type":"text"},{"text":" ","type":"text"},{"text":"As you progress through the module, you’ll revisit the timer screen as you work toward the final design.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Create-a-project","kind":"section","role":"pseudoSymbol","title":"Create a project","type":"section","url":"\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Create-a-project"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-stacks-to-arrange-views#Modify-and-style-views":{"abstract":[{"text":"Create, modify, and combine views to compose your app’s user interface using the SwiftUI declarative syntax.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll start building Scrumdinger, an app that manages meetings, by arranging groups of views to create the meeting timer screen.","type":"text"},{"text":" ","type":"text"},{"text":"As you progress through the module, you’ll revisit the timer screen as you work toward the final design.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Modify-and-style-views","kind":"section","role":"pseudoSymbol","title":"Modify and style views","type":"section","url":"\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Modify-and-style-views"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/using-stacks-to-arrange-views#Supplement-accessibility-data":{"abstract":[{"text":"Create, modify, and combine views to compose your app’s user interface using the SwiftUI declarative syntax.","type":"text"},{"text":" ","type":"text"},{"text":"You’ll start building Scrumdinger, an app that manages meetings, by arranging groups of views to create the meeting timer screen.","type":"text"},{"text":" ","type":"text"},{"text":"As you progress through the module, you’ll revisit the timer screen as you work toward the final design.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Supplement-accessibility-data","kind":"section","role":"pseudoSymbol","title":"Supplement accessibility data","type":"section","url":"\/tutorials\/app-dev-training\/using-stacks-to-arrange-views#Supplement-accessibility-data"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/working-with-toolbars":{"abstract":[{"text":"A macOS window has a toolbar at the top of the window’s frame.","type":"text"},{"text":" ","type":"text"},{"text":"This area displays the title of the window and provides a space for controls and other tools that can access features in your app.","type":"text"}],"estimatedTime":"10min","identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars","kind":"article","role":"article","title":"Working with toolbars","type":"topic","url":"\/tutorials\/app-dev-training\/working-with-toolbars"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/working-with-toolbars#Configuring-toolbar-items":{"abstract":[{"text":"A macOS window has a toolbar at the top of the window’s frame.","type":"text"},{"text":" ","type":"text"},{"text":"This area displays the title of the window and provides a space for controls and other tools that can access features in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars#Configuring-toolbar-items","kind":"section","role":"pseudoSymbol","title":"Configuring toolbar items","type":"section","url":"\/tutorials\/app-dev-training\/working-with-toolbars#Configuring-toolbar-items"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/working-with-toolbars#Enabling-toolbar-customization":{"abstract":[{"text":"A macOS window has a toolbar at the top of the window’s frame.","type":"text"},{"text":" ","type":"text"},{"text":"This area displays the title of the window and provides a space for controls and other tools that can access features in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars#Enabling-toolbar-customization","kind":"section","role":"pseudoSymbol","title":"Enabling toolbar customization","type":"section","url":"\/tutorials\/app-dev-training\/working-with-toolbars#Enabling-toolbar-customization"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/working-with-toolbars#Ensuring-toolbar-accessibility":{"abstract":[{"text":"A macOS window has a toolbar at the top of the window’s frame.","type":"text"},{"text":" ","type":"text"},{"text":"This area displays the title of the window and provides a space for controls and other tools that can access features in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars#Ensuring-toolbar-accessibility","kind":"section","role":"pseudoSymbol","title":"Ensuring toolbar accessibility","type":"section","url":"\/tutorials\/app-dev-training\/working-with-toolbars#Ensuring-toolbar-accessibility"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/working-with-toolbars#Styling-a-toolbar":{"abstract":[{"text":"A macOS window has a toolbar at the top of the window’s frame.","type":"text"},{"text":" ","type":"text"},{"text":"This area displays the title of the window and provides a space for controls and other tools that can access features in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars#Styling-a-toolbar","kind":"section","role":"pseudoSymbol","title":"Styling a toolbar","type":"section","url":"\/tutorials\/app-dev-training\/working-with-toolbars#Styling-a-toolbar"},"doc://com.apple.app-dev-training/tutorials/app-dev-training/working-with-toolbars#Whats-next":{"abstract":[{"text":"A macOS window has a toolbar at the top of the window’s frame.","type":"text"},{"text":" ","type":"text"},{"text":"This area displays the title of the window and provides a space for controls and other tools that can access features in your app.","type":"text"}],"identifier":"doc:\/\/com.apple.app-dev-training\/tutorials\/app-dev-training\/working-with-toolbars#Whats-next","kind":"section","role":"pseudoSymbol","title":"What’s next?","type":"section","url":"\/tutorials\/app-dev-training\/working-with-toolbars#Whats-next"},"https://apps.apple.com/us/app/xcode/id497799835?mt=12":{"identifier":"https:\/\/apps.apple.com\/us\/app\/xcode\/id497799835?mt=12","title":"latest version of Xcode","titleInlineContent":[{"text":"latest version of Xcode","type":"text"}],"type":"link","url":"https:\/\/apps.apple.com\/us\/app\/xcode\/id497799835?mt=12"},"https://developer.apple.com/forums/tags/swiftui":{"identifier":"https:\/\/developer.apple.com\/forums\/tags\/swiftui","title":"Apple Developer Forums","titleInlineContent":[{"text":"Apple Developer Forums","type":"text"}],"type":"link","url":"https:\/\/developer.apple.com\/forums\/tags\/swiftui"},"https://docs.swift.org/swift-book/documentation/the-swift-programming-language/closures/":{"identifier":"https:\/\/docs.swift.org\/swift-book\/documentation\/the-swift-programming-language\/closures\/","title":"Closures","titleInlineContent":[{"text":"Closures","type":"text"}],"type":"link","url":"https:\/\/docs.swift.org\/swift-book\/documentation\/the-swift-programming-language\/closures\/"},"https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics/":{"identifier":"https:\/\/docs.swift.org\/swift-book\/documentation\/the-swift-programming-language\/thebasics\/","title":"The Basics","titleInlineContent":[{"text":"The Basics","type":"text"}],"type":"link","url":"https:\/\/docs.swift.org\/swift-book\/documentation\/the-swift-programming-language\/thebasics\/"}}}