Master SwiftUI and Core Data: Build Complex Real-World Apps with Ease

This course teaches you how to build a feature-rich and complex app for iOS and macOS. Write code that is simple, scalable, and a joy to work with.

 Building a complex SwiftUI app can feel like solving a never-ending jigsaw puzzle.

This course will teach you everything you need to know about how to build large, complex projects with a scalable app structure in SwiftUI. You'll work through an app that uses core data for data persistence. Core data makes it easy to save your user's data on device. In this course, everything is broken down into easy to understand, doable and reusable steps so you can quickly master one piece at a time!

With this knowledge, your apps can grow with ever more complex features, but your code will stay easy to understand and maintain.

Course Summary

Create a large and complex app for macOS, iOS, and iPadOS with SwiftUI and Xcode, including Core Data and advanced data flow

Most courses teach simple concepts and give an overview of all the different features of SwiftUI. In order to master development, there is nothing better than building a fully fletched application. In this course, we will go through all the main steps. I want to showcase the whole development process with SwiftUI. From app idea to MVP. You will get to know my workflow and how I make my design decisions. Follow me along in creating this amazing app.

What will students learn in your course?

  • Be able to persists data locally with Core Data: create the data model and know how to use Core Data with SwiftUI
  • Know how to share the user data  on multiple devices by combining Core Data with iCloud
  • Know how to take advantage of ObservableObject and the environment to structure the data flow in SwiftUI
  • Be able to write clean readable code 
  • Be able to write Unit Tests
  • Know how to build professional iOS and macOS application
  • Know how to use SwiftUI for a macOS application: including window management, toolbar, and keyboard shortcuts
  •  Be able to respect State restoration and save the users data for the next app launch (including SwiftUI lifecycle)
  •  Be able to save the users preferences in User Defaults with @AppStorage
  • Know how to use drag and drop in your SwiftUI views to share data from lists, images and texts

Course Outline

example for note taking app with SwiftUI

1. Setting up the project

First, you will create a new project with SwiftUI and Core Data. I will teach you the basics of Core Data, like how to fetch data and manipulate data in the database.

Duration: 2h 18m

2. Unit tests

In the second section, I will talk about unit tests. They can be very useful when you want to test code. You will practice Core Data operations with unit tests because they make it easy to implement one test case at a time.

Duration: 42m

3. Schema Attributes

Now, we will dive deeper in the ins and outs of Core Data. I will show you how to describe the model. You will learn how to work with types supported by Core Data. How to store enums, colors and images.  

Duration: 2h 13m

4. Relationships

In this section, you will learn about relationships. We will implement 1-1, 1-many and many-many relationships for our note-taking app. You will see how Core Data handles much more complex data.

Duration: 2h 29m

5. Fetch Request with Predicates

In this section, you will learn how to search for specific information in the database. You will get familiar with how to write queries with NSPredicate.

Duration: 2h 18m

6. Notes Sorting and Searching

You will use your new knowledge about NSPredicate to implement advanced search functionality in SwiftUI. I will show you how to use the searchable view modifier with search scope and tokens.

Duration: 2h 15m

7. State

This is a very interesting discussion about the state in SwiftUI. I will show you how to take advantage of state-to-build features like deep linking, state restoration, and und/redo. We will also implement programmatic navigation.

Duration: 1h 40m

8. Drag and Drop

There is no good note-taking app without drag and drop. You will learn how to drag system types like text and images and also how to make your own custom types draggable.

Duration: 2h 

9. How to Make a Great Mac App

Now it is time to transform your note-taking app into a productivity power machine. Learn how to create menus with keyboard shortcuts, a menu bar extra, and a settings window. I will show you the new SwiftUI 4 features for windows managment.

Duration: 2h  46m

10. Adaptation to iOS and Crossplatform Stategies

In this section, I will show you how we can adapt our note-taking app for iOS. This includes the new toolbar title menu, and NavigationStack inside a NavigationSplitView. You will also learn how to share data with Sharelink and file exporter.

Duration: 3h  09m

11. Architecture

Last, I want to discuss with you what architecture and patterns best work with SwiftUI and Core Data. I will also talk about MVVM with Core Data and why it is not the best solution.

Duration: 52m

Total Completion Time: 23h

