UNEXP is an iOS application designed for Monash University students to browse, search, and explore university units (courses). The app provides detailed information about units including assessments, prerequisites, learning outcomes, and more.
- Browse by Faculty: Navigate through different faculties to discover units
- Search Units: Quick search functionality to find specific units
- Unit Details: Comprehensive unit information including:
- Unit code, title, and synopsis
- Credit points and unit level
- Assessments with weights
- Learning outcomes
- Prerequisites and requisites
- Semester offerings and locations
- Direct links to official unit handbooks
- Save Units: Bookmark your favorite units for quick access
- Cloud Sync: Bookmarks are synced across devices using Firebase
- Offline Access: Bookmarks are stored locally using Core Data
- Google Sign-In: Secure authentication using Google accounts
- Guest Mode: Browse units without creating an account
- User Profiles: Manage your profile and preferences
- Modern UI: Clean and intuitive interface
- Personalized Welcome: Customized greeting based on user profile
- Smooth Navigation: Tab-based navigation with gesture support
- Responsive Design: Optimized for both iPhone and iPad
- Language: Swift 5.0
- Framework: UIKit with Storyboards
- Minimum iOS Version: iOS 18.6
- Deployment Target: iPhone and iPad
- Firebase: Authentication and Firestore database
- Firebase Auth
- Firebase Firestore
- Google Sign-In
- Core Data: Local data persistence for bookmarks
- User Notifications: Push notification support
UNEXP/
βββ ViewController/ # View controllers for each screen
β βββ HomeViewController.swift
β βββ LoginViewController.swift
β βββ SignUpViewController.swift
β βββ ProfileViewController.swift
β βββ facultyTableViewController.swift
β βββ UnitSearchTableViewController.swift
β βββ UnitDetailViewController.swift
β βββ BookmarkTableViewController.swift
β βββ ...
βββ Cell/ # Custom table view cells
β βββ FacultyTableViewCell.swift
β βββ UnitTableViewCell.swift
β βββ BookmarkTableViewCell.swift
βββ Database/ # Database and data management
β βββ FirebaseController.swift
β βββ BookmarkDataManager.swift
β βββ BookmarkStore.swift
β βββ DatabaseProtocol.swift
βββ DataModel/ # Data models and Core Data
β βββ UnitModels.swift
β βββ UnitBookmark+CoreDataClass.swift
β βββ CoreData.xcdatamodeld/
βββ Utilities/ # Helper utilities
β βββ ImageLoader.swift
βββ Assets.xcassets/ # App icons and images
- Xcode 15.0 or later
- iOS 18.6 SDK or later
- CocoaPods or Swift Package Manager (for Firebase dependencies)
- Firebase project with Authentication and Firestore enabled
- Google Sign-In configuration
-
Clone the repository
git clone https://github.com/arsh-bansal/UNEXP.git cd UNEXP/unexp -
Install Dependencies
- If using CocoaPods:
pod install
- Open
UNEXP.xcworkspace(not.xcodeproj)
- If using CocoaPods:
-
Configure Firebase
- Add your
GoogleService-Info.plistto the project - Ensure Firebase is properly configured in your Firebase Console
- Enable Authentication (Email/Password and Google Sign-In)
- Set up Firestore database
- Add your
-
Configure Google Sign-In
- Update the
GIDClientIDinInfo.plistwith your Google Sign-In client ID - Configure URL schemes in
Info.plist
- Update the
-
Build and Run
- Select your target device or simulator
- Build and run the project (βR)
The app connects to a backend API hosted on Railway:
- Base URL:
https://web-production-06b27.up.railway.app/units/ - The API provides unit information including details, assessments, prerequisites, and offerings
The app uses Core Data to store bookmarked units locally:
- Entity:
UnitBookmark - Stores unit code, title, and other relevant information
- Syncs with Firebase Firestore for cloud backup
-
Firebase Authentication
- Email/Password authentication
- Google Sign-In provider
-
Cloud Firestore
- Stores user bookmarks
- Collection structure:
users/{userId}/bookmarks/{bookmarkId}
Ensure your Firestore security rules allow authenticated users to read/write their own bookmarks:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/bookmarks/{bookmarkId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}- Real-time search functionality
- Filters units by code, title, or keywords
- Displays search results with unit codes and titles
- Overview Tab: Unit synopsis, credit points, and general information
- Prerequisites Tab: Required units and prerequisites
- Assessments Tab: Assessment breakdown with weights
- Handbook Link: Direct link to official Monash unit handbook
- Add/remove bookmarks from unit detail screens
- View all bookmarks in a dedicated tab
- Automatic sync with Firebase when signed in
- Offline access to bookmarked units
Contributions are welcome! Please feel free to submit a Pull Request.
This project is created for educational purposes as part of Monash University coursework.
Arsh Bansal
- Email: arshb6564@gmail.com
- GitHub: @arsh-bansal
- Monash University for unit data and resources
- Firebase for backend services
- Railway for API hosting
Note: This app is designed specifically for Monash University students and requires access to the Monash unit database API.