Skip to content

Instantly share code, notes, and snippets.

@DhrubojyotiBis1
Last active December 6, 2020 09:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save DhrubojyotiBis1/c09d1ab9cf3fc69c1dd7cb737ebc86f7 to your computer and use it in GitHub Desktop.
Save DhrubojyotiBis1/c09d1ab9cf3fc69c1dd7cb737ebc86f7 to your computer and use it in GitHub Desktop.

Enhancement of Catrobat iOS Application

Hi, I am Dhrubojyoti Biswas(@DhrubojyotiBis1) and this is my Work Product documumentation for Google Summer of Code.

Introduction:

During Google Summer of Code 2020, I contributed to Catrobat iOS (https://github.com/Catrobat/Catty) application. The aim of my project was to implement the tagging feature, upgrading the language version from 0.991 to 0.992 so that programs created with the Android version can behave alike as much as possible on both operating systems.

Work:

I work on the following:

1. Tagging feature(#1441):

Previously the projects that were being uploaded to the Catrobat community didn’t contain tags. I created this feature which helps the users to upload the project created by them to the Catrobat community with any three specific tags.

There were some issues that needed to be resolved before the implementation of the tagging feature and they are:

  • Improved API call for upload project(#1400)
  • Use the improved API call to upload project(#1405)
  • Redesigning of Upload page UI(#1411)
  • Introduce API call for getting Tags(#1451)

I also updated the UI for the upload page due to the implementation of this new feature. Here are some images

2. Upgrade of language version(#1467):

Previously the iOS application support Catrobat language version up to 0.991. Catrobat language is the basis for the pocket code applications. This language version specifies how the project code should be parsed and serialized. I introduced the scene metaphor which was the basis for the Catrobat language version 0.992. Also, I changed the serializer and the parser for the project to ensure that the program created by iOS or Android behaves alike.

There were some issues that needed to be resolved before the support for language version 0.992 could be implemented and they are:

  • Improved container for variable(#1390, #1397)
  • Implemented container in object(#1404)
  • Improved the comparison of the serialized XML files(#1408)
  • Converted container class from objective C to swift (#1447)
  • Implemented Scene metaphor(#70)

This is a major update for the iOS application since after this update both the application i.e iOS and the Android will be having the same language version and will behave alike.

Contribution:

Besides the above two major feature that I worked in, there are many other refactoring and improvement that I did, and here are some mentionable once:

  • Implemented migrater which migrates project files and directories to the correct directory(#1336)
  • Created a new data structure called UserList to hold list of any values(#1336)
  • Converted classes from Objective-C to swift(#1343, #1351)
  • Implemented parser and serializer for UserList(#1363)
  • Implemented SynchronizedArray for a thread-safe-array implementation(#1381)
  • Used SynchronizedArray in UserList(#1384)

Here is the link to all of the contributions that I made during the coding period.

Future work:

Most of the features that I worked on have been tested either by the unit test or UI test. The language version support has been updated but the project still lacks the feature to add new scenes. Future work includes any fixes/changes that could be needed. I will keep contributing to Catrobat and work on adding more features to the app as and when required.

Things that I learned:

I have learned a lot of new things in the past few months regarding iOS development and programming in general.

  • I spent a lot of time debugging and fixing bugs which helped improve my debugging skills.
  • Unit and UI testing were comparatively new to me. But I wrote a lot of Unit and UI tests and learn a lot of new concepts such as dependency injection, stubbing, mocking, etc.
  • I learned how to test networking tasks.
  • I spent a lot of time figuring out XML and xPath which was a key tool in this project.

Overall it has been a great journey of learning and implementing new stuff.

My experience:

The last three months of GSoC included a lot of learning, coding, debugging, and testing. As an iOS developer, I feel that I have learned a lot of new things and my programming skills have definitely improved. A lot of challenges were faced as there were many tasks I had to implement that were completely new to me.

I am very thankful to all of my mentors especially Michael Herold (@m-herold) who helped me out whenever I got stuck at a problem and kept me motivated throughout the program to be consistent and put in my best efforts.

GSoC has introduced me to the amazing world of open source community for which I am very grateful.

Thank you for the opportunity! :’)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment