Enhance Xcode templates using Git

Xcode provides a selection of default file and project templates. They act as a basis anytime you create a new file or a new project in Xcode. Xcode template selection...

Simplify collection view compositional layout with a DSL

At the WWDC19 Apple introduced a class UICollectionViewCompositionalLayout. This new API allows us to create a custom layout in a declarative and composable way. It is available from iOS 13,...

Our first mobile app using Kotlin Multiplatform

2021 has been a year of change for everybody, including for some of the iOS and Android developers at Fabernovel. We have taken the opportunity to explore Kotlin Multiplatform on...

Write a REST API with a single command

At Fabernovel, when we write a REST API, we want to synchronize our tests with json schemas from our documentation, we want to write interactors for each CRUD operation and...

Use domains with Rails

In 2011, we started an internal Rails project called the Hub. At the beginning, it was as a side project set up to help the company on time tracking, finance,...

Interactors over fat models

When we use Rails, we are encouraged by the framework to use the MVC pattern. It is also a common practice to follow a popular advice Skinny Controller, Fat Model....

Synchronize your tests with your documentation

When you develop your API, a part of the job is to write the documentation. At Fabernovel, we used to write our documentation on a tool called Slate. However, by...

Build a custom player on top of AVFoundation

When building an iOS/tvOS application with video playback, the best player solution can be to build a custom one to match the exact application requirements. This article is a technical...

UIKit rendering - The run loop

On the previous post, we discovered that the commit of the current implicit transaction is responsible of our initial interrupted layout phase. So we only have one question left: when...

UIKit rendering - CATransaction

On the previous post, we discovered a mysterious CATransaction.commit at the bottom of our interrupted layout phase stack. Let’s find out its role in the layout process. Experimentation The CATransaction...