Shoofler Development Blog

Welcome to the Shoofler developement blog. I talk about Shoofler, Swift, app development, and other related topics.

Apple Protects You

Apple protects you. Well, so to speak. Apple engineers’ latest trick to put obstacles in developers’ way consists of adding protection against clipboard access. The user will need to confirm that they authorize clipboard access via a system message box. There are several ways text expanders can operate, but the most common consists in using the clipboard. When a trigger is detected, the application saves the current clipboard content, places the snippet in it, synthesizes the ‘Paste’ command, then replaces the original content in the clipboard. ...

May 24, 2025

Creating a great icon

I happen to have a Master of Engineering in Computer Science with a specialization in computer graphics, but I’m definitely not an artist. So creating a good looking icon is not an easy task. I went through several iterations, starting with an ugly cauliflower icon (Shoofler is pronounced as ‘chou-fleur’, the french word for cauliflower), and even when I was happy with the design, I changed to the color many times. ...

April 23, 2025

Using Tuist

Xcode project files can be a pain to maintain and merge when working in a team. You can find several solutions to address this issue, such as Xcodegen, or Bazel. For Shoofler, I have decided to use Tuist. Unlike Xcodegen which uses YAML or JSON configuration files, Tuist uses a Swift-based Domain Specific Language to describe the project properties. Here is an excerpt of the Project.swift project description file, that configures the Shoofler app target: ...

April 20, 2025

Automation in Swift

A few months ago, I had a discussion with my teammates at work about the language and tools to use for automation. The colleague who set up the CI system did it using shell scripts, and the many command-line tools that are available. This approach works well, but the scripts are difficult to read and understand, barely debug-able, and difficult to test in an automated way. I suggested that we try to rewrite some parts using Go, the language powering the core of the application we work on, which happen to be popular among the DevOps community. Unfortunately, the return on investment was not interesting enough and this project never came to fruition. ...

April 15, 2025

Finding a name

The first thing I needed to do was to pick a name for the application. And it’s a difficult task. I decided not to keep the Beeftext name for this macOS application, because I do not want users to believe that Beeftext for Windows is still actively developed. I set a few constraints: The name should be short. The name should be fun. The name must be SEO friendly. And the winner is… I finally decided to go with the name Shoofler. ...

April 10, 2025

Welcome to the Shoofler development blog

In 2017, I started a project called Beeftext, a open-source text substitution tool for Windows. It gained some popularity. According to GitHub, Beeftext has been downloaded nearly 200'000 times. This number includes automatic updates, but it remains quite significant. As I never baked any form of telemetry or observability into the application, I do not have any other metric. At the time, I was using Alfred, and the snippet feature of the Alfred Power Pack was good enough for me on macOS. But my job was forcing me to spend a lot of time on Windows, where I could not find a free equivalent. I started Beeftext for my personal use, and decided to publish it under an open-source license. I maintained it for roughly 5 years, but in 2022, I was working nearly full time on macOS, and as Beeftext had all the features I wanted, I decided to put it on maintenance mode. ...

April 6, 2025