Skip to content
This repository has been archived by the owner on Jan 26, 2021. It is now read-only.

GSoC20 Final Report, Yugantar

Yugantar Jain edited this page Aug 30, 2020 · 5 revisions

Hi! My name is Yugantar and I was a GSoC20 Student with AnitaB.org during which I've built the all-new Mentorship iOS app using SwiftUI from scratch.

The Mentorship iOS app is the iOS client for the Mentorship System, which is an application that matches women in technology to mentor each other, on career development, through 1:1 relations during a certain period of time.

Mentorship iOS Team

Repositories Worked On

Scrum Check-ins

Work and Pull Requests

The development of the all-new Mentorship iOS app in SwiftUI has happened in three phases-
Phase 1: Parity with the Mentorship Android app
Phase 2: Development of the project architecture, new features, and extensive testing
Phase 3: New features (backend + iOS), bug fixes, and polishing

Phase 1 Work

Parity with the Mentorship Android app

The Mentorship iOS is an all-new app that has been inspired from the Mentorship android app. Our aim for the first phase was to achieve parity with the android app and have all the features in-place.

Important Pull Requests

  1. Login and Sign-Up [UI]
  2. Login and Sign-Up [Backend Consumption]
  3. Members List [UI + Backend Consumption]
  4. Establish proper app flow, fix Travis fail, and remove garbage files
  5. Member Detail [UI]
  6. Send Request [Backend Consumption]
  7. Home Screen [UI]
  8. Home Screen [Backend Consumption]
  9. User Profile and Editor [UI]
  10. Update Profile [Backend Consumption]
  11. Settings Screen [UI]
  12. Settings About Screen [UI + Web]
  13. Complete Settings Implementation and Backend Integration
  14. Relation Screen [UI]
  15. Relation screen [Backend Consumption]
  16. Relation request actions to accept, reject, cancel, and delete request [UI + Backend Consumption]

Phase 2 Work

Development of the project architecture, new features, and extensive testing

After achieving parity with the Mentorship android app in the phase 1, our focus in phase 2 was on developing a scalable app architecture (MVVM with Repository pattern), perform comprehensive automated testing, and implement new features including task comments and infinite scrolling.

Important Pull Requests

  1. Network Layer Refactoring (with Repository pattern)
  2. Comprehensive automated testing (unit + integration)
  3. Task Comments [UI + Backend Consumption]
  4. Pagination in Members List (Infinite Scrolling) [UI + Backend Consumption]

Phase 3 Work

New features (backend + iOS), bug fixes, and polishing

In the last phase, I worked on implementing additional features that would improve the user experience of the app including members search, report violations, and social sign-in. Work on the backend repository has also been done to create new APIs for report violations and social sign-in. Finally, additional polishing and bug fixes have been done.

Important Pull Requests

  1. Members Search [UI + Backend Consumption]
  2. Report Violations (Backend)
  3. Report Violations (App) [UI + Backend Consumption]
  4. Social Sign-in (Backend)
  5. Social Sign-in (App) [UI + Apple/Google API + Backend Consumption]
  6. Fixed failing home service test
  7. Robust Service Tests + Travis CI Configuration

Blog Posts

Throughout the GSoC coding period, I've published weekly blog posts on the progress of the project and the technologies used in it. In total, I've published 13 blog posts as part of my GSoC work, 1 in community bonding period and 12 in coding period. The blog posts are listed as follows-

  1. My journey of getting into GSoC’20
  2. My first week of GSoC coding period
  3. Working with AnitaB.org as a GSoC student
  4. My third week of coding in GSoC’20 and the power of the Combine framework
  5. Dub Dub week in GSoC
  6. A Tour of Generic Programming in the Mentorship iOS App
  7. Two tips I got from Apple engineers to avoid Memory Leaks and increase efficiency in SwiftUI
  8. Easy Pagination in SwiftUI
  9. Unit Test Networking Code in Swift Without Making Loads of Mock Classes
  10. Implement native Search Bar in SwiftUI
  11. Implement Sign-In with Google in a SwiftUI App
  12. Implement Sign in with Apple in a SwiftUI App
  13. Configuring Travis CI for Xcode projects

Challenges

  • Effective communication in a remote environment
  • Balance between scalability and the current needs of the project
  • Lots of new technologies (SwiftUI, Combine, XCTest, Flask, MVVM); lots of research and learning
  • Complete clarity about the exact specifications of some features

Takeaways

  • SwiftUI + Combine
  • MVVM and Separation of Concerns
  • Automated Testing (Unit + Integration)
  • Project Documentation
  • Backend and Flask (Python)
  • Effective communication
  • True meaning of Mentorship
  • Flexibility

Overall Experience

My overall experience in one phrase would be - huge learning experience! Not only have I learned a lot of new technologies during this GSoC (SwiftUI, Combine, MVVM, Repository pattern, Backend, Flask, Python, Keychain, Localization, etc), but I've also learned a lot about how organizations function (especially an open-source organization), how the admins and mentors function, how the community moves forward, how we can maintain security in an open-source project, and a lot more!