Omnifocus to Fantastical iOS Workflow App Share Extension

This one was giving me boatloads of trouble as Workflow was having issues parsing the XML from the Share feature in Omnifocus for iOS. I was finally able to rename the file, making it plain text, to then parse the dictionary in a way that I could replicate the drag and drop functionality I love on OSX for daily planning. If anyone is interested the Workflow is here.

Note that I added a step where I push you to Fantastical to view your calendar. I did this so you could select the right time. As of right now it requires the app switcher to get back to the workflow.

PS: Thanks to for the renaming idea!


Just a heads up: the upcoming OmniFocus 2.14 release shares the current task (or project) as TaskPaper content and (in a separate pasteboard entry) a URL rather than as an XML file. This is generally much easier to work with, but it does mean that your current Workflow action will need to be updated to work with the new format.

I hope you’ll find this to be a change for the better, but please don’t hesitate to contact me (by email at, or @kcase on Twitter) if you think there’s something we could do better!

Well that will be just too easy then 😉. Why not challenge us a little.

In all honestly that is great, as I love the export to Taskpaper format from the desktop app. Sounds like some Regex will be required with Workflow though. I must say once I had the XML parsed it was a breeze to work with.

I will update the workflow once 2.14 is released.

Will you be exporting duration estimates too? That I would love to see.

Updated to use @kcase’s URL parsing scheme, and addition of time estimate and better handling of task URL: Updated Omnifocus 2.14 to Fantastical Workflow

1 Like

Very close, but the Workflow step that reads the taskDictionary for the defer date specifically strips off the time. By changing the time format from “None” to “Short” I began getting valid defer date/times from OF into Fantastical.

If you don’t use estimated times you’ll want to strip out the timeEstimate stuff near the end but note that this var is used in a few places, so chase it down.

Other than that, thanks, MaddenWalker.