In lieu of a software update today – ScreenFloat v2.3.8 is taking me a bit longer than anticipated – I thought I’d share a fun 🙃 story about SwiftUI with you.

ScreenFloat offers widgets that give you quick access to different things.
Among others, you have the Capture widget which allows you to start a screen recording, capture your screen, import from your iPhone, etc.
And there’s the Recent Captures widget displays your recent shots so you can easily float them.
Or so I thought. But I’m getting ahead of myself.

The Capture widget
The Recent Captures widget

All the actions in these widgets (when a button or a shot in a widget is clicked) are powered by SwiftUI’s Link(), which opens my app with a custom URL that contains whatever information I need to perform the action the user requested.
For clicked shots, that would be floating them (such a custom URL could look like this: esssf2://widget.at?shotID=<someid>&action=float).

Now, some of these widgets are static (the capture utility widget, for example, can not be configured in any way by the user and always shows the same capture buttons), while others are dynamic (widgets that display shots can be configured to only show images, or only video recordings, for example).

Configuring the dynamic Recent Captures widget

That’s all lovely, but recently I discovered something puzzling.
While my static widgets worked just fine – each button in the Capture widget was individually clickable and did the correct thing in my app –, clicking a shot in a widget to float it would not open my app with the custom URL I specified, but with the dynamic widget’s configuration intent instead.
No matter which shot I clicked, it always did the same, wrong, thing.
(A configuration intent is what internally makes customizing widgets possible; and to make things even more confusing, ScreenFloat’s dynamic widgets are set up internally partially through a .intentdefinition file (Apple’s older way to make widgets configurable), and partially through AppIntents (Apple’s modern approach) ).
So instead of my app receiving the correct custom URL which tells it which shot to float, it receives info on how the widget is configured – information not exactly useful in this context.

So I figured it had to do with the widget’s dynamic nature – a logical assumption, given that my app received the configuration intent instead of my URL.

First, I thought perhaps the .intentdefinition file and the AppIntents somehow confused each other, so I temporarily removed the definition file, but the results were the same. Dead end. (Which is good. Otherwise I would have only been able to offer my widgets on macOS 14 “Sonoma” and later, leaving behind two earlier releases of macOS that ScreenFloat supports).

So I set out to test my assumption that the widget’s dynamic nature was at fault.
I tried yet another dynamic widget, the Folders widget.

The Folders widget

It can be configured to show all, only smart, or only “dumb” folders, and when clicked, ideally opens the clicked folder in ScreenFloat’s Shots Browser.

With a smirk on my face, confidently clicking on a folder in that widget, absolutely certain it would not result in the folder being opened in ScreenFloat’s Shots Browser, what did my tired, shocked eyes perceive?

The freaking folder opened in the freaking Shots Browser! The Link() with my custom URL worked!

 

But why!? I couldn’t make sense of it.
What was the difference between the Link() in my Recent Captures widget, and the Link() in my Folders widget?
Readers dabbling in the arts of SwiftUI might have already noticed that the first consists of Image()s, while the latter is made of Label()s. So I swiftly swapped out the Image() for a Label() to test that this was indeed the culprit, and lo and behold, the widget now worked.
A shot was finally floated correctly!

 

At this point, I was desperate. Close to tears of rage. Ready to rage-quit. Not only Xcode, but also my app’s development. My profession. Coding in general. I was done.
Perhaps Image()s in Link()s are just bugged and there’s nothing I can do about it?
The thing is, I knew it worked at some point, so I fired up my virtual machines in UTM and went back to see when it started to break.
macOS 12? Fine.
macOS 13? Fine.
macOS 14? Fine.
macOS 15? Bingo.

Something on macOS 15 and later broke my widget.

So the first thing I did was to remove all modifiers from my Image() and try again. If it still didn’t work then, I’d have to find a different way to make it work. Maybe hack my own Image() implementation together. Fun times ahead.
But I got lucky for once. Removing all modifiers from the Image() did the trick.
Now all that was left to do was to go through each modifier and see which one broke things.

“How many lines of code are there?”
“About two million…”

Ready?
.widgetAccentedRenderingMode(). It was .widgetAccentedRenderingMode() that messes with Link()s.
Only specific configurations, though: While .fullColor and .accented work fine, the other two (.desaturated and .accentedDesaturated) render the Link() defunct. Guess which ones I used.

Now why is this happening? Nobody knows. I doubt Apple knows. Or cares.
Is any of this documented? LOL.
How long has this bug been around for? Since macOS 15, so for about 2 years.

Now that I knew where the bug was, out of interest I googled it, and sure enough found others with the same issue. Not something I found before, because who’d think to google for that particular setup? Nobody, that’s who.

So, there you have it. A Link() containing an Image() with .widgetAccentedRenderingMode() set to .desaturated or .accentedDesaturated will render said Link() defunct 🤷‍♂️ .
I found two ways around this: Don’t use those two properties, or don’t embed the Image() in the Link(), but have the Link() be an .overlay() modifier of the Image(), like so:

var body: some View {
    Image(...)
        .overlay {
            Link(destination: ...) {
                Rectangle()
                    .foregroundStyle(.clear)
                    .frame(...)
            }
        }
}

The downside with the .overlay{} method is that you lose any visual click-feedback, where the clicked Image() would change color on mouse down.

The Shot floats when I click it in the widget!

A radar’s been filed (FB20805851) and is now ready to gather dust in the forgotten depths that is Apple’s Feedback Assistant, never to be looked at again, until some digital archaeologist far into the future stumbles upon it and finally marks it as “works as intended”.

I’ll go now and scream into a pillow some more.


Read more

Transloader for Mac, iPhone and iPad lets you start and manage downloads on your Macs, remotely from your iPhone, iPad, or other Macs.
Version 3.1.93 localizes the app into Simplified Chinese and fixes a few bugs along the way.

Incredibly useful! […] It’s magic!

X.Alex.D; Mac App Store

What is Transloader?

With Transloader, you can start and manage downloads on your Macs, remotely, from your other devices, like an iPhone, iPad, or another Mac.

Link and File Actions let you change Transloader’s behavior, like open links from specific domains or url schemes in different apps, or open completed downloads for further processing with other apps, Automator actions or Shortcuts.

Login required? No problem. Transloader can sync login cookies or HTTP basic auth credentials via iCloud.

And with notifications, you’re always in the know about the status of your downloads.

Love this app! […] Simple, reliable, and exactly what I need.

Celatone; Mac App Store

What’s New in Transloader v3.1.93?

  • Transloader is now localized into English, German, and Simplified Chinese
  • Fixes a few text passages
  • Fixes a bug that could cause some webpages that did not lead to downloads to not open in the browser, as per default, but to download the html webpage

👉 For the full release notes, please click here 👈

Nothing else like it.

Brian Cometa; Mac App Store

Links and Availability

Transloader for Mac is a one-time lifetime purchase at USD / GBP 9.99; EUR 10.99. The iOS app is a free download.
The app requires macOS 10.14, iOS 17.6 and visionOS 26.0 (or newer) and is currently localized into English, German and Simplified Chinese. A (free) iCloud account is required.

➡️ Website + free, 28-day trial + Direct Purchase
🖥️ Mac App Store (one-time lifetime purchase)
📱iOS App Store (free)
😍 Eternal Storms Software Productivity Bundle (get YoinkScreenFloat, Transloader and DeskMat at ~20% off)
🔁 Setapp (also has my apps Yoink and ScreenFloat, plus over 250 awesome apps with one subscription, 7-day trial)
Transloader is currently localized into English and German

📖 Blog Series: Get to Know Transloader 3

💡 Usage Tips

💌 Contact & Connect

INDISPENSABLE !

vk; Setapp

If you have any feedback or questions, please don’t hesitate to use the contact link above, or below : )
Have a great day.

