├── ProjectFolder
├── AppDelegate
├── AppDelegate.swift
├── AppDelegate+Firebase.swift
├── ...
├── Configuration
├── Release
├── -.plist
├── -.entitlements
├── sdk config files
├── Debug
├── -.plist
├── -.entitlements
├── sdk config files
├── Entity
├── Model
├── Object Files
├── Enum
├── Enum Files
├── Protocols
├── Protocol files
├── Validation
├── Constants
├── ValidationConstants.swift
├── Classes
├── Custom files
├── Rules
├── Rules files
├── EventManager
├── Core
├── Core event files
├── Firebase
├── FirebaseEventProvider files
├── OtherProvider
├── OtherProvider files
├── Constants
├── Constants.swift
├── Globals.swift
├── DefaultsKeys.swift
├── NotificationNames.swift
├── NotificationParameterKeys.swift
├── DateFormats.swift
├── Other Constants files
├── DeepLink
├── DeepLink classes
├── Singleton
├── Singleton classes
├── Routing
├── Core
├── Core classes
├── Animator
├── Animator classes
├── Routes
├── AppStoreRoute
├── AppSettingsRoute
├── Other global routes
├── Transitions
├── Transitions classes
├── Helper
├── Helper classes
├── Scenes
├── Auth
├── SignIn
├── SignInViewController.swift
├── SignInViewModel.swift
├── SignInRouter.swift
├── SignInRoute.swift
├── SignUp
├── SignInViewController.swift
├── SignInViewModel.swift
├── SignInRouter.swift
├── SignInRoute.swift
├── ForgotPassword
├── ForgotPasswordViewController.swift
├── ForgotPasswordViewModel.swift
├── ForgotPasswordRouter.swift
├── ForgotPasswordRoute.swift
├── Agreement
├── AgreementViewController.swift
├── AgreementViewModel.swift
├── AgreementRouter.swift
├── AgreementRoute.swift
├── SceneName
├── SceneNameViewController.swift
├── SceneNameViewModel.swift
├── SceneNameRouter.swift
├── SceneNameRoute.swift
├── Utilities
├── Extensions
├── UIImage+Extensions.swift
├── String+Extensions.swift
├── ...
├── Constants
├── Closures.swift
├── ...
├── Helper
├── KeyboardHelper.swift
├── ...
├── UIComponents
├── Resources
├── Assets
├── Icons.xcassets
├── Images.xcassets
├── Colors.xcassets
├── Assets.swift
├── UIImage+Icons.swift
├── UIImage+Images.swift
├── UIColor+Colors.swift
├── Strings
├── General.strings
├── Error.strings
├── Placeholder.strings
├── Modules.strings
├── Components.strings
├── StringConstants.strings
├── Fonts
├── Fonts.swift
├── UIFont+Extensions.swift
├── Fonts files
├── Sounds
├── Sound files
├── Gif
├── Gif files
├── Extensions
├── UIImage+Extensions.swift
├── UICollection+Extensions.swift
├── ...
├── Protocol
├── ReusableView.swift
├── ...
├── UIButton
├── PrimaryButton.swift
├── ...
├── Builder
├── UILabelBuilder.swift
├── UIButtonBuilder.swift
├── ...
├── Cell
├── UserCell.swift
├── ProductCell.swift
├── ...
├── DataProvider
├── Core
├── Typealias.swift
├── RequestProtocol.swift
├── RequestMethod.swift
├── RequestEncoding.swift
├── DataProviderProtocol.swift
├── ...
├── Manager
├── DataManager.swift
├── ...
├── Entity
├── User
├── User.swift
├── Gender.swift
├── ...
├── Auth.swift
├── ...
├── Requests
├── User
├── GetUserRequest.swift
├── UpdateUserRequest.swift
├── ...
├── VersionControlRequest.swift
├── ...
├── ProjectFolder
├── AppDelegate
├── AppDelegate.swift
├── AppDelegate+Firebase.swift
├── ...
├── ProjectFolder
├── Configuration
├── Release
├── -.plist
├── -.entitlements
├── sdk config files
├── Debug
├── -.plist
├── -.entitlements
├── sdk config files
├── ProjectFolder
├── Entity
├── Model
├── Object Files
├── Enum
├── Enum Files
├── ProjectFolder
├── Protocols
├── Protocol files
├── ProjectFolder
├── Validation
├── Constants
├── ValidationConstants.swift
├── Classes
├── Custom files
├── Rules
├── Rules files
├── ProjectFolder
├── EventManager
├── Core
├── Core event files
├── Firebase
├── FirebaseEventProvider files
├── OtherProvider
├── OtherProvider files
All constants used in App should be stored under the Constants folder. Such as Globals.swift, NotificationKeys, UserDefaultsKeys, DateFormatter etc.
NotificationCenter extension file should be used, notification names NotificationNames.swift and notification parameters NotificationParameterKeys.swift named under Constants folder.
MobilliumUserDefaults library should be used and defaults key should be stored under the Constants folder named as DefaultsKeys.swift.
MobilliumDateFormatter library should be used, if need to use extension it should be named as DateFormats.swift and should be stored under the Constants folder.
├── ProjectFolder
├── Constants
├── Constants.swift
├── Globals.swift
├── DefaultsKeys.swift
├── NotificationNames.swift
├── NotificationParameterKeys.swift
├── DateFormats.swift
├── Other Constants files
├── ProjectFolder
├── DeepLink
├── DeepLink classes
├── ProjectFolder
├── Singleton
├── Singleton classes
├── ProjectFolder
├── Routing
├── Core
├── Core classes
├── Animator
├── Animator classes
├── Routes
├── AppStoreRoute
├── AppSettingsRoute
├── Other global routes
├── Transitions
├── Transitions classes
├── ProjectFolder
├── Helper
├── Helper classes
├── ProjectFolder
├── Scenes
├── Auth
├── SignIn
├── SignInViewController.swift
├── SignInViewModel.swift
├── SignInRouter.swift
├── SignInRoute.swift
├── SignUp
├── SignInViewController.swift
├── SignInViewModel.swift
├── SignInRouter.swift
├── SignInRoute.swift
├── ForgotPassword
├── ForgotPasswordViewController.swift
├── ForgotPasswordViewModel.swift
├── ForgotPasswordRouter.swift
├── ForgotPasswordRoute.swift
├── Agreement
├── AgreementViewController.swift
├── AgreementViewModel.swift
├── AgreementRouter.swift
├── AgreementRoute.swift
├── SceneName
├── SceneNameViewController.swift
├── SceneNameViewModel.swift
├── SceneNameRouter.swift
├── SceneNameRoute.swift
Extensions folder should contain all extensions except DataProvider extensions. Extension files should be separated by their classes and usage such as UIImage+Extensions.swift, String+Extensions.swift etc.
├── Utilities
├── Extensions
├── UIImage+Extensions.swift
├── String+Extensions.swift
├── ...
Constants folder should contain files such as Closures.swift and separated by their usage.
├── Utilities
├── Constants
├── Closures.swift
├── ...
Helper folder should contain files such as KeyboardHelper.swift and separated by their usage.
├── Utilities
├── Helper
├── KeyboardHelper.swift
├── ...
UIComponents should contain Resources, CustomViews and Builders. The files of the resources created with the SwiftGen will be here.
├── UIComponents
├── Resources
├── Assets
├── Icons.xcassets
├── Images.xcassets
├── Colors.xcassets
├── Assets.swift
├── UIImage+Icons.swift
├── UIImage+Images.swift
├── UIColor+Colors.swift
├── Strings
├── General.strings
├── Error.strings
├── Placeholder.strings
├── Modules.strings
├── Components.strings
├── StringConstants.strings
├── Fonts
├── Fonts.swift
├── UIFont+Extensions.swift
├── Fonts files
├── Sounds
├── Sound files
├── Gif
├── Gif files
├── UIComponents
├── Extensions
├── UIImage+Extensions.swift
├── UICollection+Extensions.swift
├── ...
├── UIComponents
├── Protocol
├── ReusableView.swift
├── ...
├── UIComponents
├── UIButton
├── PrimaryButton.swift
├── ...
├── UIComponents
├── Builder
├── UILabelBuilder.swift
├── UIButtonBuilder.swift
├── ...
├── UIComponents
├── Cell
├── UserCell.swift
├── ProductCell.swift
├── ...
Core folder should contains Protocols, Request Encodings and Typealiases related with DataProvider. If there is an extension needed on DataProvider it should store in DataProvider. The main aim is that DataProvider must not be depended other modules or app. It should work if it is extract from the main app.
├── DataProvider
├── Core
├── Typealias.swift
├── RequestProtocol.swift
├── RequestMethod.swift
├── RequestEncoding.swift
├── DataProviderProtocol.swift
├── ...
Manager should contains DataManager class which is a manager of all requests.
├── DataProvider
├── Manager
├── DataManager.swift
├── ...
Entity should contains an all object models of app. These models should separated by their relations and grouped by folders.
├── DataProvider
├── Entity
├── User
├── User.swift
├── Gender.swift
├── ...
├── Auth.swift
├── ...
Requests should contains an all Api requests of app. These requests should seperated by their relations and grouped by folders.
├── DataProvider
├── Requests
├── User
├── GetUserRequest.swift
├── UpdateUserRequest.swift
├── ...
├── VersionControlRequest.swift
├── ...