
Create a new Swift project in Xcode and organize MVVM folders, then set up a root tab bar controller programmatically and configure the scene delegate for launch.
Programmatically build and configure a tab bar interface by creating feed, explore, notifications, and conversations controllers, assigning tab bar images, and preparing navigation flow with embedded navigation controllers.
Finalize navigation bar UI across view controllers, set tab bar icons, and use the Twitter logo as the navigation title view with configure UI helper for messages, notifications, and explore.
Download the Extensions.swift file to gain easy access to the functions you need for Auto Layout. Full completed source code available at stephancodes.com/shop
Use programmatic autolayout with the anchor helper and a UIColor extension for Twitter blue, then add a button action handler with a selector and console output.
Create input container views for email and password using a vertical stack with height constraints. Use a reusable helper to assemble image views, text fields, and separators for login UI.
Learn to set up Firebase for the Twitter iOS clone, including adding Google service info plist, configuring CocoaPods, and enabling authentication, real-time database, and storage.
Enable email and password authentication in Firebase, then implement user registration by collecting input, invoking Firebase auth create user, and handling success or error in the completion flow.
Register users with Firebase and upload their data, including full name, username, and a profile image, by updating the real time database under the user's uid.
Refactor your code using a constants file to upload a user profile image to Firebase storage with a unique file name, and save the image URL in the user database.
Install SDWebImage via CocoaPods, add a 32x32 profile image to left bar button item, fetch user with a completion block, and pass the user to the feed controller to load the image.
Load the user’s profile image into the left navigation bar button by safely unwrapping the user and converting the profile image URL to a URL for sd web image loading.
Configure the upload tweet UI by programmatically creating a profile image view anchored to the safe area and loading the user’s profile image URL via a custom initializer with caching.
Implement a custom caption text view with a placeholder label in the upload tweet controller, using a stack view with the profile image and toggling placeholder visibility on text changes.
Upload a tweet to Firebase by sending a caption, user ID, timestamp, and initial likes and retweets, then store it under tweets with an auto-generated ID and handle completion.
Create a tweet model with caption, tweet ID, uid, likes, timestamp, and retweet count, fetch tweets from Firebase, and prepare to display them in a collection view feed.
Learn how to fetch the user for each tweet, update the tweet model, and populate the profile image and username in the UI using MVVM.
Learn how a tweet view model offloads UI computations, like formatting an attributed user string and timestamps, from the tweet cell to the view model for cleaner code.
Tap profile image in a tweet cell using a gesture recognizer and delegate protocol to navigate to the profile controller from the feed controller, with a weak delegate.
Configure the profile collection view to display a user’s tweets with reusable cells and a header, register the tweet cell and header, and hide the navigation bar for clean UI.
Build a profile header UI for the Twitter iOS clone. Create a blue container with a back button, bordered profile image, and edit/follow button; stack full name, username, and bio.
Populate the profile header with the user's data via a view model, including followers and following labels, an attributed text, and an action button that reflects the current user.
Implement a profile header delegate with a weak delegate to forward back button dismissal to the profile controller, then pop the view controller and reset the feed navigation bar.
Master fan-out data modeling in Firebase to create a user-tweets structure mapping user IDs to tweet IDs, enabling efficient retrieval of a user's tweets and post-upload updates.
Implement a navigation bar search using UI search controller to filter users in real time by username, optionally by full name, update the table view, and open the profile.
Learn to implement following and unfollowing in a Twitter iOS clone using Firebase. Update user followers and following structures, handle UI feedback, and persist relationships in the database.
Check if a user is followed by querying the database via an api call, persist the follow state, and update the profile header UI accordingly.
Fixes a bug in the profile controller by adding a current user check to prevent self-following, using an early return to keep the code clean.
Fetch and display accurate follower and following counts by querying the Firebase database, creating a user relation stats struct, and updating the profile header in the MVVM Swift app.
Build a tweet header user interface by combining profile image view, full name label, and username label, caption label and date, plus a stats view with likes and retweets.
Learn to implement replies in a Twitter clone by using an enum to configure an upload tweet controller for tweets and replies, and fetch replies by tweet ID.
Use the view model to populate UI elements, configure a vertical stack with a reply label and caption, and show or hide the reply text based on the data.
Fetch replies for a tweet using the tweet service, accumulate them as an array of tweets, and present them in the collection view.
Set up a table view for the action sheet launcher in the Twitter iOS clone, configuring appearance, delegate, data source, and a registered cell, then present it using a window.
Animate the presentation of a table view with a dimmed black overlay by adding a full-screen black view, configuring alpha transitions, and dismissing on tap.
Define an action sheet data model and view model that tailor options per user, including follow/unfollow, report tweet, and delete tweet for the current user, with dynamic labels.
Finish the action sheet handler with an enum and switch to manage follow, unfollow, report, and delete tweet actions. Demonstrates wiring user service calls and debug prints for scalable solution.
What are we building?
In this course, you will learn how to build a complete version of Twitter 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.
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.
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 social network, from complete scratch. 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, and everything will be explained in detail along the way. This will teach you to build production ready applications, that are easily scalable and maintainable. 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.
What will you learn?
Comprehensive knowledge and understanding of Swift 5 & Xcode 11
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 build a fully functioning social network
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