This project represents our Final Bank Misr Internship project. It is an iOS project built using Swift and UIKit.
This project proposes a mobile application for secure and convenient money transfers, incorporating features similar to online banking and mobile money apps.
The app's features align with predefined user stories and integrate seamlessly with the backend. The complete list of user stories can be found in the PDF located in the develop
branch named BM 2024 Project - Money Transfer Application.pdf
.
Our final work is included in the develop branch
This App consists of multiple features including:-
- Onboarding: Introduces the app's main features to new users.
- User Authentication: Login, register, and logout functionality.
- Session Timeout: Redirects users to the login screen after 2 minutes inactivity or session expiration.
- Home Screen: Displays the user's balance and recent transactions.
- Local Notifications: Sent after a successful transaction, with an option to view all notifications.
- Favorites Management: Add, delete, and select favorite contacts for faster transfers.
- Money Transfer: Allows secure transfers with proper validation.
- Transaction History: View details of all sent and received transactions.
- Profile Information: View and edit user details.
- Animations: Smooth tab bar switching and transfer steps.
Before getting started, ensure you have the following installed on your machine:
- macOS 10.15 or later
- Xcode 13.3 or later
- CocoaPods (Install instructions here)
-
Clone the repository: Open your terminal and run the following command to clone the repository:
git clone https://github.com/BM-Internship-Project/iOS-Team.git
-
Checkout the
develop branch
: Ensure you're working in the develop branch where the latest code resides:git checkout develop
-
Install CocoaPods dependencies: Run the following command to install the required pods for the project:
pod install
-
Open the project in Xcode: After the dependencies are installed, open the project using the
.xcworkspace
file:open SpeedoTransfer.xcworkspace
In order to use the app functionalities you must register with new account or log in with existing account, you can use this test account:-
- Email: testaccount@gmail.com
- Password: Testaccount@00
Speedo Transfer project is implemented using the Model-View-Controller (MVC) architecture pattern.
- Model: Contains the data and any business logic required to handle that data.
- View: is responsible for displaying the UI design to the user.
- Controller: handles any user input or interactions and update the Model and View as needed.
Registration/
├── Shared # Files that are shared across multiple parts of the project.
├── Manager # Files manages API, tokens and userDefaults implying Singleton Pattern.
├── Utils # Constant file and common helper functions to reuse.
├── Extension # Common functions added as an extension for existing UI Components.
└── Resources # Non-code files such as images, colors, fonts and other types of assets.
- Manager:
- API manager
- Handles APIs in multiple ways using native URL sessions and external Alamofire pod
- UserDefaults manager
- Checks if user visits the app for the first time to show onboarding screens
- Checks if user is logged in or out
- Keychain manager
- Securely save and retrieve the token used in the APIs
- Token manager
- Calls the keychain functions to get and set the token
- API manager
- Extensions: Common functionality added to
UIViewController
andUIView
through extensions.
CocoaPods is used as a dependency manager. List of dependencies used:
- pod 'Alamofire', '~> 5.6.4' -> Networking library that ensures seamless intergration with backend APIs.
- pod 'IQKeyboardManagerSwift' -> Smooth navigation between multiple text fields in the screen.
- pod 'RAMAnimatedTabBarController' -> Gives an animation while switching between multiple tab bars.