Deleting Completed iCloud Reminders

Shortcuts no longer supports shortcut file imports and links no longer function. Any links to shortcuts in this post have been updated to use iCloud links.

Over at Six Colors, Dan Moren has some valid criticism about the lack of removing completed tasks from Reminders on the Mac and iOS, a feature that is available at

Last week on Clockwise, we discussed how we use Apple’s Reminders app, and I lamented that there was no option to have old, checked-off reminders automatically discarded. If I look at my Shopping List, for example, there are more than 1100 completed reminders that I really don’t need to keep around. But there’s no easy way to get rid of them, except to go through and delete them one-by-one. Which I’m not going to do.

Listener Stephen pointed out, however, that there is an option to remove all your old completed reminders—it’s just not in an obvious place, because it’s not available in the macOS or iOS Reminders app.

That’s right, it’s on iCloud.

Inconsistency between iCloud and its Mac and iOS apps isn’t anything new, but it’s surprising that such a feature still doesn’t currently exist.

On the Mac front, Dr. Drang has offered up an AppleScript solution to accomplish this. Using Keyboard Maestro, it can also be scheduled to run automatically.

For those of us who mostly use iOS, removing completed reminders is easily done with Workflow. You can create a simple workflow that contains just two actions: Find Reminders Where and Remove Reminders.

The first action should be customized so it is only looking for completed reminders. You can also add another filter to restrict the results by different attributes, or even by list. The second action deletes all the reminders that meet the previous action’s criteria. Before doing so, it displays a warning that contains the total number of reminders it’s going to remove.

Unlike Dr. Drang’s Mac solution, there isn’t a way of scheduling scripts or workflows to automatically run in iOS. A workaround is to use the Share Sheet of the workflow to add it to Reminders, editing the details to make it a recurring task. This creates a reminder with a link directly to the workflow that you can tap. Whenever the reminder is due, you can tap the link icon to open Workflow directly on the workflow, ready to be run.



The Talk Show: Apple VP Lisa Jackson

John Gruber had a great interview on The Talk Show with Apple VP Lisa Jackson about Apple’s environmental work:

Special guest Lisa Jackson — Apple’s vice president of Environment, Policy, and Social Initiatives — joins the show for an Earth Day discussion of the state of Apple’s environmental efforts: climate change, renewable energy, responsible packaging, and Apple’s new goal to create a “closed-loop supply chain”, wherein the company’s products would be manufactured entirely from recycled materials.

The whole interview provides a remarkable insight into just how passionate Apple is about their environmental impact on the world. I was particularly fascinated by the story of how the head of Apple’s packaging department discussed the idea with Lisa of buying a forest so they could have a sustainable, protected paper supply.


AirPods and Fitness: It Doesn’t Always Work Out

I’ve had my AirPods for a few months now and I consider them one of my favorite tech purchases of the last decade. And until recently, they’ve also been a great set of workout headphones. Unfortunately, I’ve had to switch to something more robust for my fitness needs as they just aren’t cut out for it.

I work out three or four times a week, and I’m generally very sweaty by the end of each session. I wipe down my Apple Watch and AirPods immediately to keep them in the best condition possible. I’ll also do this during a workout if I’m the need arises. I spent many years working on the Genius Bar and have seen my fair share of iPods and iPhones that suffered liquid damage from perspiration, so I’m meticulous about keeping my devices dry.

Unfortunately, it wasn’t enough. Several weeks ago, I noticed that my right AirPod had stopped charging. I took a closer look and discovered the telltale sign of liquid damage: green corrosion at the base of the AirPod and a scorch mark where it had shorted out. This was almost certainly due to perspiration. Thankfully, Apple replaced the AirPod free of charge, even though liquid damage isn’t covered under warranty.

While my AirPods are functioning normally, the left AirPod does have what I suspect is a very small amount of corrosion in the same place, or I’m being paranoid and it’s just slight discoloration or dirt. Either way, I’m no longer using them for workouts.

I did briefly consider a return to my old wireless headphones, but Apple’s W1 chip has completely spoilt me1, in much the same way that flying first-class makes you never want to fly coach again. I can’t, I won’t. Instead, I purchased what are the only set of W1-equipped fitness headphones currently available: the Beats Powerbeats3.

Beats Powerbeats3

At $200, they aren’t cheap, though I was able to pick up a set at Best Buy for just $130. All things considered, I’m willing to pay a premium for decent wireless headphones that work, rather than suffer through the agony of buying several sets of cheaper, crappier headphones.

Pairing the Powerbeats3 is as joyous as the AirPods, and the connection just as reliable, thanks to the magic of the W1 chip. Despite having that renowned bass-heavy Beats sound, the quality and volume is still vastly superior to AirPods.

As they’re specifically designed for fitness, they’re sweat and water resistant, fit better, and are surprisingly comfortable. The Powerbeats3 stay firmly in place and the ear hooks stop them from falling out. I would always worry that one of my AirPods might fall out, especially if I started to sweat or run along the waterfront, so I’d frequently adjust them during a workout, which often resulted in an accidental double-tap that paused playback. While I do miss the miniature size of the AirPods, the Powerbeats3 are neither bulky nor clumsy.

Finally, I hadn’t realized how much I missed having volume and playback controls until I stopped using the AirPods. Using the Apple Watch to change volume or music was never really convenient during a workout.

