For a large bank mobile app using MVVM with Storyboards, here's a well-organized directory structure:
BankApp/ ├── Application/ │ ├── AppDelegate.swift │ ├── SceneDelegate.swift │ ├── Info.plist │ └── Assets.xcassets/ ├── Resources/ │ ├── Fonts/ │ ├── Localization/ │ │ ├── en.lproj/ │ │ │ └── Localizable.strings │ │ └── es.lproj/ │ │ └── Localizable.strings │ └── Constants.swift ├── Core/ │ ├── Network/ │ │ ├── NetworkManager.swift │ │ ├── APIEndpoints.swift │ │ ├── RequestBuilder.swift │ │ └── NetworkError.swift │ ├── Storage/ │ │ ├── KeychainManager.swift │ │ ├── CoreDataManager.swift │ │ └── UserDefaultsManager.swift │ ├── Authentication/ │ │ ├── AuthenticationManager.swift │ │ └── BiometricAuthManager.swift │ └── Analytics/ │ └── AnalyticsManager.swift ├── Extensions/ │ ├── UIKit+Extensions.swift │ ├── Foundation+Extensions.swift │ └── Date+Extensions.swift ├── Utilities/ │ ├── ThemeManager.swift │ ├── Logger.swift │ └── CurrencyFormatter.swift ├── Models/ │ ├── Account.swift │ ├── Transaction.swift │ ├── Card.swift │ ├── User.swift │ └── InvestmentPortfolio.swift ├── Services/ │ ├── AccountService.swift │ ├── TransactionService.swift │ ├── CardService.swift │ ├── NotificationService.swift │ └── InvestmentService.swift ├── Modules/ │ ├── Login/ │ │ ├── View/ │ │ │ ├── LoginViewController.swift │ │ │ └── Login.storyboard │ │ ├── ViewModel/ │ │ │ └── LoginViewModel.swift │ │ └── Model/ │ │ └── LoginResponse.swift │ ├── Dashboard/ │ │ ├── View/ │ │ │ ├── DashboardViewController.swift │ │ │ ├── Dashboard.storyboard │ │ │ ├── Cells/ │ │ │ │ ├── AccountSummaryCell.swift │ │ │ │ └── QuickActionCell.swift │ │ │ └── Components/ │ │ │ └── BalanceSummaryView.swift │ │ ├── ViewModel/ │ │ │ └── DashboardViewModel.swift │ │ └── Model/ │ │ └── DashboardData.swift │ ├── Accounts/ │ │ ├── View/ │ │ │ ├── AccountsViewController.swift │ │ │ ├── AccountDetailViewController.swift │ │ │ ├── Accounts.storyboard │ │ │ └── Cells/ │ │ │ ├── AccountCell.swift │ │ │ └── TransactionCell.swift │ │ ├── ViewModel/ │ │ │ ├── AccountsListViewModel.swift │ │ │ └── AccountDetailViewModel.swift │ │ └── Model/ │ │ └── AccountDetails.swift │ ├── Transfer/ │ │ ├── View/ │ │ │ ├── TransferViewController.swift │ │ │ ├── TransferConfirmationViewController.swift │ │ │ ├── Transfer.storyboard │ │ │ └── Components/ │ │ │ └── RecipientSelectionView.swift │ │ ├── ViewModel/ │ │ │ ├── TransferViewModel.swift │ │ │ └── TransferConfirmationViewModel.swift │ │ └── Model/ │ │ └── TransferRequest.swift │ ├── Cards/ │ │ ├── View/ │ │ │ ├── CardsViewController.swift │ │ │ ├── CardDetailViewController.swift │ │ │ ├── Cards.storyboard │ │ │ └── Components/ │ │ │ └── CardView.swift │ │ ├── ViewModel/ │ │ │ ├── CardsListViewModel.swift │ │ │ └── CardDetailViewModel.swift │ │ └── Model/ │ │ └── CardDetails.swift │ ├── Payments/ │ │ ├── View/ │ │ │ ├── PaymentsViewController.swift │ │ │ ├── BillPaymentViewController.swift │ │ │ ├── Payments.storyboard │ │ │ └── Cells/ │ │ │ └── PayeeCell.swift │ │ ├── ViewModel/ │ │ │ ├── PaymentsViewModel.swift │ │ │ └── BillPaymentViewModel.swift │ │ └── Model/ │ │ └── PaymentRequest.swift │ ├── Investments/ │ │ ├── View/ │ │ │ ├── InvestmentsViewController.swift │ │ │ ├── InvestmentDetailViewController.swift │ │ │ ├── Investments.storyboard │ │ │ └── Components/ │ │ │ └── PortfolioChartView.swift │ │ ├── ViewModel/ │ │ │ ├── InvestmentsViewModel.swift │ │ │ └── InvestmentDetailViewModel.swift │ │ └── Model/ │ │ └── InvestmentData.swift │ ├── Profile/ │ │ ├── View/ │ │ │ ├── ProfileViewController.swift │ │ │ ├── SecuritySettingsViewController.swift │ │ │ └── Profile.storyboard │ │ ├── ViewModel/ │ │ │ ├── ProfileViewModel.swift │ │ │ └── SecuritySettingsViewModel.swift │ │ └── Model/ │ │ └── UserProfile.swift │ └── Support/ │ ├── View/ │ │ ├── SupportViewController.swift │ │ ├── ChatSupportViewController.swift │ │ └── Support.storyboard │ ├── ViewModel/ │ │ ├── SupportViewModel.swift │ │ └── ChatSupportViewModel.swift │ └── Model/ │ └── SupportTicket.swift ├── Common/ │ ├── Views/ │ │ ├── CustomButton.swift │ │ ├── CustomTextField.swift │ │ ├── AlertView.swift │ │ └── LoadingView.swift │ ├── Protocols/ │ │ ├── Reusable.swift │ │ └── Coordinator.swift │ └── Coordinators/ │ ├── AppCoordinator.swift │ ├── LoginCoordinator.swift │ └── MainCoordinator.swift └── Configurations/ ├── Debug.xcconfig ├── Release.xcconfig └── Staging.xcconfig
Key Aspects of This Structure:
-
MVVM Organization:
- Each module has View, ViewModel, and Model folders
- Clear separation of concerns with Storyboards in View folders
-
Module-based Structure:
- Banking features separated into distinct modules (Login, Dashboard, Accounts, etc.)
- Each module is self-contained with its own Storyboard and components
-
Core Services:
- Network, Storage, Authentication layers separated from UI
- Reusable services for banking operations
-
Common Components:
- Shared UI elements and protocols in Common directory
- Coordinator pattern for navigation between modules
-
Resources & Configuration:
- Properly organized resources for localization, fonts, etc.
- Different configuration files for various build environments
This structure supports scalability and maintainability while following MVVM principles and leveraging Storyboards for UI design in a large banking application.
Top comments (0)