Engineering Blog

Gertrude Engineering Blog

Building a re-usable, typesafe radio or select component shows why we might need a generic React component. This tutorial explains how you can build your own well-typed and ergonomic generic components in typescript.

I've been writing a lot of heavily generic Swift code lately, and figured out what seems (to me at least) to be a really useful quirk/edge-case having to do with how Swift selects between a protocol extension static method, and a static method implemented on a conforming type.

If you want to list out all of the currently running applications in a MacOS app, you can call NSWorkspace.shared.runningApplications, and filter down the ones you're interested in using the apps .activationPolicy.

If you need your app to have access to global events (like keystrokes) which require that the app is granted authorization to control your computer in the Security and Privacy pane of system extensions, you can prompt the user for this privilege with the below code

When building a Content Filter System extension for Mac OS, the instance of NEFilterFlow you receive in your NEFilterDataProvider class doesn't have much information (apart from the not-to-be-relied-upon flow.description string). Deriving useful data from these objects is tricky, and poorly documented.

I needed to challenge for an admin user/password to protect an area of a MacOS app I'm developing. After much pain and sorrow navigating the incredibly lacking and confusing Apple documentation, I got the basic challenge working.


The Gertrude mac app helps you protect your kids online with strict internet filtering that you can manage from your own computer or phone, plus remote monitoring of screenshots and keylogging. $5/mo, with a 60 day free trial.

Start free trial →