Post a Text Shot to Twitter with Workflow

You’ve no doubt seen many Twitter users post "text shots" - a text clipping in the form of an image as a way to provide more content than the 140 character limit allows. The process of doing this can be pretty labourious, though a few apps now exist, such as OneShot, that make this process easier.


As an alternative to using a separate app, we can use a Workflow Action extension to post a text shot to Twitter, along with the title and URL of the page it refers to. The tweet I posted and embedded above was created using this Workflow.

To use the workflow, first take a screenshot of the portion of the page that you want to post as an excerpt and then run the Action extension. The workflow uses this screenshot, giving you the option to crop it specifically to the text you want to include. The content of a tweet will be prefilled with the image, the title of the page you're viewing and the URL, which you can then edit with anything else you'd like to include.

Workflow in Action


Giffed: Create a Searchable Web Page of Your Animated GIFs in OS X

As most of my work colleagues will attest to, I'm a prolific user of animated GIFs. I have a collection of them in a folder on my Mac, located within my Dropbox Public folder. By storing them here, I can easily copy the URL of a specific GIF and include it in messages, tweets and Slack posts.

Each time I save a new animated GIF to my collection, I add some Spotlight comments (such as simpsons or facepalm) that I can then search for when looking for that perfect response. If I'm on the move, however, accessing my GIF collection is somewhat trickier. I can't search Spotlight comments from my iPhone and the Dropbox app is a lousy image viewer, especially if you're dealing with a few hundred (or thousand, in my case) animated GIFs. While there are apps, such as GIFWrapped, which are purpose-built to browse through a GIF collection, I still don't have any way to search using metadata I've added on my Mac.

To solve this, I created Giffed, a Finder service for OS X. Giffed takes a folder of animated GIFs and generates a responsive web page containing thumbnails that link to their full-size images. Giffed also indexes any Spotlight comments attached to those GIFs and makes them searchable from within the page. Since my GIF collection is stored within my Dropbox Public folder, I can access this from any other device, such as my iPhone.

Check out the Giffed page for more information, screenshots and to download.


Using TextExpander to Paste Without Style

Craig Hockenberry over at explains how to set Paste and Match Style as the default option for ⌘V by setting a keyboard shortcut, overriding the default behaviour when pasting from the clipboard.

It's a great solution and keeps the familiar keyboard shortcut, though it does have one caveat:

After you’ve made this change, you might find that the keyboard shortcut sometimes doesn’t work. The one that gets me the most is when I try to ⌘V in the “To:” field while composing a message in Mail. When you try to use the shortcut, you’ll hear a beep because the control doesn’t accept styled text and Paste and Match Style is disabled. When this happens, it’s easy enough to right-click and use the context menu or select Paste from the menu bar.

I'd used this keyboard shortcut for a while but this issue cropped up far too often for it not to be an inconvenience. Instead, I have a TextExpander snippet that just contains %clipboard, with the abbreviation `v.

I'm always using this snippet whenever I'm pasting text but, for anything else, I revert back to ⌘V. It's not a better solution than setting a keyboard shortcut, but it may be a more useful one if you're mostly handling text in the clipboard. 

Generate iTunes Affiliate Links with Workflow

Update 2015-26-04: This workflow can now also generate HTML and Markdown-formatted links along with the name of the item.

Blink is a new iOS app that provides a great way to generate iTunes affiliate links. The app has a great feature set (such as Markdown formatting and in-app search results), though one feature I particularly like is that you can call Blink from the Action sheet within the iTunes or App Store and create an affiliate link directly.

While reading a review of Blink over at Macdrifter, Gabe Weatherhead had this little piece of advice:

Let me start by saying that even if you don't have a blog, you should create an affiliate account and generate affiliate links. You'll make some money back on your purchases you make with it.

This got me thinking about how useful it would be to have a workflow that not only creates an iTunes affiliate link within the iTunes or App Store, but include an option to immediately open that URL as well. With Workflow, I can.

