MVP to demonstrate MVVM pattern UI/UX solution for technical interview (the app helps to use iPhone as a mobile photo scanner)
├── Models
│ ├── HistoryListItem.swift
│
├── Services
│ ├── ImageRecognitionManager.swift
│ ├── ImageManager.swift
│ ├── StorageService.swift
│ ├── ImageManagerProtocol.swift
│ ├── StorageServiceProtocol.swift
│
├── Views
│ ├── DetailListItemView.swift
│ ├── ListItemViewCell.swift
│ ├── HistoryListView.swift
│
├── ViewModels
│ ├── DetailListItemViewModel.swift
│ ├── ListItemViewCellViewModel.swift
│ ├── HistoryListViewModel.swift
│
├── Supporting Files
│ ├── IScannerApp.swift
│ ├── Assets.xcassets
│
├── Core Data Model
│ ├── IScanner.xcdatamodeld
│
├── Other Files
│ ├── UserData.swift
│ ├── Preview Content
The IScanner project follows a Model-View-ViewModel (MVVM) architecture with clear separation of concerns. Here's an overview of the major components:
- Models: Contains the data models used within the app. For example,
HistoryListItem.swiftrepresents individual items in the history list. - ViewModels: Contains the logic to bind the data models to the views. Each ViewModel is responsible for providing data to the associated View and handling any business logic.
- Views: Contains the UI components of the app, such as
HistoryListView.swiftandDetailListItemView.swift, which display the data provided by the ViewModels. - Services: Contains the business logic and operations that interact with external data sources. For example,
ImageRecognitionManager.swifthandles image-related tasks, andStorageService.swiftdeals with data persistence. - Supporting Files: Contains project-level configurations and resources, such as
IScannerApp.swift, which is the entry point of the application, andAssets.xcassetsfor storing assets like images.
The app utilizes Core Data for local data persistence, with the IScanner.xcdatamodeld file defining the Core Data model.
Only standart frameorks from aple have been used.
- Implementing additional unit tests for Services and ViewModels.
- Integrating more advanced features such as API and syncing with server.
- Optimize filtering using a database e.g.
Realmis better thanCoreData. - Store pdf generation and image recognition data with progres indication .
- Improve UI/UX with
Figmaand designer collaboration