Pulseis a iOS application (iOS 16.6+) designed to provide real-time cryptocurrency market data. It is built entirely with UIKit using a programmatic approach (no Storyboards or XIBs) and follows the VIPER design pattern for maximum scalability and testability using XCTest. The app integrates Binance REST APIs and Binance WebSockets to support real-time data streaming.
The project is organized into logical layers to promote reusability and maintainability:
Shared resources and utilities:
- Extensions: Robust logic for
Decimal,Int, andStringto handle currency formatting and number abbreviation. - Token: Centralized design system for colors and UI constants.
- Models: Shared data models used across the app.
A decoupled networking layer to isolate API logic from the UI:
- Core: Contains the
APIClient, request logging, and generic error handling. - Services: Specific implementations for Market data, handling Binance-specific endpoints and responses.
- WebSocket: Dedicated layer for real-time connection lifecycles, ensuring that live feeds are managed independently of the View state.
Feature-based modules following the VIPER pattern, each encapsulating its own:
- Contract: Defines the interfaces for View, Interactor, Presenter, and Router.
- View: Programmatic UI components and layout.
- Interactor: Business logic and data manipulation.
- Presenter: Prepares data for display and handles user interactions.
- Entity: Data models specific to the feature.
- Router: Manages navigation and screen transitions.
