WhoFollows is a project based on the "iOS Dev Job Interview Practice - Take Home Project" course by renowned iOS developer Sean Allen. The app utilizes GitHub's REST API to allow users to search for GitHub profiles, view user details, browse followers/following lists, and manage favorites. Additionally, the app offers a seamless, modern, and user-friendly interface, ensuring an intuitive experience.
The primary goal of this project was to build a take-home style project using the UIKit framework while deepening knowledge of UIKit development principles.
The app follows a modern approach to building and designing iOS applications. It is structured around the MVC (Model-View-Controller) architecture and leverages key UIKit components to create the User Interface.
- Foundation: Provides essential data types and collection handling.
- UIKit (Programmatic): The primary UI framework for building the app's user interface.
- SafariServices: Enables in-app browsing with Safari View Controller.
- CoreData: Manages persistent storage for user favorites.
- XCTest: Implements unit and testing to ensure app's logic stability.
- (No external packages used in this project.)
- Fetching followers and user information from GitHub's API.
- Displaying user details.
- Searching for GitHub users by username.
- Implementing pagination for data loading.
- Caching temporary images for performance optimization.
- Supporting light and dark mode.
- Integrating Safari View Controller for seamless web browsing.
- Using
Codablefor JSON parsing.
- Fetching the "Following" list alongside followers.
- Dynamic search button adjustments based on user input.
- Improved empty state handling with dismissible views.
- Sharing user profile links via
UIActivityViewController. - Header and footer handling in
UserInfoVC. UserInfoVCstructured as aUICollectionViewfor flexibility.- CoreData-based persistence for user favorites.
- UI elements dynamically scaling across different screen sizes.
- Disk-based image caching in
.cachesDirectory. - Rounded avatars implemented using
layoutIfNeededmethod. - Custom
UIStackViewswith useful layout extensions. WFAlertVCnow includes a delegate for improved dismissal handling.
- Xcode features and development shortcuts.
- Code refactoring for maintainability.
- MVC architecture for app structure.
- Delegation pattern for component communication.
- Memory management with
weakreferences. - UIKit fundamentals:
UIView,UIViewController,UITableView,UICollectionViewUINavigationController,UITabBarController,UISearchControllerUISafariViewController,DiffableDataSource,NSCache,UserDefaults
- Networking with
URLSession, completion handlers, and async/await.
- Managing Xcode schemes, build phases, and test plans.
- Implementing access control best practices.
- Creating conditional protocol default implementations (
DataLoadingView). - Using
FileManager.defaultand.cachesDirectoryfor local file storage. UIActivityViewControllerfor sharing functionality.- Mastering content hugging & resistance priority for better layouts.
- CoreData fundamentals and efficient data persistence strategies.
- XCTest fundamentals for test-driven development.
- LLDB debugging techniques for runtime issue resolution.
- Functional programming (
map,forEach,reduce, etc.). - Improved optional handling and error management.
- Adapting to Swift Concurrency: Migrated code to leverage async/await for improved readability and performance.
- Responsive UI on Small Screens: Ensured dynamic scaling for devices like iPhone SE and mini models.
- Optimized API Calls: Reduced unnecessary network requests using
NSCacheand.cachesDirectory. - Improved Data Persistence: Transitioned from UserDefaults to CoreData for better scalability.
- Enhanced Empty State Handling: Designed a more flexible and dismissible empty state UI.
Follow these steps to build and run the app from source:
Clone the repository to your local machine:
git clone https://github.com/killlilwinters/WhoFollowsNavigate to the project directory and open the .xcodeproj file in Xcode.
Ensure that your development team is selected in Xcode under Signing & Capabilities. You may need an Apple Developer account.
Connect your device, select it in Xcode, and click Run to build and launch the app.
Note: If you encounter provisioning issues, follow the on-screen prompts in Xcode.
Video showcase can be found HERE.


