
Set up a new iOS project, organize folders, and build the home screen with a conversations controller in a navigation controller, featuring a profile button and large titles.
Configure the home screen navigation bar by creating and applying a ui navigation bar appearance for large titles, then set the background to system purple and white status bar.
Set up a programmatic table view in the conversations controller and register a reusable cell. Connect data source and delegate via extensions, implement cell rendering and row selection.
Create login and sign-up interfaces programmatically with a purple-pink gradient, using two view controllers and a navigation controller; implement a reusable auto layout extension to simplify constraints.
Implement a login screen UI using extension functions to simplify constraints, center the icon, anchor to the safe area, and stack email and password containers with a styled login button.
Build the login screen UI with an image icon and email and password fields in a container view, anchored with auto layout and plan a refactor to an input container.
Refactor your login UI by introducing an input container view and a custom text field to reduce repeated code, enabling reusable, clean, and scalable email and password fields.
Finish the login screen UI by styling the login button with a color literal and white text, and enable navigation to the sign-up screen.
configure a gradient layer in the registration controller, reuse login user interface components, and add a plus photo button with an image picker for a profile photo.
Implement login form validation with a view model; enable the login button only when both email and password have text, using form is valid computed property and text field observers.
Learn to implement sign up form validation and profile photo selection using an image picker, delegate methods, and MVVM patterns to ensure a responsive user interface and data binding.
Set up Firebase for the chat app by enabling email/password authentication and using Firestore for data storage. Integrate the Google service plist, install CocoaPods, and configure Firebase in AppDelegate.
Learn to register a user with Firebase: authenticate, upload the profile image to storage to obtain its URL, then save the user data in Firestore under the user document.
Configure the home controller to auto direct logged-in users to the conversations screen and show login/registration for logged-out users, using Firebase authentication and a full-screen login presentation.
Implement email and password sign-in with Firebase in the login controller, handle errors, and dismiss to the main screen on success, creating a reusable login template for chat apps.
Learn to refactor authentication and registration logic into a dedicated API service, create a shared auth service, and use completion blocks and a credentials struct to keep controllers lean.
Refactor authentication and implement a single progress hud to show loading during login and signup, with precise error handling and loader management.
Fetch users from the database, load them into the app, and open a new message controller to search and start sending messages to selected users.
Configure the new message controller's navigation bar and table view, extract the navigation bar setup into an extension, set the title and prefers large titles, and add a cancel button.
Build a custom user cell UI with a profile image and two labels in a vertical stack, anchored for the chat list, and fetch and populate users from the database.
Create a user data model, fetch user data from Firestore, and build custom user objects to populate the app’s UI with full names, emails, and profile images.
Construct custom user objects from database data with a dictionary-based initializer that maps user name and full name, then fetch via a completion handler and populate the table view.
Populate table view cells by mapping the fetched users array to rows, displaying each user's profile image and user name, and loading images from URLs with caching.
Set up a chat controller as a collection view. Use a protocol delegate to start a chat with a user by dismissing a new message controller and presenting chat controller.
Configure the chat controller to show the selected user's name in the navigation bar and implement a custom input accessory view with a text view and send button for messaging.
Learn how to build in-app chat UI by configuring collection view cells for messages, including a bubble container, profile image, and dynamic sizing with constraints for a responsive chat interface.
Build a chat UI by modeling a message, wiring the send button via a custom input accessory view, and using a message view model to manage bubble color and alignment.
Finish the message view model by adding left and right bubble anchors and current-user logic, and toggle profile image visibility before wiring the API for real chat storage.
Design and initialize a message model, then upload messages to Firestore, handling from and to user IDs, timestamps, and a user object to power an MVVM chat interface.
Fetch messages from Firestore in real time for a specific user, using a query ordered by timestamp and an addSnapshotListener to populate a chat controller with parsed message data.
Learn dynamic cell sizing for chat messages in a collection view by using an estimated size cell, bottom bubble anchors, and system layout size fitting, with scrolling to newest messages.
Fetch the most recent messages for the current user from the recent messages structures, then upload new messages to Firestore and fetch conversations in real time with a conversation model.
Populate a table view with conversations by uploading recent messages, fetching each user in real time, and using a view model to format timestamps and profile image URLs.
Learn to build a user profile UI in iOS by creating a profile controller and header, configuring a table view, gradient background, and a logout/dismiss flow to display user details.
Implement a profile header delegate to dismiss the header, fetch the current user from the database, and populate the header with the user's name, username, and profile image.
Create a profile view model to drive a two-cell table view for account info and settings using an enum for descriptions and icons.
Learn to set up a logout button in the profile footer and drive a static table view with a profile view model enum, enabling easy cell additions.
Implement action handlers for profile options using an enum driven did select approach, routing to account info and settings pages, with a logout flow via delegates and alerts.
Implement a search controller to filter users by username or full name, update results in real time, and start a chat from the search results.
Fix bugs in the chat app by filtering out the current user from the user list, ensuring messages fetch on login, and implementing a chat partner id for correct conversations.
fixes a duplicate messages bug in a Firestore chat app by using a dictionary keyed by chat partner id to ensure unique conversations from the snapshot listener.
Add loading indicators for conversations, messages, and profile API calls. Display login and signup errors, like badly formatted emails or passwords that must be six characters long.
What are we building?
In this course, you will learn how to build a real time chat application using Firestore and Swift, ready to be published on the App Store. Throughout the process, you will develop high level programming, app design and app development skills. We will be building this without the use of storyboards, fully programmatically.
Why take this course?
Learning advanced development skills should be taught using real world examples. This course will teach you how to build a fully functional messaging app, that's completely ready to integrate into any one of your iOS Applications. You will be learning advanced front and backend development skills, from a real life professional developer. You will learn how to code like a pro, writing clean, scalable and maintainable code. This also makes for a great project to add to your portfolio, which you can use to show off to potential employers if you're trying to become a pro.
Prior Experience?
Some programming and basic Xcode experience is preferred. The course will move a little fast if you're a complete beginner, but you will pick things up along the way.
What will you learn?
How to build a fully functioning messaging interface
Comprehensive knowledge and understanding of Swift 5 & Xcode 11
How to Implement Model View ViewModel (MVVM) architecture
Advanced level programming and app development skills
Advanced level User Interface Design
Advanced level back end engineering
How to authenticate and register users with Firebase
How to communicate with a database (read/write)
How to monitor events in a database
How to upload images to Firebase
How to structure data for optimum performance
How to programmatically construct views and controllers
How to parse incoming JSON data from database
How to use CocoaTouch classes, UIKit, UserNotifications and more
How to use CocoaPods and custom third party APIs
How to implement/use protocols
How to implement custom subclasses for clean and reusable code
How to dynamically size collection view cells
How to create extensions and functions for clean and reusable code