Workflow Updated for iOS 11 and the iPhone X

Anybody who knows me knows that I love Workflow for iOS. I followed its development prior to its initial launch and, about a week after it launched, I began helping them with customer support. A few months later I would be hired on full time and have the privilege of working with the wonderful Workflow team for two years. Since being acquired by Apple in March 2017, Workflow updates seem less frequent. I’m still optimistic that this is for a good reason, yet to be revealed. Fortunately, the recent 1.7.7 update may help those whose faith had become shaky in recent months.

With 1.7.7, Workflow is updated to support the iPhone X, as well as drag and drop on iOS 11. I mentioned on Twitter a few weeks ago that I would love an app similar to the shelf app concept, except rather than just storing data and providing it in multiple available data types, it would intelligently run actions on the data you drop into it, based on which action you drop it on. Well, there are plenty of shelf apps — including my favorite so far, Gladys — but with the latest update, Workflow meets the needs I was discussing before. Now you can drag content and drop it into a workflow in the Workflow app, and it will run that workflow using the dropped content as input.

This is something I’ve been hoping to see since iOS 11 launched and it makes sense that Workflow would be the app for this. Now you can drop an image into a workflow and have it uploaded to Dropbox, or drag a link from Safari into a workflow to share it with predefined recipients and text.

To drag and drop content as input, simply drop the item on the Run Workflow button (the one that looks like a play button) — that entire rectangular section is a drop zone and will become highlighted to indicate this when content is dragged over it. From the main workflow view, you can hover over a workflow with dragged content for a second and the workflow will open, allowing you to drop the item(s) inside the workflow to run it.

I made a quick test workflow after updating, which accepts a URL for an article and generates markdown formatted text in the format:

# Title
By: Author on Publish Date
> Excerpt
**From:** URL

I can drag a link from the address bar in Safari, and drop it on the Run button at the top of the workflow. This will take that URL as input and run it through the Get Article from Webpage action, and then extract all the desired details into a single Text action using Workflow’s powerful and efficient magic variables system.

I hope to see continued development and, as I’ve mentioned multiple times here and elsewhere, I remain optimistic about the future of Workflow. I’d like to see better drag and drop support for reordering workflows in the main view (something that is and always has been very buggy for me) as well as in the Settings for Watch and Today Widget workflows. The custom drag and drop implementation used for building workflows and moving actions has always been good to me, and I don’t know if it could be improved by adopting the new standard from Apple (or perhaps they have in this version?). There’s always room for improvement and I am confident we will see more from them over the next year but, for now at least, I’m happy to see the development continue.

In addition to drag and drop and iPhone X support, 1.7.7 also brings support for the new image formats of iOS 11, some new health data types, new iOS 11 files support such as multiple files with the Get Files action, and some other improvements — much welcome in its first iOS 11 update. You can view the entire list of features and fixes here.

If you’re not using Workflow already, check it out. The app is free since it was acquired so you have nothing to lose but time (which you just might gain back with Workflow). Be sure to check out the official documentation, r/workflow on Reddit, and the in-app gallery for help, examples, and inspiration.

Using Workflow to get map images of locations

We just got back from vacation. By just I mean last weekend, but I may still be in denial that it’s over. I haven’t had a lot of time since, though, to write much, so I am working on that. In the meantime, I thought I’d just share a simple little workflow I sometimes find useful for saving locations.

There are plenty of ways to share your location with others these days, be it through the recently added features in Google Maps, the built-in options in Apple Messages, or some other service such as Glympse. There are also plenty of ways to save locations, using apps like Swarm (Foursquare) or, one of my favorites, Rego (more on that in the future, probably). Though not created specifically for saving locations, Day One is also a great app here, with its quick and easy Check-in feature, and ability to add location to a journal entry’s metadata. Usually, if I am saving a location, it is going to be by taking the location data from a photo using Rego, or creating a Day One journal entry. Sometimes, however, I want more than just a location’s coordinates, or a link to open it in Maps. Sometimes, I want to have a map image of the location.

While I could certainly take a screenshot in whatever map app I happen to be using, that requires cropping and potentially more. I want something I can access easily, tap, and get a map image of my current location, without having to tell it anything. Luckily Workflow provides a very simple way to get this, thanks to its ContentKit framework. When you pass input to an action in Workflow, that action will process the input based on the type of input it is expecting or capable of receiving. If you pass a photo into the Get Text from Input action, the output obviously wont be the photo. Workflow knows you want text, so it gets the only text associated with the input: the file name of the photo.

