Skip to content

A modern iOS application for browsing and exploring car information with user authentication, search functionality, and favorites management.

Notifications You must be signed in to change notification settings

simonescob/Car-Exprorer

Repository files navigation

Car Explorer

A modern iOS application for browsing and exploring car information with user authentication, search functionality, and favorites management.

Features

  • 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

Architecture

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

Project Structure

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

Technology Stack

  • 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

Setup Instructions

Prerequisites

  • Xcode 12.0 or later
  • iOS 14.0 or later
  • Swift 5.0+

Installation

  1. Clone the repository:

    git clone <repository-url>
    cd Car-Explorer
  2. Open the project in Xcode:

    open Car_Exprorer.xcodeproj
  3. Set up Core Data model:

    • The Core Data model is already configured in CarExplorer.xcdatamodeld
    • Models include: Car, User, Favorite entities
  4. Build and run the project:

    • Select your target device or simulator
    • Press Cmd + R or click the run button

Core Data Setup

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.

API Integration

The app integrates with car API services through:

  • CarAPIService: Handles car data fetching
  • AuthService: Manages authentication
  • NetworkManager: Centralized network request handling

Testing

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)

Key Components

ViewModels

  • CarBrowsingViewModel: Manages car browsing logic
  • SearchViewModel: Handles search functionality
  • UserProfileViewModel: Manages user profile data
  • FavoritesViewModel: Handles favorite cars management

Services

  • NetworkManager: Centralized HTTP request handling
  • CoreDataManager: Data persistence management
  • AuthService: Authentication and user management
  • KeychainManager: Secure credential storage

UI Components

  • CarCard: Displays car information in card format
  • PrimaryButton: Reusable button component
  • ErrorView: Handles error states

Development Guidelines

Code Organization

  • Follow MVVM architecture patterns
  • Keep view models lightweight and focused
  • Use dependency injection for testability
  • Implement proper error handling

Naming Conventions

  • Use PascalCase for types (classes, structs, enums)
  • Use camelCase for properties and methods
  • Use UPPER_SNAKE_CASE for constants
  • Prefix private properties with underscore

Commit Guidelines

  • Use conventional commit messages
  • Keep commits focused and atomic
  • Write meaningful commit descriptions

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

For support and questions, please open an issue in the repository or contact the development team.


Version: 1.0.0 Last Updated: October 2025

About

A modern iOS application for browsing and exploring car information with user authentication, search functionality, and favorites management.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages