Owner's Portal
App that allows pizzeria owners to manage their shops.
The app main purpose is bridging the gap between restaurant owners and Slice. This app is build usingRxSwift
andUIKit
. All UI is written in code, constraints are set up with the help of SnapKit. The architecture of the codebase isMVVM
.
My responsibility is to take ownership of the app, align the codebase with company’s standards, implement testability and maintainability through documenting code and setting up the codebase for more developers to join. Frequent coordination with product owners and project managers is also part of my role. I am also devoting time and exploring options to enrich the experience of the app and make it more enjoyable for end users.Slice Register
Slice Register is a point of sale app running on an iPad.
The app has a large codebase and legacy Obj-C code. New features were built using Combine and Swift. The app architecture was MVVM with using routing/routers for navigation. I was part of “enabling” team whose purpose was the stability, deployment and monitoring of the app. We were achieving this by creating new APIs for the other developers to use. I overhauled the storage stack of the app(Core Data) and rewritten it in Swift. I also implemented custom migration mechanisms that were triggered during app update.
Testability was also very important as we wanted to deliver an always uptime system. I helped improve the testability by implementing dependency injection using Resolver. I also spent time optimising and fixing previous written tests.Skopje ZOO
Mobile app for the local ZOO.
I have implemented offline and custom map using map tiles andMapKit
. Offline navigation is also supported and uses custom GPX file to map the ZOO paths. UsingCoreLocation
it is able to determine navigation path, from user location to selected point (animal) in the map and draw the path on the map.
The UI is build usingUIKit
and storyboards. Every model and image that is used in the app is also saved on device to support offline usage. For images I have usedKingfisher
and the models are simply converted to data and saved intoUserDefaults
.
Some of the descriptions of the animals also have audio playback, this is implemented withAVAudioPlayer
.The app also offers ticket purchase which is done through native screens up until the payment, which redirects to Webview where the payment is completed.(this was due to the limitation of the payment provider).
Navigation is done through a left sliding menu, using the open source library SideMenu. The menu has 3 options each of which underneath is aUINavigationController
, thenViewController
s are pushed or presented from the rootUINavigationController
s.eSign/eSign framework
This app is used for previewing and signing of PDF documents.
This app was implemented usingPDFKit
at its core. It uses Apple's framework to preview and edit PDF documents. The UI is build usingUIKit
and storyboards. On double tapping the PDF document a zoomed in screen shows up that accepts drawing of signatures, this is done by drawing with the help ofUIBezierPath
objects. After the drawing is complete, and scaling is taken into consideration, there is the option to resize the signature view, on completion the signature is transformed into aPDFKitAnnotation
object and stamped onto the PDF file, saved locally.
Storing and retrieving files is done through Apple's file system so everything is saved on device. StandardFileManager
is used to achieve this.
The library that was used to distribute this code across multiple project wasXCFramework
bundle. Later the said library was imported as a static library to other Xcode projects.Neptun
Retail native app for consumer electronics retail store.
This was an MVC app using storyboards and build with Swift. I set up the networking architecture which used Alamofire networking. The images were loaded and cached usingKingfisher
. The app supported and was localized in 2 languages.
The navigation of the app was build using aUITabBarController
with 5UINavigationController
which represented each different tab. Based on the user state(logged in/out) the 4th tab would be loaded dynamically. The dashboard was build using separateUIViewController
for each section which were nested into container views.
Users could insert their loyalty card in their profile by scanning their physical card, and also generation of loyalty's card barcode was possible if it was previously added. This would mean users wouldn't have to carry their physical card if they had the mobile app.
After the items were added to the card the users could complete the purchase and insert all their information(or it was pre-filled if logged in) in native UI forms. The final step of inserting payment details was done through a web view because of payment provider limitations.