macOS software developer working in cybersec.
Here on Mastodon to share insights and notes from the various fields I've encountered over the years.
| GitHub | https://galarius.github.io |
macOS software developer working in cybersec.
Here on Mastodon to share insights and notes from the various fields I've encountered over the years.
| GitHub | https://galarius.github.io |
Spent some time setting up an #n8n automation to categorize the digital graveyard of my Telegram “Saved Messages”.
It pulls recent messages and, depending on the type, analyzes images, processes tweets, or reads posts. Results go into #NocoDB as cards, with filtered views for categories and tags.
Everything is self-hosted, using a custom #llamacpp build with Vulkan on an Intel Mac to run Gemma 3 12B.
Set myself a mini-marathon: build something small but useful from scratch in ~2-3 weeks and ship it to the App Store. Mostly to see if I can still push through the last annoying 10% - and how well I can estimate a new project.
Result: an app showing recycling spots across Finland 🇫🇮♻️
Had a pretty good idea what to do - and of course still got ambushed by a couple of unexpected gotchas. Nevertheless, finished on time. App Store approval on the first try 🎉
While on vacation I hacked together a macOS Console-like app that monitors XPC connections. It shows details about the initiating process and the XPC service being contacted.
Right now it includes streaming mode, search tokens, and some basic anomaly detection. Pretty niche, I know, but I’ve got some promising ideas to make it genuinely useful for security researchers and developers… if Apple approves the distribution entitlement I need to release it.
SPM + GTest
If you need to expose a C++ library with #gtest via #spm, there is a straightforward way to wrap existing tests with #xctest:
1. Add gmock as a .systemLibrary target in your Package.swift and link it to your .testTarget.
2. Create a module map and an umbrella header for gmock.
3. Create an Obj-C++ adapter that wraps GoogleTest with XCTestCase.
🚀 CMD + U
On macOS, fts supports per-thread version of chdir(), even though it's undocumented!
Set the FTS_USE_THREAD_FCHDIR environment variable, and fts will internally use pthread_fchdir_np() instead of fchdir().
This allows different threads in your process to have different current directories.
🐞 Debugging Story: Weakly Linked Frameworks
I noticed that a product with extensive XPC communication was missing some data in its UI. There were no crashes, log errors, XPC interruptions — just an unexpected behavior. The issue? A few classes from a weakly linked framework were used in a variant not meant to rely on the framework. When the framework was absent, the dynamic linker nullified the weakly linked symbols, which unfortunately were never checked for nil.
(min. example below)