Build a Great Note-Taking App with SwiftUI and Core Data

SwiftUI´s new Navigation API 

NavigationSplitView with 3 columns works great for larger screens like the Mac and iPad in landscape mode.
Tapping on a linked note, opens the note. We will use NavigationStack on iOS to create a continues navigation.

Learn macOS Development with SwiftUI

Learning macOS development with SwiftUI is a great opportunity for iOS developers to expand their skills and reach a new audience. With SwiftUI, Apple has unified the development experience across all of its platforms, making it easier to build apps that work seamlessly on both iOS and macOS.

Additionally, there is a growing demand for Mac apps, especially with the recent surge in remote work, which presents a great opportunity for developers to reach a new audience and build new revenue streams.

By learning macOS development with SwiftUI, iOS developers can leverage their existing skills and knowledge to build great apps for Mac. The same concepts and patterns used in iOS development apply to macOS development with SwiftUI, which makes the learning curve relatively low.

Why developing Mac apps for macOS 13 has changed?

SwiftUI has evolved since its introduction in 2019. While most updates have priorities for iOS, we finally got much need APIs for macOS. New in macOS 13 are:

  • identifiable window types and the ability to programmatically open windows, 
  • window customization with default size and position 
  • focus management which is working so that you now can properly add menu items 
  • new navigation APIs with NavigationSplitView and NavigationStack
  •  menu bar extras
  • advanced search functionality with search tokens and scrap

The new additions to macOS 13 enable developers to create powerful and productive Mac apps.

Check out what macOS app you will build!

Menu bar with custom menus and keyboard shortcuts.

Add a menu bar extra and add a toggle in the Settings window to show/hide it.

Create a Settings window with TabView and Forms

With macOS 13 you can now programmatically open a new window in SwiftUI.

Learn how to implement different types of windows.

Data Persistence with Core Data

Overall, Core Data is a powerful and flexible framework that provides many benefits to iOS app developers. By using Core Data, you can simplify data management in your app and focus on building the features that matter to your users.

 Here is a list of some of the key benefits of using Core Data in iOS app development:

Abstraction of storage: Core Data provides an abstraction layer over the underlying storage mechanism, allowing you to work with data at a higher level of abstraction.

Built-in support for relationships: Core Data provides built-in support for modeling relationships between entities, making it easy to build complex data models.

Automatic change tracking: Core Data automatically tracks changes to your data, making it easy to undo and redo changes.

Integration with other iOS frameworks: Core Data integrates well with other iOS frameworks, such as SwiftUI and UIKit, making it easy to build iOS apps.

Support for versioning: Core Data supports versioning of data models, making it easy to evolve your data model as your app evolves.

Easy to use: Core Data provides an easy-to-use interface for managing and persisting data, allowing you to focus on your app's functionality rather than the underlying storage mechanism.

Automatic memory management: Core Data automatically manages memory for you, loading and unloading data as needed.

Lightweight migration: Core Data supports lightweight migration, making it easy to migrate data between different versions of your data model.

Frequently Asked Questions

In this project-based course, we'll be using Core Data to save and retrieve the user's data. Core Data is a powerful and flexible framework that allows us to manage and persist data in our iOS apps.

Throughout the course, we'll cover the basics of Core Data, including setting up a data model, creating managed objects, and working with fetch requests. We'll also explore advanced Core Data topics, such as implementing relationships between entities and filtering with NSPredicate. By the end of the course, you'll have a solid understanding of Core Data and how to use it to save and retrieve data in your iOS apps.

Core Data is a tool that helps app developers manage and store data in their iOS apps. It lets you create a model of what your app's data should look like, and then automatically saves and retrieves that data for you. With Core Data, you can create complex relationships between different pieces of data, and easily change your data model as your app evolves. Core Data also keeps track of changes to your data, so you can undo or redo them if needed. In short, Core Data helps developers focus on building the features of their app, while handling the hard work of managing and storing data in the background.

Whether or not to use Core Data in an iOS app depends on the complexity and requirements of the app. If the app involves managing a significant amount of data with complex relationships or requires advanced features like undo and redo, Core Data is an excellent choice. However, if the app requires only basic data storage and retrieval or is a small and simple app, using Core Data may be overkill.
Because you will build a complex note-taking app in this course, Core Data is a great choice..