Read more

Tameno for Apple Watch, iPhone, iPad, Mac and Apple TV helps you stretch, brush your teeth, do exercises, water your plants, meditate, box-breathe, do yoga, and so much more, with auto-repeating timers. Set an interval, and it’ll inform you every time it elapses.
Version 1.3 adds Traditional Chinese localization and improves adds handy tips.

This app is perfect for timing my tooth brushing, slow reps in the gym etc!

J4R3D2013, App Store

What is Tameno?

I have an electric toothbrush. It has a built-in 30sec timer, so I can brush each quadrant of my teeth for the same amount of time. But what about each side of each quadrant? I needed a 10-second self-repeating interval that would tell me to move on. That’s where the idea for Tameno came from.
Now, I just start Tameno at a 10 second interval, and until I’m done brushing, it’ll let me know that 10 seconds have passed continuously. Perfect. Now I can also do my stretches without having to count in my head, or water my hedge-plants for the same amount of time. Bliss!
With widgets on your lock screen, home screen or in Control Center, and custom shortcuts in the Shortcuts app, your favorite intervals are always just a tap away!

Excellent tool!

Sevikha, App Store

What’s New in Tameno v1.3

  • Adds tips to help you get the most out of the app
  • Adds Traditional Chinese localization

👉 For the full release notes, please click here 👈