There are many articles and comments about how AirPods can survive tough workouts, marathon running, and even a trip through the washing machine. While these are impressive examples of what the AirPods can put up with, they aren’t long-term tests about repeated use under those conditions. Liquid damage of any kind, like most Apple products, is not covered under warranty (though Apple is pretty lenient nowadays). Anyone who has had experience with liquid-damaged tech can tell you: it’s not a question of if it stops working, but when.

If you’re using your AirPods for working out, keep them dry and clean. If, like me, you’re prone to perspiration and/or have intense workout sessions, you my want to consider an alternative set of headphones, particularly the Powerbeats3, for fitness activities.

  1. I’ve tried other wireless headphones with my Apple Watch, all of which were far too unreliable. If I wanted to listen to music during a workout, I’d have to take my iPhone as well. 


Blogging and Web Development With an iPad

I’ve been catching up with Matt Gemmell’s series of articles about his experiences of going iPad-only. Like Matt, I also use an iPad to manage a site that uses Jekyll, a popular Ruby static site generator. My approach is somewhat different, though the outcome is the same; I can fully update, develop, and maintain my website from the comfort of my iPad.

Continuous deployment with Netlify and GitLab

This site is hosted with Netlify, a service that specializes in static site generators. The beauty of Netlify is that there’s no server to maintain, no software to install, and no files to upload. As long as you’re using a Git repository (that’s hosted with a supported provider) and a supported static site generator, Netlify keeps your site up-to-date automatically.

Netlify uses continuous deployment to monitor the master branch of my site’s repository, which I host with GitLab. Whenever I commit and push changes (e.g., publish a new blog post), Netlify rebuilds the site with Jekyll and deploys it automatically.

Using Git on iOS

I interact with my Git repositories on my iPad using Working Copy, one of my favorite iOS apps. It provides a complete Git experience and allows me to work on my site and commit any changes I make. After writing a new blog post and saving it to the repository, I publish it by committing the changes and pushing them to GitLab.

Working Copy

Publishing new posts

Most of my blog posts are written using 1Writer, after which they’re saved to the repository using Workflow. If there are any images within a post, I first upload them to Amazon S3 using Transmit and update the image links1. Once I’m ready to publish, I use this workflow to complete the process, which performing the following steps:

  1. Gets the name of the text file passed to Workflow (this is used as the post’s title)
  2. Generates a correctly-formatted URL slug using the title, replacing spaces and special characters with dashes, and presents it in an input field for optional editing
  3. Gets the current date and time to use as the published date for the post
  4. Creates the necessary front matter for Jekyll
  5. Creates a text file, formatted for Jekyll, with the appropriate filename

The result of the workflow is a Jekyll-formatted text file for the blog post. For instance, a blog post with the filename Lorem Ipsum.txt is converted to 2017-04-10-lorem-ipsum.txt and contains:

---title: "Lorem Ipsum"date: 2017-04-10 12:20---Lorem ipsum dolor...

I save this to the _posts directory of the repository in Working Copy, then commit and push the changes. Netlify automatically detects the changes and rebuilds the site.

Previewing changes

For convenience, I tend to just work on the master branch when creating new blog posts. If I were making more substantial changes, or I want to preview the blog post on the site but not actually publish it, I create a new branch in Working Copy and work from that.

Netlify includes a really useful feature, available on Pro / Open Source plans, that auto-builds any remote branch with a temporary URL. I can then review a change or blog post looks on the site without having to publish it first. This is also useful to share draft posts without needing to publish them first. Once I’m happy with the results, I merge the branch into master.

Netlify's ability to create temporary URLs for branches is awesome.

Site changes and development

Jekyll includes a built-in development server to run locally while working on changes to the site’s structure, templates, or style. Since it isn’t possible to run Jekyll locally on iOS, I make use of a $5/month Ubuntu 16.04 instance, hosted at Digital Ocean, that I remotely access and work from (a server that was set up from my iPad). It has a standard (though locked down) install of Ubuntu 16.04, with Git and Jekyll installed. This is just a testing server I like to have around. It’s not hosting anything, nor is it doing anything important.

Using Coda, I remotely log in using SSH, run git pull so the repository is up to date, then start an instance of Jekyll using:

bundle exec jekyll server --host=MY_SERVER_IP_ADDRESS --limit_posts 10

This allows me to access the site at http://server-ip-address:4000 and work on it from my iPad. I include the limit_posts switch with a low number to reduce the amount of time it takes for Jekyll to regenerate when changes are made. I use Coda to edit the remote files on the server, previewing the changes as I save them–just as I would have done on my Mac.

Coda 2

Once I’m done, I commit the changes on the server and push them to GitLab. Again, Netlify picks up the changes and then rebuilds the site automatically. If I’m working from another branch, I’ll merge the changes to master once everything looks good.

Not only does this entire process allow me to completely manage my site from my iPad, it’s easily replicated on any of my other iOS devices. All of the apps I’ve mentioned are universal, so I can just as easily perform updates or publish new posts from my iPhone. Workflow and Coda are kept in sync using their respective sync services, and my Git repositories are constantly up-to-date via GitLab.

Making changes to my site was one of the only reasons I had for returning to my Mac. Not only is this no longer necessary, but I find using my iPad for this task quicker, easier to maintain, and just a far more enjoyable experience.

  1. There’s no reason images can’t be added to the repository. I’ve just been hosting images on S3 for a while now so it’s a habit I’ve stuck to. I plan to eventually change this so everything is hosted within the repository.