This course was created with the
course builder. Create your online course today.
Start now
Create your course
with
Autoplay
Autocomplete
Previous Lesson
Complete and Continue
Advanced iOS: Create a WhatsApp Clone
1 Intro
1.1 - WhaleTalk Intro (1:27)
2 Setup
iOS-ATV - 1 - WhaleTalk Setup (2:29)
iOS-ATV - 2 - WhaleTalk Add TableView (4:30)
3 Add Data Source
iOS-ATW - 1 - WhaleTalk Add Data Source (2:26)
iOS-ATW - 2 - WhaleTalk Add Fake Data (2:44)
iOS-ATW - 3 - WhaleTalk Register Cell and Add Datasource (5:20)
4 Add Cell Model & Bubble for Message
iOS-ATX - 1 - Add Cell Model (4:34)
iOS-ATX - 2 - Configure Cell Model (8:07)
iOS-ATX - 3 - Finish Configuring the Cell (1:58)
iOS-ATX - 4 - Add Image Asset (2:32)
iOS-ATX - 5 - Edit ChatViewController to Use New Cell (2:26)
5 Incoming Messages
iOS-ATY - 1 - WhaleTalk Incoming Messages (2:36)
iOS-ATY - 2 - Add New Constraints Properties (1:49)
iOS-ATY - 3 - Function to Activate Constraints (2:12)
6 Flip Bubble & Change Color
iOS-ATZ - 1 - Change Image Color (1:49)
iOS-ATZ - 2 - Make Bubble (5:06)
iOS-ATZ - 3 - coloredImage Function (6:26)
iOS-ATZ - 4 - Run the App (1:10)
7 UITableView Customization
iOS-AUA - 1 - UITableView Stop Rows Highlighting (2:31)
iOS-AUA - 2 - UITableView Add Delegate Variable (0:44)
iOS-AUA - 3 - Distorted Bubble (1:29)
iOS-AUA - 4 - Fixing Distorted Bubble (3:01)
iOS-AUA - 5 - Constraint Bubble (4:23)
iOS-AUA - 6 - Activate Constraints (1:45)
iOS-AUA - 7 - Increase Row Height (1:18)
iOS-AUA - 8 - Remove Cell Separator (1:46)
iOS-AUA - 9 - Pad Text (1:28)
8 Add Message Area
iOS-AUB - 1 - Add Message Area Constraints (3:30)
iOS-AUB - 2 - Add Message Field (3:06)
iOS-AUB - 3 - Add Constraints to UITextView and UIButton (3:26)
9 Animating Message Area
iOS-AUC - 1 - Moving Message Area Intro (1:19)
iOS-AUC - 2 - Modifying Constraints (2:19)
iOS-AUC - 3 - Adding NSNotfication Listener (3:08)
iOS-AUC - 4 - Animate Message Area (7:38)
iOS-AUC - 5 - Run the App (1:03)
iOS-AUC - 6 - Adding UITapGestureRecognizer (2:06)
iOS-AUC - 7 - Add Method to Handle Tap (1:33)
iOS-AUC - 8 - Add New Observer (1:37)
iOS-AUC - 9 - Add Method to Handle Animation (1:34)
iOS-AUC - 10 - Adding Proper Calls Into Keyboard Methods (2:52)
iOS-AUC - 11 - Set Compression Resistance for sendButton (1:54)
10 Add New Message
iOS-AUD - 1 - Create pressedButton Method (2:21)
iOS-AUD - 2 - Add Target to UIButton (2:00)
iOS-AUD - 3 - Show New Message (2:32)
iOS-AUD - 4 - Create scrollToBottom Function (3:14)
iOS-AUD - 5 - Scroll to Bottom on Start (1:48)
iOS-AUD - 6 - Refactor pressedSend Method (1:26)
iOS-AUD - 7 - Reset UITextView on Send (1:51)
iOS-AUD - 8 - Scroll to Bottom on Keyboard Show (1:28)
11 Scroll to Bottom of Chat
iOS-AUM - 1 - Scroll to Bottom if Rows Exist (1:17)
12 Add Timestamp to Model
iOS-AUN - 1 - Add a Date to the Message Class (0:45)
iOS-AUN - 2 - Add Timestamp to our Messages (3:04)
iOS-AUN - 3 - Update Messages Array (1:39)
iOS-AUN - 4 - Create addMessage Method (5:15)
iOS-AUN - 5 - Create getMessages Method (1:36)
iOS-AUN - 6 - Update UITableViewDataSource Methods (2:15)
iOS-AUN - 7 - Update UITableView Instance (1:19)
iOS-AUN - 8 - Add viewForHeaderInSection Method (3:16)
iOS-AUN - 9 - Setup Constraints for viewForHeaderInSection (3:29)
iOS-AUN - 10 - Setup Formatter for Header (3:10)
iOS-AUN - 11 - Adding a Footer for Spacing (1:45)
iOS-AUN - 12 - Update Scrolling (3:12)
13 Core Data Message
iOS-AUO - 1 - Adding the Core Data Helper (2:00)
iOS-AUO - 2 - Setup Core Data (3:13)
iOS-AUO - 3 - Add a Model (0:53)
iOS-AUO - 4 - Create a Message NSManagedObject (2:08)
iOS-AUO - 5 - Adding an isIncoming attribute (1:58)
iOS-AUO - 6 - Updating with Message Entity (2:47)
iOS-AUO - 7 - Save and Retrieve Messages (3:26)
14 Sort Dates and Messages
iOS-AVB - 1 - Sorting our Dates and Messages (4:52)
15 Fix Sorting
iOS-AVZ - 1 - Fix Sorting for Messages (3:36)
16 Add AllChatsViewController
iOS-AWA - 1 - Add an new_chat Asset (0:33)
iOS-AWA - 2 - Create Chat Model (3:04)
iOS-AWA - 3 - Create a lastMessage Computed Attribute (4:37)
iOS-AWA - 4 - Adjust Chat and Create MessageCell (3:18)
iOS-AWA - 5 - Add Labels to the ChatCell (4:13)
iOS-AWA - 6 - Add Constraints to the ChatCell (3:55)
iOS-AWA - 7 - Add ChatCell to the ChatViewController (1:19)
iOS-AWA - 8 - Create AllChatsViewController (1:02)
iOS-AWA - 9 - Add Attributes to the AllChatsViewController (2:15)
iOS-AWA - 10 - Begin Setting up AllChatsViewController (4:08)
iOS-AWA - 11 - Add Constraints (2:00)
iOS-AWA - 12 - Setup the Context (3:14)
iOS-AWA - 13 - Create and Call the fakeData Method (1:39)
iOS-AWA - 14 - Add a ConfigureCell Helper Method (3:17)
iOS-AWA - 15 - Add the UITableViewDataSource Extension (4:11)
iOS-AWA - 16 - Add the UITableViewDelegate Extension (2:28)
iOS-AWA - 17 - Begin Setting up the NSFetchedResultsControllerDelegate Extension (3:56)
iOS-AWA - 18 - Add didChangeObject and controllerDidChangeContent Methods (4:47)
iOS-AWA - 19 - Display the AllChatsViewController (2:20)
17 Add NewChatViewController
iOS-AWB - 1 - Update the Contact Entity (1:17)
iOS-AWB - 2 - Add sortLetter Method to Contact (1:25)
iOS-AWB - 3 - Add fullName method to Contact (1:56)
iOS-AWB - 4 - Add fakeData Method (4:52)
iOS-AWB - 5 - Create NewChatViewController and Add Attributes (2:52)
iOS-AWB - 6 - Add TableView and Other Setup (5:37)
iOS-AWB - 7 - Add Context (3:42)
iOS-AWB - 8 - Add configureCell Method (1:42)
iOS-AWB - 9 - Add UITableViewDataSource Extension (4:29)
iOS-AWB - 10 - Add UITableViewDelegte Extension (1:55)
iOS-AWB - 11 - Begin Adding NSFetchedResultsController Extension (3:40)
iOS-AWB - 12 - Finish Adding the NSFetchedResultsController Delegate (4:52)
iOS-AWB - 13 - Initialize NewChatsViewController (2:09)
18 Refactor NSFetchedResultsControllerDelegate
iOS-AWC - 1 - Create TableViewFetchedResultsDelegate (3:36)
iOS-AWC - 2 - Add controllerWillChangeContent and didChangeSection Methods (2:01)
iOS-AWC - 3 - Add didChangeObject Method (2:57)
iOS-AWC - 4 - Add controllerDidChangeContent Method (0:38)
iOS-AWC - 5 - AllChatsViewController Conform to the TableViewFetchedResultsDisplayer (3:10)
iOS-AWC - 6 - NewChatViewController Conform to the TableViewFetchedResultsDisplayer (2:18)
19 Refactor TableView Constraints
iOS-AWD - 1 - Begin Refactor (3:48)
iOS-AWD - 2 - Complete Refactor (1:48)
20 Insert Chat Object
iOS-AWE - 1 - Update Chat and Contact Models (1:40)
iOS-AWE - 2 - Create add Method (2:06)
iOS-AWE - 3 - Use add Method (1:41)
21 Create New Chat
iOS-AWF - 1 - Add Chat to the ChatViewController (2:38)
iOS-AWF - 2 - Add Fixes for Local Constant (0:59)
iOS-AWF - 3 - Create ChatCreationDelegate (1:40)
IOS-AWF - 4 - Implement ChatCreationDelegate in the NewChatsViewController (1:35)
iOS-AWF - 5 - Implement ChatCreationDelegate in the AllChatsViewController (3:03)
iOS-AWF - 6 - Fix UI in the ChatViewController (4:01)
22 Create Temporary Child Context for Chats
iOS-AWG - 1 - Create Child Context (2:18)
23 Save Temporary Context
iOS-AWH - 1 - Add a NSNotification for NSManagedObjectContextObjectsDidChangeNotification (5:00)
iOS-AWH - 2 - Create checkTemporaryContext Method (2:50)
iOS-AWH - 3 - Clean up (1:50)
24 Remove Observers on ChatViewController
iOS-AWI - 1 - Remove Observer (1:13)
25 Add Message to Chat
iOS-AWJ - 1 - Add Message (0:55)
26 Add Sender to Message
iOS-AWK - 1 - Update Message and Contact Models (2:00)
iOS-AWK - 2 - Refactor the isIncoming Method (0:52)
iOS-AWK - 3 - Another Quick Refactor (0:34)
27 Populate ChatCell with Data
iOS-AWL - 1 - Displaying Data in the ChatCell (3:12)
28 Open Up Exisiting Chat
iOS-AWM - 1 - Open Chat (2:30)
iOS-AWM - 2 - Fix Chat Appearence Bug (2:25)
29 Reorganize Files
iOS-AWN - 1 - Reorganization (4:53)
30 Add New Group Button
iOS-AWO - 1 - Create pressedNewGroup and createHeader Methods (4:13)
iOS-AWO - 2 - Add Auto Layout to our Button (3:16)
iOS-AWO - 3 - Finish Setting up the TableHeader (3:55)
31 Push to NewGroupViewController
iOS-AWP - 1 - Create NewGroupViewController (1:44)
iOS-AWP - 2 - Add NewGroupViewController to the AllChatsViewController (3:12)
32 NewGroupViewController User Interface
iOS-AWQ - 1 - Begin Setting up the NewGroupViewController (4:24)
iOS-AWQ - 2 - Add Auto Layout (5:33)
iOS-AWQ - 3 - Add Corresponding Methods (0:45)
iOS-AWQ - 4 - Create updateChacterLabel and updateNextButton Methods (3:39)
iOS-AWQ - 5 - Add Extension for the UITextField (5:06)
33 Insert Chat with Name
iOS-AWR - 1 - Update Chat Model (1:14)
iOS-AWR - 2 - Insert Chat Object (1:11)
34 Push to New Group Participants ViewController
iOS-AWS - 1 - Create NewGroupParticipantsViewController (2:13)
iOS-AWS - 2 - Update next Method (2:13)
35 Setup New Participants User Interface
iOS-AWT - 1 - Add contact Asset (0:29)
iOS-AWT - 2 - Implement createSearchField Method (6:45)
iOS-AWT - 3 - Add Constraints to the createSearchField Method (2:40)
iOS-AWT - 4 - Create showCreateButton Method (1:27)
iOS-AWT - 5 - Add UIElements in viewDidLoad (3:38)
iOS-AWT - 6 - Run the Application (0:38)
36 Display Contacts
iOS-AWU - 1 - Add UITableViewDataSource to NewGroupParticipantsViewController (3:20)
iOS-AWU - 2 - NSFetchRequest in the NewGroupParticipantsViewController (2:51)
37 Search Contacts
iOS-AWV - 1 - Add endSearch Method (2:05)
iOS-AWV - 2 - Implement UITextField Delegate (7:16)
38 Select Participants
iOS-AWW - 1 - Begin Setting up the UITableViewDelegate Extension (1:53)
iOS-AWW - 2 - Finish Setting up the UITableViewDelegate Extension (4:28)
39 Open Up Group Chat
iOS-AWX - 1 - Display Group Chat (2:54)
40 Update User Interface for Group Chats
iOS-AWY - 1 - Add Check for Group Chats (0:43)
41 Import Contacts
iOS-AWZ - 1 - Create the ContactImporter Class (6:30)
iOS-AWZ - 2 - ContactImporter Class Bug (1:09)
iOS-AWZ - 3 - Update the AppDelegate (2:35)
42 Create Contact
iOS-AXA - 1 - Update Contact Model (1:33)
iOS-AXA - 2 - Add Context and Access Contact (2:19)
iOS-AXA - 3 - Update AppDelegate (2:02)
43 Add Phone Numbers
iOS-AXB - 1 - Create PhoneNumber Model (2:51)
iOS-AXB - 2 - Create formatPhoneNumber Method (2:43)
iOS-AXB - 3 - Assign the phoneNumbers attribute (4:31)
44 Make Fetch Thread Safe and Save
iOS-AXC - 1 - Add Thread Security (4:15)
45 Listen for Changes
iOS-AXD - 1 - Listen for Changes in ContactImporter (2:45)
iOS-AXD - 2 - Update AppDelegate (3:46)
46 Hack for Notification Bug
iOS-AXE - 1 - Fix Notification Bug (2:33)
47 Update Contacts
iOS-AXF - 1 - Create fetchExisting Method (6:01)
iOS-AXF - 2 - Update the Fetch (4:23)
48 Reorganize Files
iOS-AXG - 1 - Organization Time (1:07)
49 Add TabBarController
iOS-AXH - 1 - Create ContextViewController Protocol (2:24)
iOS-AXH - 2 - Add chat_icon Asset (0:26)
iOS-AXH - 3 - Create a MainContext in the AppDelegate (1:08)
iOS-AXH - 4 - Create TabBarController (4:29)
50 Hide TA Bar when Pushing to ChatViewController
iOS-AXI - 1 - Dynamically Hide the TabBar (1:35)
51 Add ContactsViewController
iOS-AXJ - 1 - Create ContactsViewController (4:03)
iOS-AXJ - 2 - Add New Image Asset (0:35)
iOS-AXJ - 3 - Update vcData Array (1:27)
52 Fix Titles in TabBar
iOS-AXK - 1 - Add Titles Information to vcData Array (2:14)
iOS-AXK - 2 - Set Title for the ContactsViewController (1:10)
53 Fetch and Display Contacts
iOS-AXL - 1 - Create TableViewFetchedResultsDisplayer Protocol (1:29)
iOS-AXL - 2 - Setup Context (4:48)
iOS-AXL - 3 - Conform to the TableViewFetchedResultsDisplayer Protocol (2:28)
iOS-AXL - 4 - Begin Setting up the UITableViewDataSource Extension (2:21)
iOS-AXL - 5 - Finish Setting up the UITableViewDataSource Extension (3:00)
54 Add Search for Contacts
iOS-AXM - 1 - Create ContactsSearchResultsController (3:47)
iOS-AXM - 2 - Add UITableViewDataSource and UITableViewDelegate Methods (3:10)
iOS-AXM - 3 - Add UISearchResultsUpdating Extension (4:08)
iOS-AXM - 4 - Add ContactsSearchResultController to the ContactsViewController (4:36)
55 iOS-AXN - Select Contact
iOS-AXN - 1 - Create ContactSelector (0:58)
iOS-AXN - 2 - Conform to the ContactSelector Protocol (1:24)
iOS-AXN - 3 - Ceate selectedContact Method (4:10)
iOS-AXN - 4 - Add UITableViewDelegate Extension (3:00)
56 Add New Contact
iOS-AXO - 1 - Create CNContact Extension (3:39)
57 Organize Files
iOS-AXP - 1 - Organization Time (1:09)
58 Sync Contacts Importer to MainContext
iOS-AXQ - 1 - Create a Syncer Class (2:18)
iOS-AXQ - 2 - Add Context Notifications (3:59)
iOS-AXQ - 3 - Update the AppDelegate (1:16)
59 Add FavoritesViewController
iOS-AXR - 1 - Create FavoriteCell (4:47)
iOS-AXR - 2 - Add Favorites Asset (0:29)
iOS-AXR - 3 - Create FavoritesViewController (3:25)
iOS-AXR - 4 - Create configureCell Method (2:18)
iOS-AXR - 5 - Begin Setting up the FavoritesViewController (1:24)
iOS-AXR - 6 - Setup a Context (2:53)
iOS-AXR - 7 - Setup UITableViewDataSource Extension (4:43)
iOS-AXR - 8 - Setup UITableViewDelegate Extension (1:54)
iOS-AXR - 9 - Update the AppDelegate (1:13)
60 Populate Favorites Cell with Data
iOS-AXS - 1 - Update Contact and phoneNumber Models (2:02)
iOS-AXS - 2 - Add Information to Favorite Cell (3:28)
61 Add Contacts to Favorites
iOS-AXT - 1 - Update Favorite Attribute (1:37)
62 Set Phone Number Kind
iOS-AXU - 1 - Set kind Attribute (1:06)
iOS-AXU - 2 - Display kind Attribute (2:28)
63 View Contact
iOS-AXV - 1 - Add accessoryButtonTappedForRowWithIndexPath Method (4:02)
64 Remove Favorites
iOS-AXW - 1 - Add setEditing Method (3:05)
iOS-AXW - 2 - Create deleteAll Method (1:18)
iOS-AXW - 3 - Add commitEditingStyle Method (1:33)
65 Open Chat from FavoritesViewController
iOS-AXX - 1 - Create exisiting Method (4:01)
iOS-AXX - 2 - Create new Method (1:50)
iOS-AXX - 3 - Display Chat (3:38)
66 Check for Existing Chat in NewChatViewController
iOS-AXY - 1 - Existing Chat Check (1:36)
67 Organize Files
iOS-AXZ - 1 - Organization Time (3:11)
68 Setup SignUpViewController
iOS-AYA - 1 - Create SignUpViewController (3:17)
iOS-AYA - 2 - Continue Setup (5:05)
iOS-AYA - 3 - Add Constraints (3:43)
iOS-AYA - 4 - Update the AppDelegate (0:53)
69 Check SignUp Inputs
iOS-AYB - 1 - Create alertForError Method (1:53)
iOS-AYB - 2 - Add Tests for the SignUpViewController (2:49)
70 Setup Remote Store Protocol for SignUp
iOS-AYC - 1 - Setup RemoteStoreProtocol (1:37)
iOS-AYC - 2 - Call RemoteStoreProtocol (1:14)
71 Setup Callbacks for SignUp
iOS-AYD - 1 - Create startSyncing Method (0:21)
iOS-AYD - 2 - Additional Setup in the SignUpViewController (2:30)
iOS-AYD - 3 - Prevent Pressing continue Multiple Times (2:29)
72 Add Remote Store to Syncer
iOS-AYE - 1 - Create store Method (0:59)
iOS-AYE - 2 - Add objectsForKey Method (2:43)
iOS-AYE - 3 - Handle backgroundContext Objects Keys (2:32)
73 Getting Ready for Firebase
iOS-AYF - 1 - Setup Firebase Context (2:24)
iOS-AYF - 2 - Fault Updated Object (2:29)
74 Install Firebase
iOS-AYG - 1 - Create a Firebase Account (1:57)
iOS-AYG - 2 - Install Firebase (3:33)
75 Check Firebase for Auth Data
iOS-AYH - 1 - Create FirebaseStore (3:12)
iOS-AYH - 2 - Add FirebaseStore to the AppDelegate (3:31)
76 Setup Firebase as Remote Store
iOS-AYI - 1 - Add RemoteStore Extension (1:09)
iOS-AYI - 2 - Add RemoteStore to the AppDelegate (4:04)
77 Add Sign Up Code
iOS-AYJ - 1 - Create currentPhoneNumber Method (1:59)
iOS-AYJ - 2 - Implement Authentication in Firebase (6:40)
iOS-AYJ - 3 - Signup in Firebase (3:20)
78 Uploading Data
iOS-AYK - 1 - Create FirebaseModel (1:09)
iOS-AYK - 2 - Add upload Method to FirebaseStore (1:50)
79 Write Contact to CoreData from Firebase
iOS-AYL - 1 - Update Contact Model (1:00)
iOS-AYL - 2 - Query Firebase Contact (3:05)
iOS-AYL - 3 - Write from Firebase Contact (1:51)
iOS-AYL - 4 - Bug Fixes (2:33)
iOS-AYL - 5 - Sync a User (4:46)
80 Save Chat
iOS-AYM - 1 - Update Chat Model (1:23)
iOS-AYM - 2 - Begin Upload Chat to Firebase (3:48)
iOS-AYM - 3 - Refactor currentPhoneNumber Method (1:30)
iOS-AYM - 4 - Finish Upload Chat to Firebase (4:12)
iOS-AYM - 5 - Save the Store (0:37)
81 Save Message
iOS-AYN - 1 - Upload Mesage to Firebase (3:37)
82 Add Observer for New Users
iOS-AYP - 1 - Create observeStatus Method (3:22)
iOS-AYP - 2 - Create fetchAppContacts Method (2:22)
iOS-AYP - 3 - Observe Statuses (3:24)
83 Add Observer for Chats
iOS-AYQ - 1 - Create getContactId Method for Contacts (3:39)
iOS-AYQ - 2 - Create existing Method for Contacts (4:02)
iOS-AYQ - 3 - Create new Method for Contacts (2:49)
iOS-AYQ - 4 - Create existing Method for Chats (3:00)
iOS-AYQ - 5 - Begin Creating new Method for Chats (4:26)
iOS-AYQ - 6 - Finish Creating new Method for Chats (3:20)
iOS-AYQ - 7 - Create observeChats Method (2:58)
iOS-AYQ - 8 - Add an Additional Call to observeStatus and Testing (3:55)
84 Reorganize Files
iOS-AYR - 1 - Create Chat+Firebase File (1:38)
iOS-AYR - 2 - Create Contact+Firebase File (1:06)
iOS-AYR - 3 - Create Message+Firebase File (0:51)
iOS-AYR - 4 - Create FirebaseModel File (0:50)
iOS-AYR - 5 - Reorganize Files (1:08)
85 Observe New Messages for New Chats
iOS-AYU - 1 - Begin Creating observeMessages Method (5:28)
iOS-AYU - 2 - Finish Creating observeMessages Method (2:23)
iOS-AYU - 3 - Updates to the FirebaseStore (1:17)
iOS-AYU - 4 - Call observeMessages and Testing (2:09)
86 Add Assets
iOS-AYW - 1 - Add Assets (3:57)
87 Only Show Users in Firebase
iOS-AYV - 1 - Add Predicate to the NewChatViewController (1:21)
iOS-AYV - 2 - Add Predicate to the NewGroupParticipantsViewController (1:24)
iOS-AWA - 16 - Add the UITableViewDelegate Extension
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock