
Explore how to build a real-time to-do list app like Google Tasks using Firebase and Swift 5, with authentication, CRUD operations, and real-time data syncing.
Pods to install
pod 'MBProgressHUD'
pod 'Firebase/Firestore'
pod 'FirebaseFirestoreSwift'
pod 'Firebase/Auth'
pod 'Loaf'
pod 'FSCalendar'
Add container views to the to-do list interface, embed two table view controllers for ongoing and done tasks, and configure auto layout constraints to fill the screen.
toggle container views on and off using a segmented control, connect an IBAction for value changed, and switch between ongoing and done by showing the appropriate container views.
Add an action button that presents a modal view controller for creating a new task in a Swift 5 iOS app, including button styling, constraints, and an IBAction workflow.
Add components to the new task view controller by placing a bottom container, vertical and horizontal stack views, a button, and a text view for new task input with constraints.
Add a spring-based bounce animation to the to-do list app’s container view as content appears in SwiftUI. Test in the simulator and avoid retain cycles by using self in closures.
Add a calendar button to the to-do app by placing a calendar icon in a horizontal stack with the save button, using a spacer and content hugging priority for alignment.
Set up a firebase console project, integrate firebase into your app, download the google-service-info.plist, and enable email/password authentication and the firestar database in asia east 2.
Add a test task to the Firebase Firestore database to verify integration, using a task with id and createdAt saved to the task collection via a database manager in Swift.
Refactor the to do list flow to dismiss on save and delegate database access from the new task view to the task view controller using a TaskVCDelegate.
Create a custom ongoing task table view cell with a horizontal stack view, a button and image, plus a vertical stack with two labels; implement the OngoingTaskTableViewCell class and outlets.
Add a snapshot listener to the tasks collection in Firebase Firestore to automatically fetch and decode new documents, updating the table view in real time.
Populate a table view with tasks from the database using a tasks array and a task listener to refresh the UI, and configure cells to display task details.
Wire the action button tap in the ongoing task cell to the parent controller using a closure, updating the task state and timestamp observed in firebase.
Add is_done and done_at to track task completion, update status on tapping the action button, and implement a database manager to mark tasks as done in a firebase-powered swift5 app.
Implement update task functionality by handling decoding issues, using a do-catch flow and state, and updating the database document to set isDone and doneAt.
Learn to filter the tasks snapshot listener to display only done tasks, introduce an isDone parameter, and sort by creation time so the latest tasks appear at the top.
Refactor the toast display to show error messages in toasts for failure states, and make the toast function accept a state with top origin and 2.0s duration, using weak self.
Move tasks from done back to ongoing by updating Firebase data, including isDone and doneAt properties, and implement a status update function in the database manager.
Perform a code cleanup by removing print statements, replacing them with localized error messages, and correcting status updates and the database manager comment.
Show an action sheet to delete a task when tapping a list item, and use a protocol and delegate to communicate the deletion back to the task view controller.
Implement a custom calendar view for the to-do list app by wrapping the FSC Calenda library in a UIKit Calenda view, arranged with a stack view and Auto Layout.
Add a calendar date selection by implementing a title label and a remove button in the calendar view, wiring tap events and delegates to capture dates.
Show a selected deadline on a label by wiring a calendar view to its parent with a protocol delegate, handle date selection, and format the date for display.
Remove the deadline by dismissing the calendar view when a date is selected, clearing the deadline label, and returning focus to the task text input.
Learn to toggle the remove button in the calendar view by conditionally adding or removing it in the stack view, based on whether a date is selected.
Open the new task view controller again when editing a task, reusing its creation flow and presenting it fullscreen modally with the selected task.
Pass a task to edit from the list to NewTaskViewController via a segue, configure the destination, and populate fields for editing with an update button.
Create an onboarding screen by adding a new view controller with a vertical stack, an image, two labels, and a get started button.
Refine the login flow by building an onboarding view controller, presenting the login modal from the get started action, and using a delegate to dismiss and reveal the main app.
Implement a singleton navigation manager to transit from onboarding to the task view controller by changing the route view controller, using storyboard IDs and a custom transition.
Learn to implement firebase email/password authentication in a to-do app, wiring a login button to an auth manager, navigate to main screen on success, and show error toast on failure.
Use the MBProgressHUD library to show a loading animation during login, provide a visual cue, handle Firebase response, and transition to the main app.
Add a menu button that opens an action sheet with options, including lock out, and prepare a Firebase-based lock out that returns the user to the onboarding screen.
Implement logout by calling Firebase sign out within a do-catch, returning a completion result, and navigate to onboarding on success while displaying errors on failure.
Initialize a loading view controller as the app's entry point to check the Firebase user's locked-in status and redirect to either the task view controller or the onboarding screen.
Learn to show tasks belonging to a user by adding a user id to each task and querying Firebase with authentication for private task visibility.
Update the login ui by adding email and password fields with placeholders. Use secure text entry and an email keyboard, rename buttons to login and sign up, and wire outlets.
Add a reactive login flow with an error label between the password field and login button, validating email and password. Use combine to update the UI based on login outcomes.
Enhance the login screen by adding a logo, arranging fields with stack views and dividers, and ensuring the email field is focused with the keyboard shown when the screen appears.
Import and apply new app icons from the assets folder, replace the default icon in Xcode, and update the display name in project settings before running on the simulator.
Welcome to the Build To Do List App like Google Task with Firebase & Swift 5 course.
In this course, we will build a Google Task clone app from start to end. In this course you will learn to:
Implement the fundamentals of CRUD - Create, Read, Update, Destroy
Store data using Firebase Firestore (with FirestoreSwift SDK)
Learn FirestoreSwift new Decodable and property wrappers like @DocumentID and @ServerTimeStamp
Reactive programming using Combine framework with UIKit
Add real time listeners to database
Authentication - sign up a new user / log in / log out
Protocol extensions
Protocol & delegate patterns & closures
UI Animations
Weak & unowned self for avoiding retain cycles / memory leaks
Coding views programatically with UIKit
This course is designed for iOS developers with at least 6-9 months experience and is not a beginners' course.
These are some comments from my students:
Excellent Content, I appreciate the different styles of onboarding screens and all the great explanation! - Carey M
The course is very concise but informative . I really like the project based approach that this course takes. It cuts straight to the chases and show you how these abstract concepts are put into real life problems . Highly recommended - AN Dinh
Really easy to follow and great for beginners. Really enjoyed the course, thanks Kelvin! - Atiqah A.K
Perfect course to help me get started on ios programming! - Tan Kel Vin
The instructor is knowledgeable and clear with his instructions. The course is great and informative for those who are planning to build a skeleton they can build on their own app projects Instructor is also helpful. - Raphael Lim