The app features a dynamic, data-driven home page and a robust search experience with local history persistence.
| Requirement | Status | Implementation Details |
|---|---|---|
| Data Source (JSON API) | β | Fetched via NetworkService using Async/Await. |
| Dynamic Home Sections | β | Ordered based on JSON sections array. |
| Category Section | β | Horizontal scrolling with long title handling. |
| Banner Section | β | Dynamic height based on image ratio. |
| Shop Section | β | 4-column grid layout. |
| FixedBanner Section | β | Smart layout (1, 2, 3, or 4 items) using FixedBannerCollectionViewCell. |
| FAQ (Accordion) | β | Implemented at bottom with single-open logic. |
| Search Functionality | β | Debounced (0.3s) filtering (min 3 chars) by title and tags. |
| Search History | β | Persistent storage using SwiftData. |
| RTL Support | β | Configured for Persian (Lari) with RTL layout. |
- Compositional Layout: Advanced UI layout for complex sections on the Home page.
- SwiftUI Integration: The Search feature is built using SwiftUI, integrated into the UIKit project.
- Generic Network Layer: Protocol-oriented networking with full Swift Concurrency support.
- Reactive UI: State management powered by Combine.
- Language: Swift 6
- UI Frameworks: UIKit (Compositional Layout) & SwiftUI
- Persistence: SwiftData
- Networking: URLSession with Async/Await
- Image Loading: Kingfisher
- Unit Testing: XCTest
Core/: Network and Database management.Features/Home/: Home page ViewControllers, ViewModels, and Layout logic.Features/Search/: Search functionality, SwiftUI views, and SwiftData models.Resources/: Theme, Localization, and Fonts.