macOS

Yesterday, I was working on Transloader v3.0. In particular, on its push notifications and making sure everything syncs properly.
Today, I wanted to continue working on this, but found myself unable to. My Mac suddenly didn’t receive CloudKit push notifications anymore.
Even worse, neither of the delegate methods

- (void)application:(NSApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

and

- (void)application:(NSApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

weren’t called anymore – without any code changes. Something was wrong.

But here we are, a couple of hours later, and everything’s working again. Finally.
So, to save you some time should this happen to you, here’s what I did:

Restart

I restarted my Mac – the obvious solution. You might think. Only that it didn’t work, the problem persisted. But it’s still the first thing I’ll try if this returns.

Delete Containers, Group Containers, and CloudKit Caches

In Finder, delete

/Users/yourname/Library/Containers/yourAppContainerFolder/
/Users/yourname/Library/Group Containers/yourGroupID.yourAppGroupContainerFolder/
/Users/yourname/Library/Caches/CloudKit/yourAppID
/Users/yourname/Library/Caches/CloudKit/CloudKitMetadata* (*all files that begin with that filename)
/Users/yourname/Library/Caches/CloudKit/CloudKitOperationInfo* (*all files that begin with that filename)

Now launch Activity Monitor.app and force quit the following processes:

cfprefsd
apsd
notifyd
remoted

Now, I’m not sure you need to force-quit each and every one of those, but I wanted to relaunch any process that remotely looked like it had to do with remote/push notifications.

At this point, I restarted Transloader through Xcode, and lo and behold, it worked again.
On my MacBook Pro, where the same problem occurred simultaneously, I took the same steps. And it *didn’t* work. A restart was required, so your mileage – like mine – may vary.

Additional Info

There’s also this handy technical note from Apple, which can help debugging push notifications on both macOS and iOS.

Read more

For Transloader’s upcoming version 3.0, I needed an NSMenuItem that not only showed a title, but also a subtitle, along with an optional image.

Because it took a bit of work and “reverse-engineering” (the click-on-an-item-selection-animation’s timing, in particular), I figured someone else might benefit from this.

Where to get it / Sample Project

It’s all pretty straight forward, and best shown / explained as an Xcode project, which you can download on Github.
This is basically all you need to do:

Screenshot the sample project's source code

That’s it!

Caveats

There are some things this implementation can not do, which the default NSMenuItem can:

  • There is no type select
  • The arrow keys can’t be used to go through the items
  • You can’t activate items with the space or enter keys

Basically, keyboard interaction is unavailable.

I do hope it’s useful to you anyways.
If you’re using this, I’d love to hear from you! 😊

Read more

Yoink for Mac Usage Tip #14

The following explains how to make Yoink automatically pick up any new file added to a specified folder.
For more Usage Tips like this, click here.

 

Yoink 256

If you’d like Yoink for Mac to automatically pick up any new files you download or save into a specific folder, here’s how it’s done.

Automator Folder Action

Automator, an app that comes with every Mac, allows you to create Folder Actions, which are small programs that run every time files and folders are added to a folder you specify.

I’ve prepared such a Folder Action for you: Download (direct download, ~42 KB)

Installation
  • Download the action above, then unzip and double-click it. It will prompt you with this:
Screenshot of Automator Installer  13 10 2020 14 39 16

Choose the folder you’d like to attach this action to and click on Install. The action will then be moved to /Users/yourname/Library/Workflows/Applications/Folder Actions/Yoink Save Folder.workflow
If you ever wish to uninstall it, just delete that file.

  • With the Folder Action installed, whenever you download or save a file into that folder, it will be added to Yoink, like you can see in this video:
  • To create multiple of these, all you need to do is unzip again, change the filename of the Automator action, double-click it and follow the instructions above
Details

If you’re curious about what the Folder Action actually does, it’s this:

Screenshot of Automator  13 10 2020 14 35 23

The action runs this shell script

open -a Yoink “$@" 

any time new files or folders are added to the specified folder, which instructs macOS to open the specified file with Yoink (which ultimately results in the file being added to Yoink’s list).

Advanced

You can edit the shell script anytime (by right-clicking onto the Automator file and selecting Automator):

Screenshot of Finder  13 10 2020 14 54 50

which would enable you, for example, to tell the action only to add files of a certain file type, or with a certain file extension.
The following script sample shows how to make the Folder Action only add PDF files:

for str in "$@"
{
filename=${str##*/}
pathExt=${filename##*.}

if [ $pathExt == 'pdf' ]
then
open -a Yoink "$str"
fi
}

Enjoy 🙂

Read more