Here’s a workflow I created that can be called from the Action sheet within the iTunes or App Store. An affiliate link is generated which will be copied to the clipboard in your choice of plain text, Markdown or HTML link (along with the app name), or you can simply open the link in the appropriate store.

Whenever I’m about to buy an app, I run the workflow before purchasing it. The Store still displays the item I was looking at, and the page is simply refreshed to use my affiliate code.

Make sure to edit the workflow and update the Text action with your own affiliate tracking code.

If you use iTunes affiliate links on a regular basis, I'd highly recommend checking out Blink - I have and it's awesome.

Workflow in Action


Subscribe to a Podcast Using its iTunes Store Link in Any Third-Party App with Workflow

I’m an avid listener of podcasts and frequently use the Podcast app on iOS to look through the iTunes podcast directory. I dont, however, use the Podcasts app to listen to podcasts (I use Castro), which makes subscribing to a podcast I’ve found within the directory a bit of a chore.

The iTunes Store doesn’t surface a podcast’s feed, only providing an iTunes link (the same type of link used to link to music, apps or movies) when sharing from within the app. This means that the link will only work within iTunes or the Podcasts app, and it can’t be shared to another podcast app.


Since I can’t use the iTunes link to subscribe to a podcast in any other app, I have to do either of the following:

  1. Open Castro.
  2. Tap the + icon to add a new podcast.
  3. Search for the name of the podcast.
  4. Select the right podcast and subscribe.


  1. Visit the podcast’s website in Safari.
  2. Find the link to its RSS feed.
  3. Tap it, forgetting that Apple’s own Podcasts app handles RSS links.
  4. Switch back to Safari.
  5. Copy the link to the RSS feed.
  6. Open Castro.
  7. Tap the + icon to add a new podcast, at which point the URL in the clipboard is autofilled and I can then subscribe.

Ok, it’s not a long process, but it sure as hell is inconvenient.

Using Workflow for easier podcast subscriptions

A favourite of mine, Workflow is a fantastic automation tool that takes advantage of many features, such as extensions in iOS 8. Workflows can be run directly from the share sheet as an Action, providing a near-limitless number of possibilities.

After using Workflow for a few months, and reading what others have been able to do with it, I was determined to find a way to avoid either of the above processes when subscribing to a podcast, and I began to look for any way to somehow find the direct feed of a podcast from it’s iTunes link.

I stumbled upon this post on Super User, which explains how to decode an iTunes podcast link into a JSON file, surfacing all of its information - and the feed URL.

Using this information, I’ve created a workflow that can be called from the share sheet in iOS that will query the iTunes link, find the feed’s actual URL and pass it along to a third-party app of your choice, or just copy to the clipboard. You’re now able to browse the Podcast directory, or open any iTunes link to a podcast, and subscribe to any podcast using the app of your choice. No more app switching and searching for podcasts.

A quick rundown of what the workflow does to accomplish this:

  1. A regular expression is used to find the podcast’s ID number from the URL, storing it as the variable PodcastID.
  2. Gets the contents of the URL used to find more information about a feed, using PodcastID.
  3. Another regular expression is used to identify the feedUrl value, which gives us the feed’s direct URL and is saved as the variable PodcastURL.
  4. A menu is created with the option to copy PodcastURL to the clipboard, or open it in a number of third-party apps.
  5. An alert is displayed if the URL is copied to the clipboard.
  6. To open the feed in either Castro or Instacast, a regular expression is used to find and replace “http” or “https” with “castro” or “podcast”. For Overcast, Workflow includes a built-in action for Overcast which is used.

Update: I've updated the workflow to handle https links a little better for Castro. You can download the updated workflow from the link above.

Workflow in Action

Copy to Clipboard

Add to Castro

Add to Overcast


Apple Products TextExpander Snippet Collection

About 18 months ago, I created a small set of snippets for TextExpander to autocorrect certain Apple product names, correcting the case, spelling or naming convention. Since then, this collection has grown to include a wide range of commonly misspelt or incorrect use of letter case in Apple product names.

Letter Case Correction

These snippets automatically fix the letter case for most Apple products, wherever possible. For example, if you type any variant of iPhone 5s, such as iphone 5, iPhone 5S or Iphone 5s, TextExpander will correct it Apple’s preferred styling.

