Little Introduction. This application using only imported frameworks and SDK's, it depended on internet connection because of authorization. Also current application has two changable localization: Russian and English. For Russian user's standart localization is Russian,for others - English. All texts, alerts and other information are localized.
- UIKit, SwiftUI;
- iOS 16+;
- MVC(MVVM);
- Realm;
- UserDefaults for settings and Keychain for user's authorization data;
- SnapKit;
- Firebase and Google Authentication;
- XCTests.
- Authorize user by creating account, login with previous created account or login with Google account;
- Creating, Editing events on current day in two variations:
- Adding events in calendar with displaying counts of event on every day;
- Adding events to basic table view with variations of sorting,searching events as it necessary.
- Creating contacts and duplicate them to system applications Contacts and also import contacts from the same application;
- Customization of self user interface, regulate access to systems elemenets, editing with current account.
- User Authorization Module
- AuthenticationViewController:
- View for choosing variations of how to login for user. User can login to previously created account, create account or authorize with Google.
- LoginViewController:
- View for enter with earlier created account or reset account if user forget password.
- ResetViewController:
- View for reset up password. After confirming server send to user mail to his mailbox with confirming about changing password and sets up new password.
- CreateNewAccountViewController:
- View for creating account. User enter email as login, first password and repeat it again and user's name. After that if internet connection is good, server's send answer that's account is created.
- Schedule Module
- ScheduleViewController:
- View include calendar which display dots on day if on this day have any event or birthdays. Birthdays upload from contacts;
- Search give access to find any event by name which ever was created;
- List view present all event which has in current data base. Sorted by date.
- CreateTaskViewController:
- View display calendar week inline. At every days display table view with events which include at every row name, date and color of event;
- Functions for editing chosen cells, delete and etc;
- Display button at chosen day if has any birthdays. User can press to see who has any birthdays at current day.
- DetailViewController:
- View present event if user press before on cell. Show all details event. Give access to press on URL and open link if this value is not empty.
- CreateEventScheduleViewController:
- View has table view with 5 sections with different data. Even color of event, set image and other parameters.
- EditEventScheduleViewController:
- View same as CreateEventSchedule but give access to chosen model for editing.
- All Tasks Module
- AllTasksViewController:
- View display table view with lists of short events. Search using for searching events. Segmen controller give access to sort events.
- AllTasksDetailViewController:
- View display info about event with possibility to delete event, copy info from chosen row.
- CreateTasksViewController:
- View display table view with sections with fields of data and dates for filling.
- EditTasksViewController:
- View same as CreateTasksViewController, but work with chosen element of model and give access to change chosen value.
![](https://private-user-images.githubusercontent.com/70747233/268409937-86f23df1-2257-4e59-b408-609a667463a8.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM5MTg5MzEsIm5iZiI6MTcyMzkxODYzMSwicGF0aCI6Ii83MDc0NzIzMy8yNjg0MDk5MzctODZmMjNkZjEtMjI1Ny00ZTU5LWI0MDgtNjA5YTY2NzQ2M2E4LmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE3VDE4MTcxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk4ZjJkMjhhYjg2ZDNmYjUzMDg3NGRhYzJiOWYyYWZkNWRiZDQxNGNjMTNhNjI5ZTkwZGUxZjQzNDdiOTYyYTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.qLwFL5JYjapmFOJIKR61BeHS2DZcN9fREYP4q99EGOM)
![](https://private-user-images.githubusercontent.com/70747233/268409971-a104fbcd-d3db-4d82-960c-7ff2cf27ca82.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM5MTg5MzEsIm5iZiI6MTcyMzkxODYzMSwicGF0aCI6Ii83MDc0NzIzMy8yNjg0MDk5NzEtYTEwNGZiY2QtZDNkYi00ZDgyLTk2MGMtN2ZmMmNmMjdjYTgyLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE3VDE4MTcxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY4OGY0N2M1ODJlZjViNmRlZDllODA5YmUwYzk5ZWU2ZDIzMTBmNTJmMDAxOTRmNTg5NGVlOTVhMzg1MzU1ZDEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.i_tiu7F8Unr86mjwl7Ch30iQ0BOTm8BMCJBefzuokNA)
![](https://private-user-images.githubusercontent.com/70747233/268409998-b6e627ad-23a6-4334-ba9e-10d24bf3a5a9.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM5MTg5MzEsIm5iZiI6MTcyMzkxODYzMSwicGF0aCI6Ii83MDc0NzIzMy8yNjg0MDk5OTgtYjZlNjI3YWQtMjNhNi00MzM0LWJhOWUtMTBkMjRiZjNhNWE5LmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE3VDE4MTcxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQxMWExNzY1ZmM4MTZkNTgzYzY1MzhjY2VhODgxNDMyMGI5NmQ2ZGI5MTgyNjFhOTdkZjRiYmFhMDNlYjFkYWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Bfr61kdjh20NHmP98ziXF04HEkzrJhp5AxyEatW-vdo)
- Contacts Module
- ContactsViewController
- View display table view with search bar for filtering contacts. Navigation item give access to user's systems Contacts and give access to import chosen contacts to our application. By long gesture on chosen table view row give possibilty to interact with. Even edit button give access to interact with table view models and edits them.
- CreateContactViewController
- View display custom view with adding image from library or creating image and table view with textfields for filling.
- EditContactViewController
- View same as CreateContactViewController but for edit chosen contact.
- User Profile Module
- UserProfileViewController
- View display custom view with main information and image about user. Below is settings table view with huge perfomance for setting up application,password for entering in app,enabling animation,vibration, custom font and editing user's account.
- LockscreenWidget
- LockscreenWidget
- Widget include current date and counts. By pressing open ScheduleViewController
![](https://private-user-images.githubusercontent.com/70747233/268414530-cee3fff2-5cb2-42ce-b40c-94acaf3710d2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM5MTg5MzEsIm5iZiI6MTcyMzkxODYzMSwicGF0aCI6Ii83MDc0NzIzMy8yNjg0MTQ1MzAtY2VlM2ZmZjItNWNiMi00MmNlLWI0MGMtOTRhY2FmMzcxMGQyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE3VDE4MTcxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI0ZmVhOGQ2MDg3YWI5YTU5OTFhN2U0OThmNjA0MzQ1MTJkNGUwYmE5MjA5Y2I4YTM1ZmYxOWI0ZjFiODhlOTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.cg-LVo2W5M5cPjCs342sm0FUXl8mOpnRTN62LGXa3xc)
![](https://private-user-images.githubusercontent.com/70747233/268413771-5636f581-0f3d-4944-b63a-f0f07633a2cb.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM5MTg5MzEsIm5iZiI6MTcyMzkxODYzMSwicGF0aCI6Ii83MDc0NzIzMy8yNjg0MTM3NzEtNTYzNmY1ODEtMGYzZC00OTQ0LWI2M2EtZjBmMDc2MzNhMmNiLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE3VDE4MTcxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTIxZTU0ZWM4MDI2OGVhMzA5MmRhNDBmNTE1NTE5N2VkYzFkOTEzNjY5MWY2MDI5YWUyNzQwOWEzYzM0MWZjYjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.oiYi3n1atrVt2dJir2IL06CZRgCtBEjUdj9YFIDSY-c)
![](https://private-user-images.githubusercontent.com/70747233/268413829-0959b978-d482-41a7-a7b9-3bf0497c585e.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM5MTg5MzEsIm5iZiI6MTcyMzkxODYzMSwicGF0aCI6Ii83MDc0NzIzMy8yNjg0MTM4MjktMDk1OWI5NzgtZDQ4Mi00MWE3LWE3YjktM2JmMDQ5N2M1ODVlLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE3VDE4MTcxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY4NDA0YWQ1N2MwNGJmOGY4N2MwMmE1MGZiNzlhMmY2Yzg3YTY5MWE0MWRjMWM1OTliMmExNzk4OTAzNmM5N2YmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.I67OfPUk2fvvjYJYihNZ1IFKP3RVGwSpeXgB3BdUCk4)
![](https://private-user-images.githubusercontent.com/70747233/268413837-eac7d11b-1e06-4dbd-96ff-f08ce329bd5e.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM5MTg5MzEsIm5iZiI6MTcyMzkxODYzMSwicGF0aCI6Ii83MDc0NzIzMy8yNjg0MTM4MzctZWFjN2QxMWItMWUwNi00ZGJkLTk2ZmYtZjA4Y2UzMjliZDVlLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE3VDE4MTcxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTNkMGRjNjgyNjhmODIzZjgwNzdmZjZiNDQyNTE1NTQyMmY1YzllNzExMTUzY2IxMjBkM2EyYmFhNmFlZjJhOTMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.WoT-DBEex91MsUOGEUTHiFoRIchRHqzpMGcFyQ0yN04)
- Start work with Firebase Auth, Analytics, Crashlytics;
- Using combine for some different tasks;
- Using module tests for testing some business logic methods and class methods;
- Test work with UIColorPickerViewController;
- Test sharing function of table view in snapshot or .pdf variations;
- Huge work with extensions, MVVM pattern and other helpful tools for development;
- Code review and comments for all important functions and class;
- Work with different target in one project. Combining Swift and SwiftUI;
- Success work with Realm Database;
- Creating custom TabBarController with animation;
- Huge implementation of animation and work with them;
- Work with versions and .git versions;
- Added full localization of application and it event changable if user want it;
- Work with Haptics on iPhone when user make some action with application. It edited if user need to switch vibration;
- Work with Keychain manager for save storing email and password;
- Full autolayout with SnapKit only;
- Completed work with SystemConfiguration for checking internet connection;
- Work with WidgetKit and display number of events on current day in widget.