Enhance Xcode templates using Git
Jun 21, 2021, 8:00 PM
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.
Simplify collection view compositional layout with a DSL
May 17, 2021, 8:00 PM
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, tvOS 13 and macOS 10.15.
Our first mobile app using Kotlin Multiplatform
May 9, 2021, 8:00 PM
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 a production mobile app and to consider the benefits of...
Write a REST API with a single command
May 3, 2021, 8:00 PM
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 we also want to write our resources inside a namespace. Doing...
Use domains with Rails
Apr 26, 2021, 8:00 PM
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, and projects progress. It grows organically with us, with Rails and with our...
Interactors over fat models
Apr 19, 2021, 8:00 PM
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. But writing fat models can have its limits.
Synchronize your tests with your documentation
Apr 14, 2021, 8:00 PM
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 lack of time, clear process or experience, it happened that API were modified...
Build a custom player on top of AVFoundation
Jan 13, 2021, 7:00 PM
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 overview of fundamental points to build a custom...
UIKit rendering - Tracking a layout phase
Jan 3, 2021, 7:00 PM
On iOS, the layout of a view hierarchy is expressed dynamically using the Auto Layout constraint system. Thus a view hierarchy can adapt itself to all the possible device screens sold by Apple. Auto Layout takes care to translate all the...
UIKit rendering - The run loop
Jan 3, 2021, 7:00 PM
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 does it take place?
UIKit rendering - CATransaction
Jan 3, 2021, 7:00 PM
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.
Android, from LiveData to StateFlow
Dec 6, 2020, 7:00 PM
The following article will detail how we can replace the presentation layer’s livedatas with stateFlows and some caveats we encountered along the way. On the 30th of October, kotlinx.coroutines 1.4.0 was released, promoting StateFlow to...
Video playback on iOS & tvOS
Nov 26, 2020, 7:00 PM
When developping an application on iOS and/or tvOS, video playback can be a strategic or accessory component. There are different solutions available on iOS/tvOS, each of them with pros and cons, depending on project requirements. The...
Understanding Copy on Write
Oct 29, 2020, 8:00 PM
In a previous article we saw the difference between reference and value types in Swift. Let’s look at the memory management a bit closer!
Implementing fastlane in 50 lines of code
Oct 18, 2020, 8:00 PM
Fastlane is a tool used by almost every mobile developer. The main advantages are its simplicity, the time it saves us and the fact that it’s built on top of Ruby. But we tend to take this tool for granted. Today I want to present how...
Types of types
Oct 11, 2020, 8:00 PM
Let’s talk about types and memory!
Sep 8, 2020, 8:00 PM
Dependencies are at the core of programming. In iOS, we often use Cocoapods to manage dependencies in our projects. But if we are not careful, we can add a dependency that is not free to use, and expose our company to legal issues later....
Jun 8, 2020, 8:00 PM
As Covid-19 started to spread, we tried to find a way to help as developers, with the tools at our disposal. One idea was to use out of the box Visit Monitoring service proposed by Apple to match locations with infected people. The idea at...
Approaches to Type Erasure in Swift
Jun 2, 2020, 8:00 PM
Protocols bring a lot of power and flexibility to our code. Some might say that this is the most important feature of Swift, especially since Apple described it as “Protocol oriented programming language”. But every once in a while, things...
UIAlertController with Function Builders
Mar 9, 2020, 8:00 PM
I always found the UIAlertController API too verbose. You first have to create an instance of UIAlertController, then create multiple instances of UIAlertAction and finally add the actions to the controller.
An overview of reactive programming with Android
Oct 20, 2019, 8:00 PM
The Android platform is asynchronous by nature. And so are android apps. Information is flowing asynchronously through your app, from multiple sources. The system will trigger your broadcast receivers, forward intents, and recreate your UI...
How to make the best of protocol with associated types using type erasure
May 14, 2019, 8:00 PM
Protocols with associated type, first let’s see what Apple says about them:
Why you should use TDD to build your app
Feb 7, 2019, 7:00 PM
To better code requires to be rigorous and methodical in testing. But it’s not easy to pick a test methodology. You may also ask yourself whether to write tests before or after development. TDD is a response to this questions. Discover an...
How to leverage HTTP cache in iOS
Jan 21, 2019, 7:00 PM
One of the most difficult subject in programming is caching because there is no silver bullet to the problem and each solution comes with compromises.
Augment your Ruby back end with Elixir
Dec 20, 2018, 7:00 PM
Ruby is a wonderful language to develop back ends. However concurrency is not its strength. We present here our experience with Elixir, aiming at making up for this weakness, within our specifications tool Pericles.