You might see where I’m going with this: Using this same concept, we can pass a location into the Get Images from Input action in a workflow. The only image that would be associated with location data, at least as far as Workflow is concerned, is a map image of that location, and so that is what it gives you. This means we can simply use the Get Current Location action, followed by Get Images from Input to get our map image for the current device location. You can use Workflow’s magic variables system to easily construct some more details, if you would like to share or save the image along with a location name, coordinates, or perhaps a Maps or Google Maps link.

Here is a simple version of the workflow that gets the map image and then lets you share it. Here is what the output looks like:

The workflow results in an image of a map of the current location.

If you have any questions about setting the workflow up for more specific scenarios or run into trouble with it, feel free to reach out to me.

Creating new TextExpander snippets with Workflow from (almost) any app

Using Workflow, you can create TextExpander snippets in nearly any app.

Snippets in TextExpander can save a lot of time typing

When you have a lot of repetitive typing to do, text expansion can be a real timesaver. iOS has built-in keyboard shortcuts, which can a big help for things you type often such as an email address or phone number however, these text shortcuts are rather basic. Though limited by Apple’s app sand boxing, a real text expansion app can typically go a lot further, and the best in this market is TextExpander by Smile Software. TextExpander can save you a lot of time, especially if you’re using apps that support it, and provides an SDK that has been adopted by several great writing apps, such as Drafts and Day One. There is a good number of apps that have added support for TextExpander, but they also provide a third-party keyboard to expand snippets. I do find I have some personal issues with the keyboard, and I’ve heard criticisms from others, but I still find it useful especially compared to the other options.

Though perhaps less known, TextExpander also provides a URL scheme. Sometimes, when I’m writing something for the x-teenth time, I think, I should really make that a snippet. I’ll do it when I’m finished here, and then I forget by the time I’m done. On the Mac, it’s really easy to create a snippet. On iOS you have to open the app and fill out the new snippet form. Luckily there is another way: the URL scheme.

TextExpander’s URL scheme offers a method for creating new snippets. All we need is a way to launch that URL while passing our intended snippet content to it as input, right from the very place we are typing. That’s where Workflow comes in. Though it has no support for TextExpander built-in, it does make it easy to take text input and run a URL scheme with it. However, I wanted a bit more control here. TextExpander provides a system of organization for snippets in the form of groups. I wanted to be able to select a destination group for the snippet when I create it, and set an abbreviation for it. That’s what the final workflow does.

This workflow creates a snippet from the selected text

To use the workflow, simply select the text you wish to save as a snippet. In the Copy/Paste pop up menu, there is also a Share option. Tapping Share from here will share the text only, which is what we want. Then select the Run Workflow action extension and choose the Create Snippet workflow. The workflow will first display the selected text so you can edit if needed and then confirm it. Next it will ask you to create an abbreviation for your snippet, and then show a list of groups from which you can select as a destination for the snippet. The workflow will then launch the Workflow app and prompt you to confirm you want to open TextExpander. Once it does, the new snippet is created and you are returned to Workflow. Unfortunately, due to Apple’s restrictions in iOS, the extension must first open Workflow to launch the URL scheme, and it is not capable of returning you to the original all you started in. For me, that’s a small annoyance but certainly not a deal breaker.

The workflow lets you select a group and apply an abbreviation

You should customize the workflow by changing the group names in the List action to reflect your actual snippet group names. Be sure to match spelling properly with how they appear in TextExpander. You can grab the workflow here. Let me know if you have any questions or suggestions.

Getting message links from Airmail with Workflow

Using Airmail’s integration with Workflow to get a more portable message link.

The number of email clients on iOS is no small thing, and it continues to grow as developers implement their own ideas on how to improve email. Each of these have their strengths and weaknesses and those can vary widely between some email apps. It’s undeniable that one of the biggest players in this space right now is Airmail (also available on macOS).

Airmail is an email client geared towards power users, providing users with numerous options for taking action on email messages. This includes the now-typical options to snooze a message or mark it as a todo, as well as a long list of actions to process messages with system features or send them to a number of apps. With Airmail’s actions, you can easily create a reminder, an event, or a PDF, or send the email message to one of the supported apps such as Trello, OmniFocus, Todoist, Day One, Ulysses, Bear, and even DEVONthink, just to name a few.