Snippets are available for the following product lines:

  • iPod
  • iPad
  • iPhone
  • iPad
  • MacBooks
  • iMac
  • OS X
  • Apple TV

Product Builders

There are some snippets for the following products that you can use to specify exact models:

  • iPhone
  • iPad
  • iMac
  • MacBook
  • OS X

These snippets include the different letter case options, as well as names if required.

OS X snippet includes all previous names and optional "Mac" fill-in for older versions. 

OS X snippet includes all previous names and optional "Mac" fill-in for older versions. 

MacBook product builder includes optional fill-in for retina display. 

MacBook product builder includes optional fill-in for retina display. 


Visit for download and installation information.


I’ve made this collection of snippets available on GitHub for anyone to contribute to, so if you have any additions or modifications you’d like to make, and are proficient with Git, fork the repo and submit a pull request.

If you’re not familiar with how Git works, you can make suggestions or report a problem by creating an issue on GitHub.

Country Names and ISO Code Snippets for TextExpander

I regularly need to include the name of a country in what I’m writing at work, so I find myself having to check the spelling, or a country’s official name, quite a lot. As I use TextExpander at work, I created a couple of snippets to make this process much simpler.

Country Names List

This is a simple popup menu snippet that includes the names and official spelling of all countries, provinces and principalities according to the United Nations Code for Trade and Transport Locations (UN/LOCODE) list.


Rather than worry about spelling a country’s name incorrectly, or using the wrong naming convention, I can just use a keyword to bring up the snippet and select the appropriate country from the list.

ISO 3166 Country Code Selector

This next snippet is a shell script that you select the name of a country from, just like above, but instead of filling in the country’s name - it populates it with the country’s ISO 3166 code.


Why is this useful? As an example, Stripe’s Global page is set up in such a way that, if you include a country’s ISO 3166 code as an anchor link (such as for Jordan), the country field in the “Notify me” signup form is automatically set.

Using a modified version of this snippet, I can automatically create a tailored link to the Global page whenever I'm responding to someone who isn’t able to use Stripe yet. Being able to send them to the Global page and have it filled in with the correct country already is a nice touch.

These snippets are available to download on GitHub. To include them in your own collection, clone or download the repository as a ZIP, and double-click the .textexpander file.

Stripe Support Videos

I started a small project at Stripe over the holiday period to create some short videos that would help users better understand how to use certain features of, or change settings within, the dashboard.

As more people start using Stripe, especially with third-party platforms that are built using Stripe Connect, being able to show our users how to do something, like how to download payment reports, can be much more informative than written instructions alone.

The idea was to create an increasing number of videos the we could send to users who had got in touch. As well as this, we’ve now been adding them to Stripe’s support site, making them available to anyone viewing a relevant support topic for which a video exists. You can find some examples of the new videos at:

I used ScreenFlow for screen recording in both OS X and iOS, as well as the entire editing process. I'm amazed by just how versatile ScreenFlow can be, which makes me regret not using it sooner1.

I’ll be continually expanding Stripe’s library of videos that our users can watch, at any time, which will cover many more topics and features.

  1. When I wrote for Tuts+, I’d use iMovie to edit my screencasts, which was like pulling teeth.


Up until the mid-part of 2014, I had two websites I'd try and regularly write for: The Instructional and my tech-related blog, Sparsebundle. As I spend more of my time focused on other things in life, I felt somewhat guilty that I wasn't updating either site as often as I'd want to, and I no longer wanted that commitment. 

I decided to digitally downsize and get rid of what had become something of a burden to me. I've handed over the running of The Instructional to Sam Berson, someone who I know will take the site much further than I have the time for.  I also shut down Sparsebundle, rather than continue to write there, simply because I wanted a fresh start. Continuing that site would seem odd to me because I've become much less Apple-centric and it was always a site predominantly about Apple.

As I don't want to be writing about things I've found myself less interested in, nor on any self-imposed frequent basis, I've now moved (back) here and am starting anew.