Yes, Core Data and SwiftUI work very well together. In fact, Apple recommends using Core Data to manage data in SwiftUI apps. Core Data provides a layer of abstraction between your app's data and the underlying storage mechanism, which is essential for building scalable and flexible apps. Additionally, SwiftUI provides a declarative way of building user interfaces, making it easy to display data managed by Core Data.  

With Core Data and SwiftUI, you can create complex data models and relationships, and easily display that data in your app's user interface. SwiftUI has special features like the  @FetchRequest property wrapper which allows you to fetch data from your data store and display it in your app's UI. SwiftUI's built-in state management makes it easy to keep your UI in sync with changes to your data.

Overall, using Core Data and SwiftUI together is a powerful combination for building data-driven iOS apps. It allows you to focus on building great user experiences, while Core Data takes care of the complex data management tasks..

This course is fully updated for iOS 16 and macOS 13

 The project is taking advantage of the latest and greatest features of SwiftUI. Building macOS apps gets so much more fun.

Course Curriculum



Top Rated
  • 5 100%
  • 4
  • 3
  • 2
  • 1
Steven Barnett

Excellent course

I've been 'messing around' with Mac programming for a long time (I'm a retired Windows programmer) and have been able to write iOS and MacOS apps using what I have learnt from that well known video site. However, I have always arrived at a point where I want to do something more significant and have failed to find a course that goes beyond the most basic of SwiftUI coding. That frustration ended when I took this course. The content goes well beyond anything I have watched before and delves into those more difficult areas that are important to a professional application. I am gratified to know that most of what I learnt previously is actually 'right' and am grateful to Karin for guiding me so well in those topics that I struggled with when learning alone. The course is not easy and will require you to think. That's a good thing. I now go away from this course with a list of changes that I need to do to my existing applications to implement features in a better way and to add usability that is so obviously lacking in my code. That alone makes this course worth every minute of the time it took and the cost. Thank you Karin for an excellent course.

7 months ago

Have a look what other people are saying

This is exactly what I need. I've already mentally transitioned to using SwiftUI as my UI framework, since it is much more manageable for non-designers like myself, but I also want to use Core Data for any serious application collecting reasonable amount of data. CloudKit is also required, since I can not see any meaningful application not synchronizing between the several devices a user will typically have. Very good combination of technologies and right on the spot for me. The pace is a bit relentless but up to now the tutorial solved a couple of issues that I had with Core data. UI elements are very simplistic, but I guess the focus is on how to use Core Data in a serious application

Levent Mollamustafaoğlu

So far so good, great to find a course that is focusing more on intermediate/advanced topics as there are tons of simple beginners courses that don't help much with creating a proper production app. Thanks!

Jordi Kitto

This was a really good course. The project is complex and Karin presented a lot of advanced concepts both for macOS and iOS. For me the explanations in the iOS section were a bit less clear but there was still a lot of valuable information there. All in all a really good learning experience. Keep in mind that it is not a beginners course, but I think intermediate to advanced users will find it both interesting and beneficial to upgrading their skill set.

Roy Frieband

Frequently Asked Questions (FAQ)

  • A Mac computer running macOS 11 or higher. If you want to test all the new macOS features for SwiftUI, you need to run macOS 13 Ventura.
  • You will need Xcode 14. 
  • Basic knowledge of Swift programming language
  • Basic level of SwiftUI - this is an advanced course
  • If you want to learn how to build real-world applications with SwiftUI
  • If you started learning SwiftUI and you want to get to the next level by working on a larger project
  • If you are an iOS developer who wants to take advantage of SwiftUI to create your very first macOS application

Yes, of course. If you are not happy with my course, I will give you a full refund. You have a 30day money-back guarantee.

Karin Prater

I have a Ph.D. in physicist, during which I started to love software engineering. Since I am also passionate about learning I started to build my own learning app. 

I am also very enthusiastic about design, which is a bit unusual for most physicists, I am putting a strong focus on the UI part.  In my courses, you will jump right into the subject and learn to design by actually designing.

From my former teaching experiences, I know that learning by trying is the most fun. So I will encourage you to use the tools I am showing you directly in your own projects. May they be small or grant.