Apps and services available in Airmail

A more recent addition to Airmail actions is support for running workflows in Workflow and custom actions. Custom actions can be useful, allowing you to essentially carry out multiple actions in one. With custom actions, you can star an email and then create a task or reminder, without having to run two separate actions. Workflow actions are setup as custom actions as well.

When setting up a Workflow action, you can choose which elements of the message are sent to the workflow such as Sender, Sender name, To, CC, HTML, Text, and more. It also offers the Message Link parameter, however message links are created as airmail:// URLs, which means you can only open them in Airmail. While there are advantages to this, if I am linking to a message in a note or some reference material that I may come back to down the road, I want to be able to open that message even if I am using a different client. That’s where Workflow comes in. Apple Mail also has a URL scheme that allows you to open messages from elsewhere. The messages have a unique message ID. This ID is the same in Mail as it is in Airmail and this is what is required for Mail’s URL scheme to open the right message.

Mail’s URL scheme to open a particular message is message://<messageid>. We can set up the action in Airmail to send the message link to the workflow, and then we can use Workflow’s Match Text and Get Group from Matched Text actions to isolate the message ID from the Airmail URL that is sent to the workflow. We can do this using a simple regular expression messageid\=(.+)$ to match the ID and then insert the group we get from into a message:// URL within a Text action.

I should back up a moment and add that sometimes, I want a link in a markdown format. I setup my Airmail action to send the Subject in addition to the link. When setting up Workflow actions that send multiple parameters, Airmail lets you define a custom separator character1. At the beginning of the workflow, you can use the Split Text action to separate by the same custom character you set in the Airmail action. The you can reference each item individually at its index using the Get Item from List action2. This allows us to receive the link and the subject, and then provide multiple options for generating the link as a plain URL, or a markdown link. I took it a step further in my workflow by including the option to generate an Airmail markdown link or a plain Airmail link as well.

The workflow being used to copy a Mail URL as a markdown link.

Now whether I need to reference an original message source months from now, or just create a quick reminder with the link to a message, I’m good to go. You can get the workflow here.

EDIT: Somehow a couple of little things got changed that I didn’t realize before. The proper changes have been fixed in the version of the workflow linked above, so that shouldn’t be an issue. Just pointing out that the screenshots throughout this post may show a few differences. In setting up the Airmail custom workflow action, the separator field should not be blank, it should be a double pipe || character. I also changed the index in the workflow from what the screenshot shows. For some reason if a separator is specified in Airmail, the app will include a blank item first, so the subject was at Index 2, rather than Index 1. Finally, I added a copy option to the workflow, which was also not pictured. Apologies for any confusion. Hope you find this workflow useful.

