A modern iOS application for browsing and exploring car information with user authentication, search functionality, and favorites management.
- Car Browsing: Browse through a collection of cars with detailed information
- Search: Search cars by various criteria and filters
- User Authentication: Secure login and registration system
- Favorites: Save and manage favorite cars
- User Profile: Manage user profile and preferences
- Offline Support: Core Data integration for offline functionality
- Responsive Design: Adaptive UI for different screen sizes
This project follows the MVVM (Model-View-ViewModel) architecture pattern with clean separation of concerns:
- Core: Contains core functionality including data models, services, and utilities
- Features: Feature-specific modules (Authentication, CarBrowsing, Search, UserProfile)
- Shared: Reusable components, models, and UI elements shared across features
Car Explorer/
├── Core/ # Core functionality
│ ├── Data/ # Data management and Core Data
│ ├── Services/ # API services and network management
│ ├── Utils/ # Utility classes and helpers
│ └── Extensions/ # Swift extensions
├── Features/ # Feature modules
│ ├── Authentication/ # Login/Register functionality
│ ├── CarBrowsing/ # Main car browsing feature
│ ├── Search/ # Search functionality
│ └── UserProfile/ # User profile management
├── Shared/ # Shared components
│ ├── Models/ # Shared data models
│ ├── UI/ # Reusable UI components
│ └── ViewModels/ # Shared view model logic
└── Tests/ # Unit and UI tests
- Language: Swift 5.0+
- UI Framework: SwiftUI
- Data Persistence: Core Data
- Networking: URLSession with custom network layer
- Architecture: MVVM
- Testing: XCTest, XCUITest
- Dependency Management: Swift Package Manager
- Xcode 12.0 or later
- iOS 14.0 or later
- Swift 5.0+
-
Clone the repository:
git clone <repository-url> cd Car-Explorer
-
Open the project in Xcode:
open Car_Exprorer.xcodeproj
-
Set up Core Data model:
- The Core Data model is already configured in
CarExplorer.xcdatamodeld - Models include: Car, User, Favorite entities
- The Core Data model is already configured in
-
Build and run the project:
- Select your target device or simulator
- Press
Cmd + Ror click the run button
The project uses Core Data for local data persistence. The setup includes:
- Car Entity: Stores car information locally
- User Entity: Manages user data
- Favorite Entity: Handles user's favorite cars
To regenerate Core Data models if needed, refer to CoreData_Setup_Instructions.txt.
The app integrates with car API services through:
- CarAPIService: Handles car data fetching
- AuthService: Manages authentication
- NetworkManager: Centralized network request handling
The project includes comprehensive tests:
- Unit Tests: View model and service logic testing
- UI Tests: User interface interaction testing
Run tests using:
Cmd + U (Run all tests)- CarBrowsingViewModel: Manages car browsing logic
- SearchViewModel: Handles search functionality
- UserProfileViewModel: Manages user profile data
- FavoritesViewModel: Handles favorite cars management
- NetworkManager: Centralized HTTP request handling
- CoreDataManager: Data persistence management
- AuthService: Authentication and user management
- KeychainManager: Secure credential storage
- CarCard: Displays car information in card format
- PrimaryButton: Reusable button component
- ErrorView: Handles error states
- Follow MVVM architecture patterns
- Keep view models lightweight and focused
- Use dependency injection for testability
- Implement proper error handling
- Use PascalCase for types (classes, structs, enums)
- Use camelCase for properties and methods
- Use UPPER_SNAKE_CASE for constants
- Prefix private properties with underscore
- Use conventional commit messages
- Keep commits focused and atomic
- Write meaningful commit descriptions
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
For support and questions, please open an issue in the repository or contact the development team.
Version: 1.0.0 Last Updated: October 2025