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)