Note: Airmail and Workflow icons are property of their developers/owners/designers, which is not me

  1. This field was blank in the screenshot, but the custom separator my workflow uses is double pipes (
  2. The screenshots of the workflow show it getting the first item to get the subject. For some reason Airmail sends a blank item first when using a custom separator so it should actually get the item at Index 2 for the subject. It’s fixed in the final workflow linked at the end of the post.

Workflow for Saving Recipes from Kitchen Stories to Paprika

When the Paprika extension isn’t available but a URL for the recipe is, Workflow can help.

I’ve recently discovered that I really enjoy cooking. I love trying to make something new and experimenting with various spices, seasonings, and other ingredients to create a unique and delicious flavor. For recipe management, I use Paprika Recipe Manager for iPhone, iPad, and Mac (separate purchases for each but recipes do sync between versions with a free Paprika account). Paprika allows you to save recipes via a sharing extension in the iOS share sheet. If it isn’t able to extract the recipe from a webpage, it will ask you to open the page in Paprika’s in-app browser, which provides some excellent clipboard tools for manually saving the recipe in a fairly quick and easy manner. For instance, you can select the ingredients on the page, and then tap the Ingredients button along the bottom of the browser, then do the same for directions, cook time, nutrition, notes, etc.

The recipe clipper in Paprika's in-App browser

Paprika also allows you to search recipes within the in-app browser, auto-detects if a URL is in the clipboard (and prompts to load it), create new recipes manually from scratch, manage and organize recipes through categories or favorites, pin multiple recipes for quick access when cooking, easily set timers (auto-detected in the text of the recipe), add ingredients of a recipe to a shopping list and sync that list to Reminders, and create weekly meal plans which can be synced to your calendar. Unfortunately the app hasn’t been updated in awhile and I’m not so sure it’s in active development anymore, which is a shame. That being said, as long as it works, I will continue to use it. One thing I have wanted to see from the developers for some time now is an improvement on the base URL scheme of the app: the ability to prefix a URL with their URL scheme and have that page opened in Paprika’s browser. There are apps which have used URL schemes in this way for some time. Prefixing a URL in Safari with the letter r, as in rhttp://recipesite.com/thisrecipe will open that URL in the in-app browser for the Documents app by Readdle. 1Password also provides the ability to open a URL within their browser (by prefixing a URL with op).

The extension for Paprika usually works great in Safari, in my experience. However there are instances where it wont be available, such as when viewing recipes from other apps. I’ve found the Kitchen Stories app to be quite fun to browse over the past few months but due to the data it makes available to the share sheet, the Paprika extension isn’t available here. You could use the Copy Link button available in their custom share page, and then launch Paprika manually, which would then prompt you to load the URL in the clipboard. Alternatively, you could let Workflow take care of that for you. Just like I have workflows to open a page in Documents or 1Password with their aforementioned URL schemes, I also have a workaround for Paprika. This uses the Workflow app on iOS as an action extension to copy the input URL to the clipboard and then launch Paprika using their paprika:// URL scheme, where the app will prompt you to load the page in the browser so you can save the recipe.

Saving recipes from Kitchen Stories to Paprika using Workflow

The workflow also stores your current clipboard content to a variable so that if you return to Kitchen Stories after saving the recipe, while the Workflow extension is still running, it will set the prior data back to your clipboard. I don’t prefer having to use clipboard workarounds so being able to at least maintain whatever I may have on there is a nice thing for me. The workflow will work from other apps as well, as long as they make the recipe’s URL available to the share sheet. You can get the workflow here.

I keep hoping to see some more advanced features from Paprika, as well as better export options, but I still find it to be really great at what it does and will continue to use it for now.

Optimistic iOS User

Some thoughts on why I am optimistic about the future of productivity, automation, and professional use of iOS — specifically the iPad.

Earlier this week, in the keynote for their annual Worldwide Developers Conference, Apple announced the next version of iOS: iOS 11. The announcement of the next version of iOS was expected, of course, but there some changes I wasn’t expecting quite yet but was happy to see, particularly in regards to the iPad which, as they joked on stage, is being turning up to 11.

We all have our own critiques, and I’m no different, but I’m generally an optimist about these things. iOS certainly has its flaws, as an software platform will, but the announcements from Monday do a lot to move the iPad forward as a legitimate computer; something some of us already saw it as, despite room for improvement. I expected Apple to eventually implement better features for multitasking (and perhaps even drag and drop), although I was expecting to have to wait another year or so — what a pleasant surprise. I haven’t gotten my hands on the beta yet, but I plan to try the public beta later this month (after a proper backbup, of course!). That said, I remain optimistic about the productivity improvements coming to the iPad.

The revamped control center and app switcher — resembling something more like Mission Control on macOS, the improved dock, the implementation of drag and drop, screen recording, and instant markup for screenshots — just to name a few — will undoubtedly enable many iPad power users to get more done more efficiently than before and, hopefully, draw in new iPad users and an increase in use for existing-but-less-frequent iPad users, pushing further it’s place in the wide world of computing devices.

I know a lot of people were concerned with Apple’s acquisition of Workflow. Some who rely on the app for work and other reasons were worried that this might be the end of Workflow and perhaps lead to less powerful automation on iOS. One of the reasons I can remain hopeful about the future of iOS — and specifically the iPad — in terms of automation, productivity, and professional work is that after being a part of the Workflow team for a little more than two years, I can say that they loved working on Workflow as much, or more, than I did: developing it, improving it, introducing new features to our customers. They were passionate about it. While I don’t have any inside information, I personally don’t think they would have made such a deal if they didn’t think they could continue to do these things in some manner at Apple. I should reiterate that I’m not basing this on anything other than what I saw working with them for a couple of years so I could certainly be wrong but, as I said before, I am optimistic.