When iOS 8 came out, I thought I'd stop using URL schemes altogether. Until two years ago1, my attempts at working on iOS had focused on overcoming the lack of inter-app communication with URL scheme automation, as our old coverage here at MacStories can attest. iOS 8 showed a new way to get things done on the iPhone and iPad thanks to extensions, eschewing the limited functionality (and security concerns) of URL schemes for a native, integrated foundation.
Two years later, I've largely reappraised my usage of URL schemes, but, unlike I first imagined, they haven't disappeared completely from my iOS computing life. iOS automation has taken on a different form since 2014: thanks to its action extension, Workflow has brought deeply integrated automation to every app, while Pythonista remains the most powerful environment for those who prefer to dabble with Python scripting and advanced tasks (also while taking advantage of an action extension to be activated from apps).
Today, URL schemes are being used by developers and users who want to go beyond the limitations of system extensions: apps like Drafts and Workflow use URL schemes to invoke specific apps directly (which extensions can't do – see Airmail and its custom app actions) and to link more complex chains of automated actions. URL schemes are also the best way to set up templates and import workflows for dedicated functionalities – a good example being The Omni Group with their latest automation options for template generation in OmniFocus.
While Apple's goal with iOS 8 might have been to "kill" URL schemes by turning them into a niche technology mostly supplanted by extensions, that niche has continued to quietly thrive. iOS automation is drastically better (and more secure) today because of extensions, but, for many, URL schemes still are the backbone of app shortcuts and complex workflows. Where extensions can't go, there's a good chance a URL scheme will do the trick.
It's in this modern iOS automation landscape that Launcher, first released in 2014, is graduating to version 2.0 with a focus on what it does best: standalone app shortcuts. Launcher 2.0 offers more control than its predecessor over widget customization and activation, with new features and settings that have pushed me to reconsider how I use Notification Center widgets on both my iPhone and iPad Pro.
Launcher has a troubled App Store history in its past. After its first release in 2014 with a widget that leveraged the Today view of Notification Center to let users open apps, Apple's App Review hammer struck down retroactively, rejecting an app that had already been approved. As a result, Launcher stayed in an App Review limbo for six months. In March 2015, Apple changed its mind again, letting Launcher back into the App Store and seemingly suggesting that URL scheme launchers had been sanctioned for approval again.
Fortunately for its developer Greg Gardner, Launcher went from being known as a poster child of Apple's vague policies to standing on its own merits. Since last year, Gardner has improved Launcher in significant ways, bringing dynamic launchers for integration with navigation apps and system settings, iOS 9 and 3D Touch support, additional built-in launchers, and more. And with every update, Launcher stayed true to its deceptively simple core idea: a launcher for apps that lives in Notification Center.
Version 2.0 is the next logical step for Launcher, which can now create multiple widgets for Notification Center, store them in iCloud for backup and restore, and even activate them at specific times or locations if necessary. Instead of reimagining what the app does at the risk of alienating current users, Gardner is growing Launcher to be smarter in the shortcuts it presents, saving users time with an eye for customization and app actions.
The big upgrade in Launcher 2.0 is support for multiple widgets, each containing its own set of launchers. After unlocking a new In-App Purchase, you'll be able to create up to six Launcher widgets, which will show up in Notification Center as 'Launcher 1', 'Launcher 2', and so forth. You can assign custom labels to widgets: in the app, a new paginated interface lets you switch between launchers, while the settings (accessed by tapping the cog button in the lower left) have an option to add a widget name and determine its status (more on this in a bit).
The creation and management of multiple widgets are sensible and don't add complexity to the app. There are some nice touches, such as a way to copy an existing widget into a new one if you want to a create a slightly different version of it. New in today's update, you can also make launchers different from one another by choosing from square or round icons, as well as create your own custom icons from scratch. If you choose to display launcher icons at their smallest size, you'll be able to have up to 35 launchers in a single widget, which means, in theory, that you could set up 210 shortcuts in Notification Center with Launcher 2.0 alone.
I like how Gardner handled multiple widgets. First, I haven't seen a lot of apps offer a way to split up their functionality in discrete widgets, which feels like an area of iOS still ripe for exploration from a productivity standpoint. But, more importantly, multiple widgets make sense for Launcher's most dedicated users: they're optional, and they open up intriguing possibilities for those who want to get the most out of the app.
The utility of multiple widgets, though, is revealed when you consider the new availability settings to show a set of launchers only at specific times or places. Under Widget Settings, you'll find two new preferences:
- When To Show: Always; on specific days; All Day; From…Until;
- Where To Show: Everywhere; within location; outside locations.
The idea here is that Launcher can provide a dynamic collection of launchers that intelligently show up only when you need them. For instance, you could set up a widget with shortcuts for your commute in the morning; a widget for when you're at work and want to quickly get in touch with colleagues; shortcuts for the gym; or perhaps you want to hide all your work launchers during the weekend, leaving room for music launchers and sports apps. All of this is possible with Launcher 2.0, with a solid implementation to boot.
While I don't need to set up separate work shortcuts or feel the need to hide them on weekends, I do want to have two widgets that only appear within certain locations. Every day, I drive my girlfriend to and from dance class. Over the years, we've developed the habit of texting each other when I arrive back home and when I'm outside, waiting for her to finish class. Until Launcher 2.0, I had a workflow that would ask me to pick a template to be sent as a Telegram message. It worked, and I used it hundreds of times, but it also meant I had to keep the Workflow widget in my Notification Center just for that workflow.
Thanks to its geofence integration, Launcher can show me two different Telegram launchers only when I need them: when I'm home and when I'm outside my girlfriend's dance school. The widgets are clearly labeled, and because they're separate, I don't have to interact with a menu that asks me to pick a message template – I always end up with the correct message shortcut at each location.
Personally, as I spend most of my working days at home and don't need shortcuts when I'm around Rome, I won't go crazy with location and time-based triggers for widgets. But, I recognize that they're a great idea, and I can imagine how others will take advantage of dynamic widgets for their workflows.
Rethinking Widgets with Slack Shortcuts
There's one aspect of my daily iOS experience that I fundamentally improved thanks to Launcher 2.0: opening Slack conversations.
I spend a lot of time in Slack. Unlike some friends of mine, I'm "only" on two Slack teams – our paid MacStories account is one of them – and I try to keep the conversations I have on Slack focused on work as much as possible (Telegram is for everything else). Still, even with being disciplined in my usage of Slack, I still end up constantly jumping between channels and teams simply because I'm busy.
A few weeks ago, I started wondering if Slack offered a URL scheme to open specific DMs and channels. After some Google searches, I came across this comment detailing the URLs that Slack uses to switch between accounts and open conversations. The basic format is:
channel parameter needs to be changed to
user to open a DM with another user; the
user IDs are alphanumeric strings assigned to channels and users, while the
team ID represents an entire team on Slack.
I was relieved to find someone documenting the Slack URL scheme2, but my excitement waned when I realized that these IDs are not exposed in the iOS app and there's only one way to obtain them: the Slack API.
However, after perusing Slack's documentation, I learned that getting the required information on channels and teams is easy, it can be done on the Slack website, and it will only take you a few minutes. Grab a note-taking app (you'll want to save the IDs somewhere) and do the following:
- Go to api.slack.com/web once you're logged into your team and click 'Generate test tokens' at the bottom. You'll need a test token to perform tests for yourself with the Slack API. Test tokens are just for you and you should treat them like you'd treat your Slack password. Once issued, your test tokens will be listed at api.slack.com/docs/oauth-test-tokens.
- Start testing the Web API with the web Tester interface. Go to api.slack.com/methods/auth.test/test and make sure the current team is selected under
tokenin Value column.
- Click the green 'Test Method' button. In the response below, save the
team_idvalue in your note-taking app of choice.
- Click 'View another method…' in the top right menu and search for
channels.list. Click it and wait for the page to reload.
- Click the 'Test Method' button.
- In the response below, you'll see a dictionary of channels; each channel has attributes for
name(which you can use to identify the channel) and
id, which is the value you're looking for.
- Save the ID and repeat these steps for every other channel you want to create shortcuts for.
At this point, you should have collected your team ID and a list of channel IDs. You can already start building shortcuts for Slack channels as custom launchers in Launcher. If you want to create launchers for DMs and private channels, use the Tester interface with the
groups.list methods, respectively, and save their IDs like you did for channels.
After I went through this process for my most important DMs and channels, I ended up with URLs formatted as follows:
slack://user?id=U04N10PNT&team=T02J5G42G– to open a DM;
slack://channel?id=C024FH6F4&team=T024FG54R– to open a channel.
With the list of URLs to launch Slack conversations, I then created a new widget in Launcher, named it 'Slack', and set up about a dozen custom launchers, each with a custom icon from my camera roll.
In just a few weeks, Launcher's Slack shortcuts have become my primary way of opening Slack conversations; they're almost second nature at this point.
The ability to group launchers thematically in a dedicated widget helps me organize my Notification Center so everything is always where I expect it to be. Even better, unlike other widgets, Launcher's don't reload after I swipe down to open Notification Center – they're always there, both on the Lock screen and Home screen, ready for me to jump into a Slack conversation.
It's a series of small perks, but Launcher's capability of grouping launchers in multiple widgets and giving them custom icons has allowed me to cut down the time I spend performing a task that occurs every day, and I'm happy with it.
Back to Launchers
Launcher doesn't have all the features of more advanced automation apps like Workflow and Pythonista. It doesn't even have all of the deeper URL scheme implementations of the old Launch Center Pro. And it'd be fair to argue that, in its first iterations, Launcher was actually a lightweight copy of Launch Center Pro, bringing some of its basic features to Notification Center.
But at version 2.0, I have to recognize that developer Greg Gardner has grown Launcher in intelligent ways, avoiding the nitty gritty of URL schemes while augmenting the classic launcher idea with options such as multiple widgets, support for custom icons, iCloud backup and restore, or location and time triggers. Launcher has found its raison d'être as a widget, and if you're willing to take the time to set it up, it's now one of the apps that can save you a lot of time automating common tasks on iOS.
I wasn't a fan of Launcher before, but I'm on board with Launcher 2.0. Location-based shortcuts, multiple widgets, and full iPad support have shown that there's still a place for URL schemes in my workflow.
Launcher 2.0 is available on the App Store.
- That was before the iPad Pro, action and share extensions, Split View multitasking, widgets, custom keyboards, and every other modern iOS feature that makes working on iOS better (and, for many, even superior to a PC). ↩︎
userpart was guessed by me after a few random attempts to find the proper keyword to open DMs. ↩︎