I’ve been looking for exactly this […] Genius!

mosch123, App Store

Links and Availability

Tameno is a one-time lifetime universal app purchase at USD/EUR/GBP 3.99. That means you purchase it once (on the store of your choice), and are then free to use it on your Apple Watches, and iPhones, and iPads, and Macs, and Apple TVs.
The app requires macOS 13, iOS 16, watchOS 9.4 and tvOS 16 or newer and is currently localized into English, German, French, Italian, Spanish, Portuguese (Brazil), Dutch, Japanese, Korean, Simplified and Traditional Chinese, Russian and Hindi.

➡️ Website

🖥️ Mac App Store
📱 iPhone App Store / iPad App Store
⌚️ watchOS App Store
📺 tvOS App Store

💡 Get to Know Tameno (User Guide)

💌 Contact & Connect

*The* app for the gym. Perfect for resting timers, and much faster than setting a timer.

Lexada9, App Store

If you have any feedback or questions, please don’t hesitate to use the contact link above, or below : )
Have a great day, and thank you for stopping by.

 

Read more

Yoink for Mac drastically improves and simplifies drag and drop on the Mac.
Version 3.7.5 now makes it ridiculously easy to pull in original RAW files, burst photos, Live photo videos, and more from Photos app photos and videos.

As important to me as the CMD key

john.H, Mac App Store

What is Yoink?

Yoink is a temporary place for your file drags. Whether you want to collect images from a website, text snippets from a document, or move files around in Finder, Yoink offers a “shelf” you can place them in so you can move freely to the files’ actual destination. It can hold virtually anything you can drag and appears whenever you start to drag something. It’s also highly customizable to fit your needs. It also comes with a clipboard history, easily accessible from widgets, or the “shelf” itself.

Absolute essential

Nonscents01, Mac App Store

What’s New in Yoink v3.7.5?

 
  • Effortlessly load original RAW files, images from bursts, videos from live photos and unedited originals for photos you dragged to Yoink from the Photos app (macOS 13+ required)
  • When dragging photos and videos from Photos to Yoink and then onwards to other apps (for instance, iMovie or Final Cut Pro), the original cinematic, slow-mo and time-lapse properties are now preserved, allowing full editing, instead of being handed just the final render from Photos (macOS 13+ required)
  • A couple of bug fixes

👉 For the full release notes, please click here 👈

Why This Matters

Photos can make it quite a bit frustrating to get to original files of your photos and videos, with multiple dialogs involved.
With these new features in Yoink, loading in RAW files, unedited originals, all images in a burst, and live photo videos is just a right-click away.
For photographers, video editors, and content creators who frequently move assets out of Photos, this can significantly reduce the number of steps required, and saves a bunch of time.

Probably the first app I install on any Mac I use.

Ernie S., Setapp

Links and Availability

Yoink is a one-time-lifetime purchase at USD 8.99 / EUR 9.99 / GBP 8.99, or as part of a Setapp subscription.
It requires macOS 10.13 and is currently localized into English, German, French, Italian, Portuguese, Japanese, Simplified Chinese and Korean.
A free, 28-day trial is available for download on the website; if your trial has ended, this update will give you some more time to evaluate my app.

Wouldn’t be without Yoink

Jolly Good Creative, Mac App Store

➡️ Website + free, 28-day trial + Direct Purchase
🖥️ Mac App Store
😍 The Eternal Storms Software Productivity Bundle on the Mac App Store (get Yoink, ScreenFloat, Transloader and DeskMat at ~20% off)
🔁 Setapp (also has my apps ScreenFloat and Transloader, plus over 250 awesome apps with one subscription, 7-day trial)

💡 Usage Tips

📱 Yoink is also available as a separate purchase for iPhone and iPad

💌 Contact & Connect

Makes your life so much easier!

Zakazastar, Mac App Store

If you have any feedback or questions, please don’t hesitate to use the contact link above, or below : )
Have a great day, and thank you for stopping by.

Favorite app – no joke

mrjonathanallan, Mac App Store

Read more