iOS 12 Wishlist


For weeks I’ve been thinking about what I would like to see in iOS 12. I’m a details person, so many of the things on my wishlist are tweaks or improvements to more minor aspects of iOS. If Apple really is delaying big iOS features and focusing on smaller improvements for iOS 12, these things on my wishlist would fit right in.

Here’s my list in no particular order:

  • Dark mode all the things! (I feel like this has been on my iOS wishlist for years now.) Developers can then tie in to the system determining if dark mode should be on or not. Also, dark mode should be toggled manually (perhaps by something in Control Center (though I would be sad to ditch the two-finger swipe up/down gesture in Partly Sunny, Tweetbot, and others)) or toggled automatically either by screen brightness or by daylight time (which could be scheduled like Night Shift or could use the device location’s sunrise and sunset times).
  • Unify the swipe-up gesture on iPhone and iPad. This means iPhone X Control Center isn’t in the top-right corner (hooray!). Perhaps the current implementations of Control Center and App Switcher on iPad and iPhone X could be combined: the new system would look like iPad with Control Center to the right of App Switcher, and it would work like iPhone X. Swiping up would go to the home screen, and swiping up and holding would bring up Control Center and App Switcher. And like how iPhone X works currently, swiping up and to the right at the same time would bring up App Switcher in one action, and swiping up and to the left at the same time would bring up Control Center in one action.
  • Replace the incoming call screen that takes over my iPhone and iPad with a less-intrusive notification banner or something similar
  • Replace the volume display that covers what I’m watching when I change the volume with a display in the Status Bar like Apollo and Instagram
  • An easier way to change the apps in Slide Over and Split View (like how prior to iOS 11 there was an app picker to select an app for multitasking). The Slide Over app and one app in Split View currently have a drag indicator at the top that allows the app to slide left or right or off the screen and allows dragging down to enter or leave Split View. Perhaps if the indicator were dragged down slightly, it would keep the current enter/leave Split View action, but if it were dragged down further, it would expose another panel with a grid of recently used apps that support multitasking. And perhaps apps could be favorited for quick access in a separate section. (I‘ll mock this up, but I’ll see what WWDC brings first.)
  • PIP on iPhone
  • Group FaceTime calls
  • Use iPhone 8 size for iPhone apps running on iPad instead of iPhone 4 size
  • Better ways to dismiss modal form sheets
  • Improvements and modernizations in Mail
  • Ability to create smart playlists in Music
  • Bring back the network activity indicator for iPhone X
  • A keyboard shortcut to dismiss Safari View Controller (unless this already exists and I don’t know about it?)
  • Bring back the URL schemes that launched Settings submenus (for example launching into Settings > Personal Hotspot or Settings > Privacy > Location Services)
  • If not those then allow customizing the 3D Touch shortcuts for Settings
  • 3D Touch on app icons working as soon as iPhone is unlocked (currently there’s a couple second delay while the apps animate into position where a 3D Touch press on an icon activates jiggly mode to rearrange instead of activating 3D Touch shortcuts and widgets; the same press a second later works as expected.)
  • On iPhone X, 3D Touch shortcuts on the lock screen when navigating or on a call (curiously they disappear from the lock screen now, so to take a photo, the phone has to be unlocked)
  • Messages recognizing a contact sent a message from another address (from email instead of phone number for example) and keeping the message in a single thread from the contact instead of a separate one. macOS does this. iOS should too.
  • Ability to restore a single app or a selection of Camera Roll photos from a backup rather than having to restore the entire device. (Seriously, why is this still a thing?) Imagine in iCloud settings being able to browse the contents of iCloud backups and selectively and directly restore things from them.
  • Make Apple Watch notifications opt-in instead of opt-out. Currently, if on iPhone I allow an app to send notifications, I automatically get notifications on my Watch too. Nine times out of ten, I don’t want notifications on my Watch too, so I have to manually turn them off every time. I would like either a setting in Watch app to make notifications opt-in (meaning if I wanted Watch notifications too I would have to manually turn them on) OR on the iPhone app’s modal asking for permission to send notifications another choice that deals with Watch notifications. For example: “This app would like to send you notifications” with the choices of “Don’t Allow”, “Allow on iPhone”, and “Allow on iPhone and Apple Watch”.

So, just a few things on my wishlist! Hah! What did I miss? No doubt as soon as I hit the publish button on this, I’ll think of something else. I hope at least a few of these are addressed in iOS 12—especially if it’s focused on polishing what’s already in iOS. We’ll find out on Monday!

Not Mailing It In


A few months ago, I switched back to the default iOS Mail app (as seen on my home screen) after using third-party email apps for a while. I’m not an email power user (I don’t snooze my emails for example), so Mail is good enough for me.

There are a few things, though, that would make Mail more useful for email users of all levels and would help Mail better fit in the modern iOS ecosystem. Here are four easy things and one more advanced thing.

1.) Safari View Controller

When I tap a web link in an email, instead of Mail kicking over to Safari, the link should open right inside Mail using Safari View Controller. Perhaps this could be an option in Settings that is turned off by default so less tech-savvy users don’t have to know about it, don’t have to use it, and don’t have to be confused how to get back to their mail when they open a link in Safari View Controller.

Safari View Controller

2.) Returning to the inbox after acting on a message

Currently, when I’m viewing an email and I delete it or file it away to an archival folder, I’m shown the next or previous email from my inbox. I don’t necessarily want to act on it or mark it read (and then have to immediately mark it unread), so I would like an option to go back to my inbox after acting on a message. Perhaps this could be an option in Settings too.


3.) Account avatars

To help in quickly browsing an inbox, Mail should show avatars for each email in the list like each contact has in Messages. The avatar would be useful to visually process who the email is from.


Currently when viewing an email, an avatar appears in the header information along with the from and to details. This avatar should be in the list view as well.

Message avatar

Additionally, while senders who are saved in Contacts use the image I have set for them, senders not in Contacts should use the domain’s favicon (if the email is from a company) or even the sender’s Gravatar instead of the sender’s initials as it works now (unless neither are available).

4.) Share sheet

For whatever reason, email messages can’t be acted on with the share sheet. I can share websites from Safari, notes from Notes, and locations from Maps, but why not emails from Mail?


Not that I want to send my email to someone through the share sheet, but I might want to share it to another app. For example, if someone sends me a link to an article or video, I may want to send it to Pocket to view later. Currently, I have to tap the link, get kicked over to Safari, save the thing to Pocket with the share sheet, close the Safari page or tab, and go back to Mail. A Safari View Controller would save a few steps here, but being able to use the share sheet right in the email would save even more.

5.) Rules / smart inbox?

This one I realize could be considered more of a power-user feature, but I feel even casual email users could benefit from this too. While avatars for each email in the inbox list would be a small change to aid in triaging email, a smart inbox would be a big change. This could be something as simple as having the ability to set up rules which would work like they do in desktop email clients: if an incoming email matches a rule or set of rules (for example if it’s from a particular sender), it gets filtered to a particular folder.

But perhaps this could also be something more advanced like what Spark does: emails are grouped into predefined categories so more important emails are together at the top, and less important ones are together at the bottom.


Mail already allows setting up VIPs, so perhaps one of the categories is VIP emails, another is other non-newsletter emails, and another is newsletter emails. There’s already some newsletter detection happening since Mail offers a link to unsubscribe, so at the very least why not group all the newsletter emails together so they don’t have the same weight as emails from friends and family. And if friends and family have their own MailChimp newsletters they’re sending me (or the automatic grouping missed something), there should be a way to mark the email as a particular type so it gets grouped correctly in the future.

A full modernization of Mail should also include the ability to snooze emails, create and save smart searches, and set email to send at a later date, but these five things would be a good start to making Mail more useful for both casual and more advanced users.

Mail feels like it’s good enough for many iOS users—me included—but that doesn’t mean it can’t be better. I hope a new version of iOS brings some updates to Mail so parts of the app don’t feel so, well, mailed in.

My Home Screen Setup, May 2018 Edition

I thought perhaps I would make sharing my home screen setup a regular thing. Back in January, I posted my then-current setup. Four months later, my home screen is a bit different, so here’s an update.

My current home screen (select to view a larger version):

home screen

These are the apps I use the most or I want easy access to. As for my wallpaper, this is a wallpaper I’ve been using for years (I have no idea where I originally found it) (and actually it’s too small for iPhone X, but I’m using it anyway). The subtle grays and textures are pleasing and allow the icons to pop. Below are a few notes on some of the apps I have on my home screen.


For me, this is the gold standard of what a Twitter app should be. With thoughtful design and interactions, timeline sync, and more, Tweetbot is an all-around terrific Twitter app. I hope Twitter’s recent API news doesn’t make Tweetbot—and all third-party Twitter clients—unusable.


I use Toggl to track my time on various tasks and projects. I wrote previously how I used Workflow to start and stop time entries because the official Toggl app isn’t for me. Wanting more functionality like editing or deleting time entries, I decided to make my own Toggl app since their API is rather robust. I don’t know ultimately what the roadmap for Timr is, but for now it offers me a better way to interface with Toggl—and, unlike the official app, works natively on iPad and with iPad multitasking too!

partly sunny

Partly Sunny
I’m the developer and designer behind this app that shows your weather in quick glances and detailed looks. If you just want a quick glance at what’s happening, Partly Sunny can show that. If you want a more detailed look at what’s happening in the next hour, day, or week, Partly Sunny can show that too. Whichever you prefer, everything is meant to feel at home on iOS. Some of the key features include: customizable hourly graphs; customizable conditions in current, hourly, and daily forecasts; interactive radar; a widget; and a dark mode.


This is an indispensable app for connecting and combining apps and actions to automate tasks—thus saving me time and effort. I have workflows for sharing photos, adding calendar entries and reminders, adding Trello cards and attachments, adding Apple device frames to screenshots, parsing email receipts, and more. Sure, I could do all those things without Workflow, but Workflow makes those things easier. Plus, I love making workflows. I wish I could find a job as a “Senior Workflow Builder”.


I recently started using Things to keep track of my to-dos. Its design is striking for two reasons: it’s beautiful and it’s calming—meaning it doesn’t stress me out to use it. Plus, there’s no concept of overdue in Things, so it’s never shaming me for not completing a task. The cost of the apps may be a dealbreaker for many (there’s a separate app for iPad), but Things is more than enjoyable and useful enough to justify the price.


This is a journaling app that collects manual thoughts and media and also automatically imports tweets, Instagram and Facebook posts, and other social-media feeds. I’ve been using Momento for several years now, and looking back at memories and what I was doing, thinking, and even tweeting years ago is something special.


I enjoy trying different apps to see how they solve the same problems (see: Things), and transportation apps are no exception. In Los Angeles where many public-transportation lines run infrequently or have earlier-than-ideal-end-of-service times, Transit has some key features for me: its active-trip mode lets me know when to get off, whether or not I’ll make a connection, and what my ETA is.


In the previous post, I had just started using this RSS reader, and here I am four months later still using it. Still one of the most notable things for me is it feels at home in iOS 11 with its design choices. Another notable thing is it can fetch the full text of articles that get truncated in feeds.


Here’s a bar graph comparing my Reddit usage before Apollo was released vs after: ▁ ▇. With its many customization options, gestures, and the jump bar, it’s such a delight to use (it’s easy to tell much thought and love has been poured into the app). And like lire, it feels at home on iOS.


Trello helps me organize Partly Sunny to-do lists, feature requests, and bug reports as well as plan out future updates. I started using it beyond project tracking too. This year, I embarked on a 365-day photo project where I take and share a photo each day. I have a Trello board to save sort-of photo drafts; if I want to revisit something for a future photo, I take a photo and add it to this board so I don’t forget about it.


A polished, powerful manual camera app. One of my favorite features is when in manual-focus mode, I can turn on highlighting of what’s in focus in the frame—immensely helpful when I’m trying to compose a shot with a particular thing in focus.

And in my Dock:


Since iOS 9, the default iOS Music app hasn’t been for me. Thankfully, Cesium exists with its customizable tabbed navigation, powerful list sorting and grouping, track details, queue editing, dark theme, and more. (I’m using an alternate icon to match the iOS 7 Music app color.)

drafts 5

This app is great for when I need to jot down a quick note. From there, I can decide what to do with it later or immediately perform an action or set of actions on the text and send it somewhere else like a message, a tweet, or elsewhere with a URL scheme. The recent Drafts 5 (I’m using an alternate icon) brought a powerful new scripting environment giving me further options for processing text—and giving me opportunities to brush up on my Javascript.

So that’s my home screen setup. May 2018 edition. As I said last time, I like to tinker, so no doubt this will get tweaked soon. What does your home screen look like? Come find me on Twitter and let me know!

Gesturing for User-Friendliness

With my iPhone X in my hand, I’m checking the weather for my current location in Partly Sunny, and I want to see my full locations list. What do I do? I swipe from the left edge of the screen to go back. I’m done checking the weather, and I want to go to my home screen. What do I do? I swipe up from the bottom.

I open Photos, swipe through my Camera Roll, favorite some photos, and now I want to go to the Favorites album. What do I do? I swipe down on the current photo to get back to the Camera Roll, I swipe from the left edge to go back, and now I can tap on the Favorites album. With all that navigating, I didn’t press any buttons. I only used gestures.

Gestures are an increasingly important part of iOS. Whether they’re a simple tap to dismiss, a swipe to go back, or a pinch to close, gestures not only offer shortcuts, they offer increased usability.

There is one particular place in iOS that hasn’t been given some gesture love but dearly needs some: modal form sheets. No doubt you’ve seen and interacted with form sheets in iOS before. On iPhone, they slide up from the bottom of the screen and fully cover the other view you were interacting with. On iPad, they slide up from the bottom and occupy a portion of the width and height of the screen. The area of the other view not covered by the form sheet is dimmed underneath.

App Store Apple ID

By default, when modal form sheets are displayed, there is one way to dismiss them: the Done button in the top-left or top-right corner. This can make dismissing form sheets user-unfriendly. On iPads, this button occupies a tiny portion of the screen—meaning there’s just a tiny portion of the screen that can dismiss the modal. And on taller iPhones, reaching for the Done button can be challenging. How can dismissing form sheets be made easier? Gestures!

Before we get to that, let’s define a few things. First, what’s a modal? In its basic definition, a modal is a view that covers up another view and prevents interaction with that other view (the parent view) until an action occurs on the modal view. What are some examples of modal views?

In iOS, there are a variety of modal views. There are alerts (centered on the screen with usually a message and one more more buttons), action sheets (anchored to the bottom of the screen and usually show two or more choices to act on something), and activity sheets (commonly know as “share sheets” to copy, send, or share content).


These types of modal views are defined by iOS. One more type of modal view is defined by developers. When showing (called “presenting” in iOS parlance) a custom view—say a settings view with options and submenus—developers can choose to present the view modally. By default, the view will slide up from the bottom of the screen and cover the view the user was interacting with.

When presenting a view modally, developers can choose a few styles for the modal view. From the iOS Human Interface Guidelines, the styles are “full screen”, “page sheet”, and “form sheet”. On smaller screens, page sheets and form sheets cover the whole screen, but on larger screens, they cover a portion of the screen. The portion of the parent view not covered is dimmed underneath.


I’m going to focus specifically on form sheets though the improvements I discuss would also apply to page sheets and mostly to full screen modal views too.

What are some examples of form sheets? In App Store, viewing your Apple ID account presents a form sheet.

App Store Apple ID

In Settings > Apple ID, tapping “Set Up Family Sharing” presents a form sheet.

Family Sharing

And in Partly Sunny, viewing settings, editing the locations list, and viewing radar all present a form sheet.

Partly Sunny settings

Partly Sunny edit list

Partly Sunny radar

So how can dismissing form sheets be made easier with gestures? Here are two ways.

First, on iPad, tapping anywhere outside the form sheet where the parent view is dimmed underneath should dismiss it. Here’s the current active area of the screen where tapping will dismiss the form sheet: just the Done button.

Current tap area

And here’s what the active area to dismiss the form sheet should be: both the Done button AND the space outside the view (the status bar is still reserved for its interactions like scrolling a view to the top).

Proposed tap area

The space outside the form sheet currently is a touch dead zone; the dimmed area merely prevents taps to the view underneath. Why not use this space to dismiss the form sheet?

Tapping outside a view to dismiss it already exists elsewhere in iOS—even for dismissing modal views. When an action sheet or activity sheet is presented, tapping above or outside the buttons or view will dismiss the sheet.

Tap outside action sheet

In the iOS 11 App Store, tapping a Today story tile or list tile opens a sort-of page sheet where, on iPad, tapping to the left or right of the view in the blurred area will dismiss the view.

Tap outside App Store tile

This example isn’t a modal view per se, but it applies. On iPad when pulling down on a Messages notification banner to reply to the message, tapping to the left or right of the messages view in the blurred area will dismiss the view.

With the latter two examples, perhaps these relatively new interaction methods will inform an updated modal system in a future iOS version.

In the meantime, there’s a workaround to capture taps outside the form sheet and have them dismiss the modal. This Stack Overflow thread discusses the solution. Since I first discovered this workaround, there’s been an update for Swift 4. I’ve reproduced and tweaked it here:

import UIKit

class FormSheetViewController: UIViewController, UIGestureRecognizerDelegate {
    // gesture recognizer to test taps outside the form sheet
    var backgroundTapGestureRecognizer: UITapGestureRecognizer!
    // dismiss the modal and perform any other related actions (e.g. inform delegate)
    func done() {
        dismiss(animated: true, completion: nil)
    // check if the tap was outside the form sheet
    @objc func handleTap(_ sender: UITapGestureRecognizer) {
        if sender.state == .ended {
            let location: CGPoint = sender.location(in: view)
            // if outside, dismiss the view
            if !view.point(inside: location, with: nil) {
    override func viewDidAppear(_ animated: Bool) {
        // set up gesture recognizer
        if backgroundTapGestureRecognizer == nil {
            backgroundTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
            backgroundTapGestureRecognizer.delegate = self
            backgroundTapGestureRecognizer.numberOfTapsRequired = 1
            backgroundTapGestureRecognizer.cancelsTouchesInView = false
    override func viewWillDisappear(_ animated: Bool) {
        // remove gesture recognizer
        if backgroundTapGestureRecognizer != nil {
            backgroundTapGestureRecognizer = nil
    // don't forget the delegate method!
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true

Partly Sunny uses this workaround, so in any of the previously mentioned form sheets, tapping outside the view will dismiss it.

Tap outside Partly Sunny settings

Tap outside Partly Sunny edit list

Tap outside Partly Sunny radar

This works for iPad, but what about iPhone where the form sheets cover the full screen and there isn’t any dimmed area? The second way to make dismissing form sheets easier is dragging. Once the view is dragged down a certain amount, the view should dismiss. This would work on iPads too.

Drag to dismiss

This idea of dragging down to dismiss something exists elsewhere in iOS. In Photos, when tapping on a photo in the Camera Roll or an album, the photo goes full screen. Tapping the back button goes back to the album, but also dragging down on the photo will shrink it and fade it to reveal the album—in other words, dragging down dismisses it.

Drag photo to dismiss

While Maps doesn’t use traditional modal views, the system it uses allows for dragging the cards down to get back to the content underneath.

Drag map card to dismiss

Third-party apps have started to employ dragging down modals to dismiss as well. I’m not sure where I first saw it, but I know of several apps that have this functionality. Partly Sunny is one of them. In any form sheet, dragging down on the view will dismiss it. Here it is in action:

Drag to dismiss

I added a sort-of guard to help prevent accidental dismissals. If you scroll the view and then scroll back to the top, if when you reach the top you’re still dragging down (so that the view is doing the iOS rubber-banding effect), the view won’t dismiss. But once you release, if you drag down again, the view will dismiss. I didn’t want anyone to be casually scrolling up and suddenly the view disappeared on them. Here’s what that code looks like added to the code above:

import UIKit

class FormSheetViewController: UIViewController, UIGestureRecognizerDelegate {
    // scroll view must be dragged down this distance to be dismissed
    var scrollDistanceToDismiss: CGFloat = 50
    // tracks whether or not the scroll view should be dismissed if dragged down from top boundary
    var dragScrollViewToDismiss = true
    // tracks whether or not dragScrollViewToDismiss is ready to be set
    var dragScrollViewToDismissIsReady = false
    // stores the initial offset of the scroll view
    var scrollViewInitialOffset: CGFloat = 0
    // stores if the scroll view was loaded; guards overwriting scrollViewInitialOffset
    var scrollViewLoaded = false
    // gesture recognizer to test taps outside the form sheet
    var backgroundTapGestureRecognizer: UITapGestureRecognizer!
    // dismiss the modal and perform any other related actions (e.g. inform delegate)
    func done() {
        dismiss(animated: true, completion: nil)

extension FormSheetViewController: UIScrollViewDelegate {
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        // store initial content offset of scroll view
        if !scrollViewLoaded {
            scrollViewLoaded = true
            scrollViewInitialOffset = scrollView.contentOffset.y
        if dragScrollViewToDismiss {
            // if scrolling up, cancel dismiss
            if scrollView.contentOffset.y - scrollViewInitialOffset > {
                dragScrollViewToDismiss = false
                dragScrollViewToDismissIsReady = false
            // if scrolling down, dismiss view controller
            else if scrollView.contentOffset.y - scrollViewInitialOffset <= - scrollDistanceToDismiss {
    // if scroll view released beyond top boundary, set dismiss ready
    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        if scrollView.contentOffset.y <= {
            dragScrollViewToDismissIsReady = true
    // if scroll view drifts beyond top boundary, set dismiss ready
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        if scrollView.contentOffset.y <= {
            dragScrollViewToDismissIsReady = true
    // if scroll-to-top activated, set dismiss ready
    func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
        dragScrollViewToDismissIsReady = true
    // when tapping again on scroll view, set dismiss active
    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        if dragScrollViewToDismissIsReady {
            dragScrollViewToDismiss = true

Form sheets and modal views as a whole are important and useful tools for iOS app developers. Dismissing them could be a bit more user-friendly, and gestures—tapping outside the view and dragging down on the view—can accomplish that. I hope a future version of iOS gives developers out-of-the-box tools to do both and thus standardizes these interaction methods.

Until then, developers can use their own solutions like those above. If you have suggestions how I can improve tapping outside the view or dragging down on the view, please let me know. Now it’s time for me to swipe down on this and get back to work.

Tracking My Time with Workflow and Toggl

Thanks to Federico Viticci at MacStories, last year I started using Toggl to track the time spent on many of my tasks. I started initially for two reasons. First, the work I was doing at the time was hourly, and I punched in and out for the day and for lunch. Keeping an account of how long I had been working and how long I had been away at lunch ensured I didn’t end my day or my lunch too early or too late.

Second, there are sometimes long stretches of time when I’m doing something—from working on Partly Sunny to playing a game to just reading Twitter—where I have no idea how long I’ve been doing that something. Tracking my time has allowed me to, well, keep track of my time—it has allowed me to better understand what I’m spending my time on. And in the case of working on a project, it allows me to better understand how long something actually takes to complete.

When I started using Toggl, I made sure to not be militant with my time tracking. I’m not tracking everything I do to the point where I get so annoyed with it and want to print out the Toggl website and set fire to it. But things that are work related and tech related—the things I need to track or the things I’m most curious about tracking—I’ve been tracking.

To aid in this tracking, I’m using the indispensable (and hopefully long-lasting) Workflow. While the new Toggl app has improved over the previous version, it still is clunky to use and doesn’t offer ways to quickly start and stop time entries—like, for example, a widget or Apple Watch app or even 3D Touch shortcuts—and doesn’t have a native iPad app. This is where Workflow comes to the rescue. Federico discussed how he used workflows to start and stop Toggl timers when Workflow gained the ability to more powerfully work with web APIs. Later, in an edition of Club MacStories, he wrote about a new approach that used dedicated workflows for quickly starting and stopping timers.

Using his modified workflow idea, I created several workflows fashioned to how I use Toggl. For example, I have a Partly Sunny timer that when run asks what I’m working on (development, testing, replying to emails, etc.) and starts a time entry with that chosen thing as its description. I also have a Games timer that asks what game I’m playing. For this timer, I have several defaults (including Alto’s Odyssey, Really Bad Chess, Mini Metro, and Rodeo Stampede), but I also have an “Other” option. I built my workflows so that if I select “Other”, Workflow will prompt me to type in the other thing I’m doing that isn’t a preset in the list.

As I was creating my timer workflows, I kept pulling out portions of them that were the same in each and creating reusable workflows to embed with the Run Workflow action (I’m still happy this was added to Workflow. The Run Workflow action has allowed me to create many reusable workflows to run inside other workflows.). For example, the actions that create the encoded Toggl authentication became a separate workflow. The actions that processed the selected description choice and asked for input when “Other” was selected became a workflow. My goal was to pull out all the duplicate actions so that if I ever wanted to update these core actions I wouldn’t have to update them in ten or more places.

Eventually I reached the point where I thought creating a sort-of “super workflow” for starting time entries was the way to go. Rather than having several reusable workflows, could I have just one? Challenge accepted! For me, part of the joy of using Workflow is actually building the workflows and experimenting to see what I can do. It’s like visual programming—visual problem solving.

What I ended up creating is a workflow that takes as input a dictionary of project IDs and a list of descriptions. It does some parsing and starts a time entry accordingly. Here’s what the workflow looks like (select the image for a larger version):

super workflow

If I send the workflow more than one project ID or description, it asks which one I want to use for the time entry; if there is only one of either, it just uses that one project ID or description. And for the descriptions, if I select “Other”, the workflow prompts me to type in an other item. The workflow is also built to handle “None” for a description; choosing “None” starts a time entry with a blank description. Once this parsing and processing takes place, the workflow starts the time entry.

Because the super workflow does all the processing of IDs and descriptions and handles the Toggl API call that starts the time entry, I can more easily create other workflows that set up the timers or groups of timers. These timer-setup workflows then, with the Run Workflow action, run the super workflow. None of the timer-setup workflows contain any of the processing and handling actions, so if I need to adjust them in the future, I’m adjusting them in one place: the super workflow. Reusable code (sort of) for the win!

So what do the timer-setup workflows look like? They’re much simpler than the super workflow. Each timer-setup workflow contains a dictionary of project IDs and a list of possible time-entry descriptions associated with the project IDs. For example, my Partly Sunny timer workflow has one project ID—that for my Partly Sunny Toggl project—and a list of several possible descriptions: “Development”, “Testing”, “Replying to emails”, etc. The aforementioned games timer looks similar.

partly sunny timer

One of my other timers is a reading timer that has four project IDs in the projects dictionary (those for Twitter, Reddit, RSS, and Pocket) and one description in the list: “Reading”.

reading timer

You’ll notice there are a few more actions under the Nothing action. Each of these timer workflows do include a few more actions that package the projects dictionary and the descriptions list into a dictionary that gets sent to the super workflow, and then the super workflow is run. None of these actions are modified when duplicating a timer workflow or creating a new one.

So with this setup, how easy is it to create a new timer workflow for something new I want to track? Let’s do it. I’m working on a new app project (more on this later), so I’m going to create a timer workflow for it. First, since I don’t have a workflow for this, I create the project on the Toggl website (I suppose I could—should?—make a workflow to do this). Next, I get the Toggl project ID for it with another workflow (that I believe came from Federico at some point) that returns a list of all my projects and prompts me to choose the one I want the ID of. The workflow copies the project ID to the clipboard for easy pasting in the next step.

project ID workflow

Next, I duplicate an existing timer workflow and delete any project IDs and descriptions I don’t need for this new timer. In the projects dictionary, I type in the name of my project and paste in the ID. Then, in the descriptions list, I add any descriptions I want shortcuts for.

toggl timer

And that’s it. My new timer workflow is done. And it works in both the Workflow widget and the Apple Watch app.

Thanks to the indispensable Workflow, tracking my time with Toggl is easy and convenient. And thanks to the Run Workflow action, I can create reusable workflows to embed in other workflows instead of having duplicate actions in multiple places.

And a big thank you goes to Federico for inspiring me to not only better track my time but better track my time efficiently and conveniently with Workflow and Toggl.

Here are links to the various workflows:

If you have ideas or suggestions to improve these workflows, please let me know!

Happy time tracking!

My Home Screen Setup

I enjoy seeing what apps people use and how they’re arranged. In the past, I’ve shared my home screen on sites like, but recently I learned about the iOSsetups subreddit which is more active than the websites I previously used.

Here’s my current home screen (select to view a larger version):

home screen

These are the apps I use the most or I want easy access to. As for my wallpaper, I’ve been enjoying the built-in multi-colored dynamic wallpaper. Below are a few notes on some of the apps I have on my home screen.


For me, this is the gold standard of what a Twitter app should be. With thoughtful design and interactions, timeline sync, and more, Tweetbot is an all-around terrific Twitter app.


This is an indispensable app for connecting and combining apps and actions to automate tasks to save time and effort. This helps make things a little more efficient.

partly sunny

Partly Sunny
I’m the developer and designer behind this app that shows your weather in quick glances and detailed looks. If you just want a quick glance at what’s happening, Partly Sunny can show that. If you want a more detailed look at what’s happening in the next hour, day, or week, Partly Sunny can show that too. Whichever you prefer, everything is meant to feel at home on iOS. Some of the key features include: customizable hourly graphs; customizable conditions in current, hourly, and daily forecasts; interactive radar; a widget; and a dark mode.


A journaling app that collects manual thoughts and media and also automatically imports tweets, Instagram and Facebook posts, and other social-media feeds. I’ve been using Momento for several years now, and looking back at memories and what I was doing, thinking, and even tweeting years ago is something special.


I’ve tried several apps for navigating cities’ public-transportation systems, and Transit has stuck. Thanks to its ability to show nearby stops with realtime train and bus times and its active-trip mode that lets me know when to get off, whether or not I’ll make a connection, and what my ETA is, Transit helps me get to where I need to go on public transportation. Also, they often have fun release notes—a welcomed thing in the age of “bug fixes and performance improvements”.


I enjoyed using Alien Blue back in the day, but after it became the official Reddit app, it lost its charm and what made it a great app. Not being able to find a great replacement, I only occasionally browsed Reddit. But then Apollo came along. With its many customization options, the gestures, and the jump bar, it’s such a joy to use that I found myself browsing Reddit much more.


I recently started using this RSS reader, and one of the most notable things for me is it feels at home in iOS 11 with its design choices. Add to that it can fetch the full text of articles that get truncated in feeds, and this feels like an app with staying power.

clash royale

Clash Royale
I’m rather addicted to this game right now (send help?). Does anyone play? I’m looking for a more active clan.


A polished, powerful manual camera app. One of my favorite features is when in manual-focus mode, you can turn on highlighting of what’s in focus in the frame—immensely helpful when trying to compose a shot where I need a particular thing in focus.

launch center pro

Launch Center Pro
A sort-of speed dial for apps and actions that uses apps’ URL schemes to launch or deep-dive into the apps more quickly and efficiently.

And in my Dock:


Since iOS 9, the stock Music app has not been for me. Thankfully, Cesium exists with its customizable tabbed navigation, powerful list sorting and grouping, track details, queue editing, dark theme, and more. (I’m using an alternate icon to match the iOS 7 Music app color.)


This app is great for when I need to jot down a quick note. From there, I can decide what to do with it later or immediately perform an action or set of actions on the text and send it somewhere else like a message, a tweet, or elsewhere with a URL scheme.

One other note about my Dock: since iOS 7 introduced Control Center with its shortcut to Camera, I had the app buried in a folder on another screen. When my phone was unlocked, I used this shortcut to launch Camera. But with Control Center’s less-than-convenient placement on iPhone X, I brought back Camera to my home screen—changing my Dock arrangement for the first time in years—to have easy, quick access to Camera. Here’s hoping iOS 11.x finds a better way to access Control Center on iPhone X.

So that’s my home screen setup. January 2018 edition. As I like to tinker, no doubt this will get tweaked soon.

Project 365

Project 365

Photography is a creative outlet for me, and I’ve been wanting to take more photos for a while (especially now that I have an iPhone X). So, I decided to try a Project 365 photo challenge for the year: a photo every day in 2018. Let’s see how this goes!

Above are three of my photos so far. You can follow along on Flickr.

Partly Sunny 1.3

I’ve been working on a big update to my weather app Partly Sunny for many months now, and it’s finally done and available on the App Store. This is the biggest Partly Sunny update yet bringing you more tools and more options to help you check your weather.


This update introduces the Partly Sunny Club. With a monthly or yearly subscription, you can unlock additional features: interactive radar, yesterday’s weather, time machine, more saved locations, and custom app icons & colors.


If you’re worried this will fundamentally change the app, worry not. All the functionality that was in the app will remain—and even expand! The subscription will include new functionality on top of what was already there.

Why the subscription? I have to purchase the weather data that is shown in the app, so every time the app is opened and the forecasts are refreshed or radar is shown, that costs me money. With the subscription, I hope to offer more features that use more data while ensuring the app doesn’t become too expensive for me to maintain and continue to improve.

Whether (weather?) or not you’re in the Partly Sunny Club, there are many more new things in this update. In addition to iPhone X support, on iPad, you can now use Partly Sunny with Slide Over and Split View.


The condition that displays with high and low temperatures in daily forecasts and the condition that displays below hourly graphs can now be customized.


If you’d prefer Dark Mode automation, it can now be toggled automatically based on your device’s screen brightness or your selected location’s sunrise and sunset times.


But wait; there’s more! Moonrise and moonset times can now be displayed in Day View. More reliable and more accurate automatic location naming. iMessage stickers. Keyboard shortcuts.


After having been working on this update for a while—and learning new things in the process—having it done and available on the App Store is a huge relief. Just in time for any shiny new iOS devices you may be receiving for the holidays.

You can grab the update or download the app on the App Store.

iPhone X

iPhone X

You all weren’t kidding how crazy good iPhone X is. The device—especially the screen—is simply marvelous. Here are a few initial thoughts:

I don’t miss the home button. The swipe gesture is far superior. I just wish Control Center were integrated into that gesture. (Perhaps Control Center could be activated by continuing the swipe up gesture past activating the app switcher.)

Face ID is magic. I keep expecting there to be something else I need to do, but it just does its thing without me even thinking about it.

I do miss the 3D-Touch app-switcher gesture on X. The left/right swipe of the home indicator is fine but not as convenient.

I’m very curious for the future. What will iPhone X2 look like? What will Apple take from X to the rest of their product line?

Well done to everyone at Apple who brought us iPhone X. It’s the future, and it’s crazy good.


From this Apple Support tweet, I’m mesmerized by these animations. Does this little guy have a name? Does he ever get tired? What does he do when he’s not exercising?

Promote the General Welfare

(I tweeted all this earlier, but I’m including it here too.)

In the preamble of the Constitution are the words “promote the general welfare”. Why doesn’t health care count toward that?

Why should Americans have to worry about getting sick and not being able to afford health care? Why should Americans have to chose between treating illness or buying food and paying rent? Why should Americans not be free to quit their jobs and start their dream business without fear of losing their insurance? Why is single-payer Medicare acceptable for Americans 65 and older but not for Americans 64 and younger?

Health care should be alongside public schools, libraries, roads and highways, and police and fire protection. All things that promote the general welfare. All things that we don’t have to think about—worry about—being around or being able to afford.

We don’t worry whether or not the fire department will come if our house catches fire. Why do we have to worry whether or not treatment will come if we get sick?

Don’t Be the Product

Nicole Nguyen at BuzzFeed writes about the Uber/ news and more generally on free apps and services.

The fury is a good reminder of the ol’ Internet adage, “if you’re not paying for it, you’re not the customer, you’re the product.”

But some sites are much more egregious than others. So here are some ways you can assess an app’s trustworthiness and find out if your free faves are problematic.

I don’t use either, but the Uber/ news has me thinking about the “free” apps & services I do use.

If there’s only one thing you take away from this article, let it be this: there’s no such thing as a free lunch.

NFL Network Draft Coverage

I worked with the NFL Network on a new touchscreen graphic for their draft analysts to project what players could be drafted by what teams.

NFL Draft

Here it is in action discussing moves the Miami Dolphins could make:

And the New York Jets:

Jeff Sessions: Wrong for Attorney General

Protecting and ensuring civil rights is important to me—which is why I believe Senator Jeff Sessions with his record of being on the wrong side of America’s ongoing civil-rights fight is the wrong person to lead the department of justice.

I wasn’t happy to learn Senator Dianne Feinstein, one of my California Democratic senators, was not committing to voting against him.

So, I wrote a script to use for a phone call and an email to her office.

If civil rights are important to you too, please call your US senators and urge them to vote no on Jeff Sessions for attorney general. Feel free to use my script or modify it to explain why you are against Sessions.

You can find contact information for your senators on this senate page. Californians: here’s Senator Feinstein’s contact information.

And if your senator (or senators) is on the judiciary committee tasked with recommending or not recommending his nomination to the full senate, I doubly urge you to contact your senator(s). Here’s the committee and their phone numbers:

Senate Judiciary Committee

Here’s my phone script:

Hello, my name is Joe Hribar, and I am one of Senator Feinstein’s constituents from Los Angeles. I am calling to urge Senator Feinstein to vote against Senator Jeff Sessions for attorney general.

In 1986, he was deemed too racist by the senate for a federal judgeship. Since then, he has remained on the wrong side of America’s ongoing civil-rights fight with his opposition to the Voting Rights Act, the Violence Against Women Act, and the Hate Crimes Prevention Act as well as his support of suppressive voter-ID laws and a religious test to ban Muslim immigrants.

Senator Sessions is the wrong person to be entrusted with protecting and ensuring civil rights, and I urge Senator Feinstein to vote no on him for attorney general.

Thank you for your time and attention.

And here’s my email:

Hello, my name is Joe Hribar, and I am one of Senator Feinstein’s constituents from Los Angeles. I am writing to urge Senator Feinstein to vote against Senator Jeff Sessions for attorney general of the United States.

Senator Sessions has a clear record of racist and anti-equality positions and is therefore the wrong person to lead the department of justice.

In 1985, he wrongly prosecuted three civil-rights activists (they were acquitted), including an aide of Martin Luther King, for voter fraud.

In 1986, he was rejected by the senate for a federal judgeship largely because of his racist past. As part of his hearing, Coretta Scott King wrote the senate in opposition to Senator Sessions stating he would “irreparably damage the work of my husband” and that “anyone who has used the power of his office as United States Attorney to intimidate and chill the free exercise of the ballot by citizens should not be elevated to our courts.”

The department of justice is responsible for enforcing the Voting Rights Act. Senator Sessions has called it a “piece of intrusive legislation”. When the US Supreme Court in 2013 gutted the VRA, Senator Sessions called it “good news, I think, for the South.”

He is a proponent of the widely debunked claim of voter fraud and supports suppressive voter-ID laws.

Additionally, he has supported a religious test to ban Muslim immigrants, he voted against the Violence Against Women Act and the extension of the Hate Crimes Prevention Act, and he has consistently received a “F” grade from the NAACP.

Senator Sessions is the wrong person to be entrusted with protecting and ensuring civil rights, and I urge Senator Feinstein to vote no on him for attorney general.

I will be watching the vote closely. Should Senator Feinstein decide to vote in favor of Senator Sessions, I will be an active and vocal supporter of her primary challenger next year.

Thank you for your time and attention.

Joe Hribar
Los Angeles

Partly Sunny: Design Notes

When I set out to make Partly Sunny, my weather app for iPhone and iPad, there were a few design and technical solutions I knew I wanted to include: things like making custom icons and using specific APIs. These solutions would go toward building the weather app I wanted to use and would help differentiate Partly Sunny from other weather apps on the App Store.

What follows is a sort-of behind-the-scenes look at Partly Sunny. I’ll start with discussing some of the design solutions and show some draft designs, and in a subsequent post, I’ll discuss some of the technical solutions. Select any image below for a larger version.

From the start, one thing I wanted to include in Partly Sunny was a view that gave summary information for both my current location and for any saved location. I wanted a way to quickly glance at the weather for these places. But I didn’t just want some basic information like the current temperature and an icon representing the current condition (e.g. “clear” or “light rain”). I wanted this view to be more useful, so in Partly Sunny, the list view includes the current temperature and condition for each location but also offers more: a sentence stating what’s happening over the next many hours at that location as well as the high and low temperatures and the chance of precipitation for the day.


Whereas some weather apps might declare this to be too much information, I wanted this view to be useful for understanding what’s happening. A simple icon stating it’s clear right now doesn’t help in understanding a couple hours later it’s going to be pouring.

From this simpler-but-still-useful view, I wanted to be able to select any location to view more detailed information—what’s happening over the next hour, the next day, and the next week at that location.


And the key to help visualize this information was graphing it. While this isn’t a new solution to weather apps, some do it and some don’t, and I wanted Partly Sunny to do it. So looking ahead in the hour-by-hour forecast, there’s a visual representation of how temperature, chance of precipitation, humidity, wind speed, and more are changing.


And looking ahead in the day-by-day forecast, there’s a visual representation of the high and low temperatures over the week. Reading, for example, that the high temperature will be 55° on Monday, 68° Tuesday, 75° Wednesday, 52° Thursday, and 48° Friday is one thing. Seeing it rising and falling on a graph is another.


This experience was something I wanted to have on both iPhone and iPad. Some of the weather apps I had been using previously were iPhone only, and some of the iPad-friendly apps weren’t the best. So for when my iPad is in-hand and I want to check the weather, having Partly Sunny run natively on both iPhone and iPad giving me the same experience on both devices was a must-have.


Also a must-have was making custom icons. I know of several apps that use Climacons by Adam Whitcroft. They’re great icons, and I could have used them as well. But I wanted Partly Sunny to use its own icons. So I learned how to use Sketch and made my own. Here they are:


For the navigation bar, I made a system of icons using a dots-and-dashes theme.

Dots and Dashes

Sure, my icons aren’t going to win any design awards, but they’re unique to Partly Sunny, and that’s what I wanted.

Icon design wasn’t all I used Sketch for. I also, uh, sketched drafts of the various views in Partly Sunny. For example, here’s my first pass at the location view, a subsequent pass, and what it looks like in the app:


The list view went through a few explorations and largely ended up with version 4:


Sketch was also helpful in working out another design solution I wanted to include: a dark theme. I’m a proponent of having dark themes for apps so that in lower-light environments, the UI isn’t blinding me (I still wish iOS had some kind of system-wide dark theme).


Not all the design solutions in Partly Sunny were planned out from the start, of course, but these were many that were. My goal was to build the weather app that I wanted to use, and that goal included a few specific design and technical solutions. I hope those solutions are useful to you as well and help make Partly Sunny the weather app you want to use too!

Partly Sunny is available on the App Store for $2.99.

Next time, I’ll discuss some of the technical solutions built into Partly Sunny. Stay tuned!

Partly Sunny

For the past several months, I’ve been learning Apple’s Swift language and how to build iOS apps. Learning this has been something I’ve wanted to do for a while, so it’s been both a fun and rewarding challenge.

To bring together everything I’ve learned, I built a weather app—not because the App Store doesn’t already have enough of them but because the apps I like don’t do exactly what I want them to do. So I made my own because now I can.

Meet Partly Sunny:


Partly Sunny shows your weather in quick glances and detailed looks.

Some of the features of Partly Sunny:

Locations List

Quick glances of what’s happening in the sky at your current location and your favorite locations.


Location View

Detailed looks at what’s happening throughout the hour, the day, and the week at your locations.



Swipe up in location view to show a day-by-day graph with the week’s high and low temperatures plotted.


Day View

On the day-by-day graph, tap any day to see a detailed forecast for that day.


iPhone and iPad

Partly Sunny runs natively on both devices.


Dark Theme

Toggle between Partly Sunny’s light theme and dark theme in the app’s settings or with a handy gesture.


Hour-by-Hour Graphs

Tap on any hour-by-hour graph and choose to plot temperature, chance of precipitation, cloud cover, humidity, wind speed, or more.


Rain Graph

For U.S. & U.K. locations, a rain-intensity graph for the next hour will appear when it’s raining.


Pollen & NOAA Links

For U.S. locations, links will appear for pollen forecasts and the local NOAA weather office for winter-weather predictions, tropical forecasts, marine forecasts, and more.



Partly Sunny includes a widget to show both a quick glance and a detailed look at your current location’s forecast.


3D Touch

3D Touch the app icon for the widget and shortcuts. Peek and Pop in the locations list; the location view’s severe-weather alerts, pollen-forecast, and NOAA buttons; and the day-by-day graph.


Dark Sky

Partly Sunny forecasts are powered by Dark Sky to give you super-accurate data.

While you may not always enjoy the weather, hopefully you enjoy checking the weather with Partly Sunny.

Of course there are things I want to tweak and more features I want to add, but I’m proud of what I’ve accomplished so far. I set out to do a thing, and I did it.

You can visit Partly Sunny on the web at and follow @partlysunnyapp on Twitter.

Partly Sunny will be available on the App Store tomorrow is available on the App Store for $2.99.

Fired Up. Ready to Go.

(I tweeted all this earlier, but I’m including it here too.)

The election broke me. Twitter made me more depressed, so I took a break. But I’m back. And I’m ready to fight. I’m fired up & ready to go.

Perhaps you, like me, are looking for ways to start dealing with the reality of what’s coming. Let’s stick together and help one another.

It’s symbolic, yes, but it’s a start: wearing a safety pin in support of those who are afraid and possibly harassed.

But a pin isn’t all we should do. If we see casual racism around us, let’s help stop it.

All of us showing up, stopping Trump, and taking care of each other is important right now.

And while we work for change at the local level, let’s also work for it at a more national level by supporting new leadership at the DNC.

I’m with Bernie Sanders in supporting Keith Ellison to be the next DNC chair. I encourage you to support him too.


Things will be rough, but we’re all in this together. So let’s not give up. America is already great. Let’s keep it that way.

False Equivalence

(I tweeted all this earlier, but I’m including it here too.)

I’m not particularly fond of Hillary Clinton, but I get angry hearing people say she and Donald Trump are equally bad. Not even close.

Don’t believe me? Let’s start with this from conservative writer Conor Friedersdorf:

To regard [Clinton & Trump] as equivalently bad candidates for the presidency isn’t just absurd, it is reckless.

Still don’t believe me? Here’s Jamelle Bouie on Trump undermining US democracy & possibly inciting racial violence:

Violence and intimidation” incited by Trump “will be against the chief targets of [his] campaign: people of color.

Still don’t believe me? How about this from conservative writer and former-George-W.-Bush speechwriter David Frum. Frum on voting Clinton:

You’re not doing it for her. The vote you cast is for the republic and the Constitution.

Still don’t believe me? Here’s Seth Meyers:

One candidate is bad at email. The other is a racist, misogynist, xenophobic, ignorant, serial-lying, swindling, narcissistic man-baby.

Is either candidate a great choice? No. But they are nowhere close to being equally bad. And only one—Hillary—is qualified to be president.

Copying Efficiency in Workflow

Workflow by DeskConnect has become one of my most used and most indispensable iOS apps. With its powerful and efficiency-gaining functionality, Workflow is an app I use repeatedly throughout the day and take delight experimenting with.

If you haven’t used Workflow before, the app connects and combines apps and actions to automate tasks on iPhone, iPad, and Apple Watch. With the ability to create workflows ranging from choosing pre-written messages to send someone to changing the case of a text string to combining burst photos into GIFs to adding entries into, Workflow has hundreds of actions to create countless combinations however you see fit.

If you have used Workflow before, perhaps you’ve run into the same situation I have: you have a string of actions in one workflow you’d like to have in another workflow, and getting those actions in the other workflow requires you to recreate them one by one. Depending on how many there are, this can be rather vexing. What Workflow could use is the ability to copy actions from one workflow to another. How might that work? Like this.

Start with a new workflow:

New Workflow

Like usual, you swipe right to reveal the actions view:

Favorite Actions

From there, you drag a new “Copy Actions” action to the workflow:

New Workflow With Copy

At first, this action doesn’t do anything as it awaits further, uh, action in case you want to set something else up first. When you’re ready to copy actions from another workflow, tap the “Select” button and you’re presented with a new view containing all your workflows:

My Workflows

Choose the workflow that has the actions you want to copy, and the workflow slides in from the right with its actions grayed out and selectable:

Copy Actions Unselected

From there, select the actions to copy:

Copy Actions Selected

Once you select all the actions you want to copy, press the “Copy Actions” button at the bottom, and the view disappears to reveal underneath the new workflow with the selected actions in place of the “Copy Actions” action:

New Workflow With Copied

And there we have an easy way to copy actions from one workflow to another that both maintains and builds upon the existing foundation and interactions in Workflow.

But why stop there? Perhaps you noticed another new action in the favorites list: “Run Workflow”. The block of actions copied above really could be a reusable workflow that is called from multiple other workflows. You could use the above method to copy the actions into those other workflows, but what happens when you want to update that reusable workflow? You’d have to update it in multiple places. Nah.

Instead, what Workflow could also use is a “Run Workflow” action that pauses the workflow it’s in, allows the designated workflow to run and optionally return something, and then continues the original workflow. How might that work? Like this.

Using the actions above, create a new workflow that checks for input text or otherwise asks for input. Below that block of actions, drag a new “Return” action:

New Workflow With Return

In this case, the action would return text, but in other workflows, it could return an image, a URL, a date, and more.

Back in the original workflow, you can now delete that block of actions and replace it with a “Run Workflow” action:

Run Workflow Unselected

Like with the “Copy Actions” action, tap the “Select” button, and you’re presented with a new view containing all your workflows:

My Workflows

From there, select the workflow to embed, and the view disappears and updates the action:

Run Workflow Selected

When you run the workflow, it executes the embedded workflow to get or ask for text, returns the text, and proceeds with the rest of the workflow.

Now in the future if you want to build on this reusable workflow (for example by adding a string of actions to replace dumb quotes with smart quotes), you can make edits in one place and have all the other workflows that embed the reusable workflow enjoy those edits. That’s far more efficient.

And efficiency is what this is all about. Each new version of Workflow gets better and better with more actions to build more workflows to be more efficient. And I hope one day soon building workflows becomes a bit more efficient with the ability to copy actions from one workflow to another and the ability to embed one workflow in another. If I may quote Workflow, that’s powerful automation made simpler.

Copying Efficiency in Workflow

Favorite Film Scores of 2015

With the books closed on 2015, it’s time once again to share my favorite film scores of the year. As usual, while these may not be the best film scores of the year (although I wouldn’t be surprised if a couple of these earn Best Original Score nominations this month), they’re the scores I’ve had on repeat over the last year.

Previous entries: 2013, 2012, 2011.

Let’s begin our 2015 musical journey.

11. JUPITER ASCENDING — Michael Giacchino

Before the movie was released, I tweeted, “Michael Giacchino’s Jupiter Ascending score kiiinda makes me want to see that beautiful trainwreck of a film.” Well, I did end up seeing the film for its score. And the film did end up being a beautiful trainwreck. But the score certainly wasn’t. With its rich themes, large scope, and brimming excitement, this score launched a stellar year for Michael Giacchino who continues ascending in his own right.

10. ANT-MAN — Christophe Beck

I’ve written in the past lamenting over the lack of musical cohesiveness between the Marvel films and the disappointing thematic representation of the characters. And when Christophe Beck was announced as the composer of ANT-MAN, I tweeted, “Ant-Man has a composer, and it isn’t Brian Tyler. Will the Marvel scores continue to be a mess?”

While I’m not optimistic for what the future holds musically for the Marvel Cinematic Universe—especially since Brian Tyler, my pick as house composer, was sort-of-but-not-really replaced on AVENGERS: AGE OF ULTRON and Henry Jackman will most likely be back to rehash his abysmal CAPTAIN AMERICA: WINTER SOLDIER score for the next film—Christophe Beck did not disappoint with his score for ANT-MAN. Beck wrote a jazzy, snazzy caper score that was fitting for both the character and Alan Silvestri’s and Brian Tyler’s established musical world. Many of Beck’s scores tend to err on the generic side, but he wrote an inspired and enjoyable score for ANT-MAN.

9. WOLF TOTEM — James Horner

It’s difficult to reconcile 2015 will be the last year of new James Horner music (unless the story of him secretly composing music for Antoine Fuqua’s upcoming MAGNIFICENT SEVEN yields a surprise score later this year). Thankfully, 2015 included a score as good as this one from James Horner. With its beautiful and sometimes haunting melodies, lush orchestrations, and sweeping scope, this is James Horner at his best. It’s disappointing there won’t be more of this.

8. THE MARTIAN — Harry Gregson-Williams

Going into this movie and score, I wasn’t expecting much from the music given the rather derivative and uninspired scores for Ridley Scott’s recent films. After composing additional music for Scott’s last few movies, Harry Gregson-Williams was given the opportunity to compose the full score. And, unlike some of his previous ventures, fully compose he did. His score is contemplative, industrious, and, well, sciencey. He seems to have scienced the shit out of this score.

7. STEVE JOBS — Daniel Pemberton

A recurring theme in my list this year is enjoying scores by composers who have disappointed me in the past or by composers who are new to me. Daniel Pemberton falls into the latter category. Prior to this score and his MAN FROM U.N.C.L.E. score, I had not heard of him. But he’s now on my radar thanks to this eclectic score that delightfully took me by surprise. Given the varied styles running throughout the score, choosing one track to include here was difficult. The score has some electronic parts, some operatic parts, and some dramatic parts. And all of those parts form a rather pleasing whole.


As the JAMES BOND films have become more like the JASON BOURNE films, the MISSION: IMPOSSIBLE films have become more like the JAMES BOND films of yore: espionage, gadgets, and a grand, stylish orchestral score.

This film’s score is by Joe Kraemer who, like Daniel Pemberton, I was previously unfamiliar with but now eager to hear more from.

In addition to the bold, flavorful orchestrations, what makes this score great is that it honors its past with generous use of Lalo Schifrin’s original themes (the trill Kraemer inserts into the main theme in the first and last cues is rather tantalizing). The use of existing themes in a major franchise is refreshing as too often new-to-the-franchise composers don’t use other composers’ existing, established work for a franchise. For example, the post-John-Williams HARRY POTTER scores often seemed to forget the themes he composed. Sure, the later films were much darker, but a talented composer could take Williams’s themes and twist them into brooding, minor-key renditions. In the case of MAN OF STEEL, Hans Zimmer could have easily paid homage to John Williams’s work, but he didn’t. And in the case of Iron Man, he’s had three different themes from three different composers in three different films. So for Joe Kraemer to use Lalo Schifrin’s original themes not just bookending the film but all throughout is a welcomed change.

5. PAN — John Powell

PAN was going to fly right by me, but then I learned who was scoring the film: the semi-retired John Powell—one of my favorite film composers. Given his absence of late, it’s great to have a new John Powell score. It’s even better to have a new John Powell adventure score.

Strong thematic material, rich orchestrations, and sheer fun. These are all hoped-for things in a John Powell score. And he didn’t disappoint.

4. INSIDE OUT — Michael Giacchino

This score cruises through various emotions. Joy and sadness, of course, make appearances. As do excitement, hope, love, anxiety, and wonder. But even as Michael Giacchino writes for specific emotions, the score never feels disingenuous. As it runs through its ups and downs, the score feels authentic. And it doesn’t fail to put a smile on my face.

3. CREED — Ludwig Goransson

This score was a definite surprise for me. Prior to listening to it, I had not heard of Ludwig Goransson. But after this score, I’m interested in hearing more from him (the third instance of this on my list). The score is powerful, exciting, and a worthy successor to Bill Conti’s ROCKY scores. Though the score makes solid use of Conti’s original themes, the new themes Goransson composed are the stars and easily stand alongside the originals. They’re memorable, stirring, and noticeably come from the same family as Conti’s themes (especially noticeable when they’re used as counterpoint with Conti’s themes and vice versa). Overall, the music has a crisp and fierce sound. And it doesn’t fail to make me want to go out and find a punching bag.


Without a doubt, this was my most anticipated score of the year. I was expecting a healthy dose of the Force theme—my favorite of the series—and I wasn’t disappointed. While I might have also hoped for a return to the greatness of his THE EMPIRE STRIKES BACK score, John Williams’s writing is in a different place these days, and this score has more in common with the prequel scores than the original scores.

But that doesn’t detract from the dazzling work on display here; John Williams composed an outstanding addition to the franchise. Rey’s theme, developed as the score progresses, appears in several different treatments and is gorgeous. That theme and the Resistance March won’t leave my head.

1. TOMORROWLAND — Michael Giacchino

As if Frank Walker’s jetpack were strapped to it, this score rocketed to the top of my list early and remained there all year. There was only one other score that could have knocked it from the top. But THE FORCE AWAKENS didn’t, and here sits TOMORROWLAND as my favorite score of the year.

This score works incredibly well in its film—and outside of it—evoking the same sense of futuristic nostalgia and hopeful optimism as the film. The themes are as catchy as they are inspired. And the track above, “Pin-Ultimate Experience”, is hands down my favorite track of the year.

Too bad TOMORROWLAND wasn’t a bigger commercial and critical success because both it and the score deserve more recognition. Perhaps, like with another Brad Bird film that enjoyed success after its run in theaters, the future will bring a return to TOMORROWLAND.

With three of his four scores this year making my list and the fourth (JURASSIC WORLD) just missing it, it’s clear 2015 was The Year of Michael Giacchino for me.

What else is clear from my list this year: there are still directors who desire bold, orchestral scores for their films. And there are composers who can still deliver those scores. So here’s to some more orchestral magic—and some more pleasant surprises—in 2016. Huzzah.

P.S.: if you’re so inclined, here are selections from each of my favorite scores. I hope you enjoy. I sure did.

Improving the iOS Incoming-Call Screen

My friend is coming into town, and he messaged me to see about meeting up. So I start typing a response. Type type type. While I’m typing, I’m suddenly interrupted, I lose control of my screen, and I can’t finish what I was doing. What happened? I received a phone call.

Or maybe I’m looking up which train I need to take home to leave me enough time before I have to be on my way somewhere else. And bam. Incoming-call screen.

Or maybe I’m editing a video and trying to precisely trim the end of it. And bam. Incoming-call screen.

Whatever the task, the incoming call commandeers my screen and forces me out of the task I was performing.

Because the device is a phone and making and receiving calls is a primary function, let’s assume the incoming-call screen is here to stay. So how can the screen be just a bit less intrusive? I have an idea.

Let’s say my friend John Appleseed is coming into town and wants to meet up. A text conversation might go something like this:

JA: Hey, I’m in town tomorrow. Care to meet up? I should have time in the afternoon.

Yeah, so I just checked, and I’ll have the afternoon free. So I’m up for meeting if you are.

JH: Of course! I can let you know when my appointments wrap up. And then we can grab some food. Perhaps a movie too?

JA: Yeah, that all sounds good. What time are you thinking?

I begin typing my response:


…and bam. Incoming-call screen. Mom is calling:

Current incoming-call screen

On the incoming-call screen, I have a few options to deal with the call. I can accept the call, I can decline the call and send the caller straight to my voicemail, I can send the caller a text message, and I can set a reminder (with the last two requiring further steps). With the hardware side buttons, I have another option: silence the ringer. Although my phone stops sounding or vibrating, the call continues and after a period of time automatically goes to my voicemail.

When I receive a call I can’t (or in some cases don’t want to) take, I choose the latter. With the ringer-silencing option, the caller may think I’m unavailable. Or if the caller is an unrecognized number like from a marketing call, the caller may think the number isn’t actively used. If I decline the call, it sends the caller directly to voicemail letting them know I’m on the other end and deliberately ignoring them.

Choosing the latter, though, means I have to stare at the incoming-call screen until the call automatically goes to voicemail when I just want to get back to the task I was performing.

But what if I could dismiss or minimize the incoming-call screen without taking or declining the call? That’s what I propose.

When a FaceTime call fails, iOS presents a screen with three buttons: “Call Back”, “Cancel”, and “Leave a Message”:

FaceTime unavailable

Let’s take that middle button and add it to the incoming call screen. So now when someone calls, the screen would look like this:

New incoming-call screen

If I tap the new “Minimize” button, the screen would animate out of view while a notification banner would animate on:


Like when I press the volume buttons on the side of my iPhone, the ringer would silence, and the call would continue until it automatically went to my voicemail. But unlike when I press the volume buttons, I could resume the interrupted task.

Because phone calls—and the incoming-call screen—get an intrusive level of priority, the banner notification would as well. While the call continued until it automatically went to my voicemail, the banner would remain at the top of the screen.

While other banner notifications can be swiped up to dismiss them, this one would remain pinned to the top. If I tapped the notification, I would return to the incoming-call screen. Though I wouldn’t be able to swipe up on the notification to dismiss it, I would be able to swipe down on it to reveal action buttons:


Once the call automatically went to voicemail, the banner notification would disappear like normal as I continued my task.

Ideally, I would like iOS to ditch the incoming-call screen altogether and just present an actionable banner notification when I receive a call (like other notifications, it would be customizable to appear as an alert box instead). Maybe the banner would look something like this:


This way, there’s a far smaller interruption of my task. More of a distraction rather than a full interruption. The decline or accept buttons on the banner would do exactly that. If I couldn’t or didn’t want to take the call, I could still press the volume buttons on the side of my iPhone to silence the call and let it automatically go to voicemail. And if I swiped down on the banner, I could chose to be reminded or send the caller a message:


But assuming the incoming-call screen is here to stay and an actionable banner notification isn’t in iOS’s future, this new workflow could be a way to dismiss the screen without telling the caller I’m ignoring them.

Because I promise I’m not ignoring you, mom.

incoming call screen

Improving iPad Multitasking

Multitasking on iPad received an enormous update in iOS 9 in the form of Slide Over and Split View. But however advanced and, well, pretty cool both are, the execution of Slide Over has puzzled me since I first played with it. The list of apps available for multitasking is presented in an excessively roomy fashion—meaning finding the app you’re looking for can be unnecessarily difficult.

Jason Snell wrote this week about a few ways to improve iPad multitasking. After reading the article and finding myself in agreement, I mocked up some ideas last night based on his suggestions. Let’s start.

Here’s what Slide Over looks like currently on an iPad mini.

Current Slide Over

There are four (FOUR!) apps visible in the menu. Finding the app you’re looking for can result in scroll after scroll after scroll.

Jason wrote, “A denser design that presented the app list in a more straightforward manner would be welcome, especially when the list is long.” So what might that look like?

Compact Slide Over

I made the buttons a comparable size to a list view for familiarity, but perhaps they could be a smidge bigger. Also, I’m designing for an iPad mini, and I realize what looks good on the mini might not look good on the pro, so perhaps some dynamic resizing could be in order depending on the device.

I think this is already an improvement. Sure the list is still long (a product of having so many great apps!), but the compact nature reduces the amount of scrolling necessary.

In addition to the “denser design”, there is a search bar at the top. Don’t want to scroll to find the app you’re looking for? Search for it instead.

Also of note is the button shape. I retained the rounded rectangles with the idea of keeping a similar shrink-down animation when closing an app in Slide Over.

Now that more apps are visible, finding the app you want is easier. But what if there are a few apps you want quick access to in Slide Over. Why not pin them as Jason suggests? Tap “Edit Favorites” to enter edit mode. App icons and names slide over to reveal a star outline.

Add favorites

Tap the star, and the app animates into your favorites list.

Add favorites

(Since Twitter’s favorites and stars have recently found themselves unemployed, I put them to work here.)

Add favorites

Grips on the right of the buttons give you the ability to reorder your favorites as you see fit. Tapping a star on a favorited app would animate it back to the list of unfavorited apps. Tap “Done” to exit edit mode.

Add favorites

Now we have a more compact design, the ability to search for an app, and the ability to pin apps for quick access.

The final bit of functionality to add is the ability to save app pairings—app buddies as Jason called them. The idea here is to have quick access to two apps you like to use together in Split View. The current system, as he describes, can make getting those two apps together a pain. So how about favoriting an app pairing? In edit mode, tap “Add App Pairing” to open a popup with the list of available multitasking apps.

Add app pairing

Select two apps, tap “Done”, and Split View will now remember you want those two apps together.

Add app pairing

I imagine when selecting a paired favorite from the list, an elegant animation would animate the current app off the screen and the two selected apps into position. And tapping on the star of an app pair would simply delete the pairing.

Slide Over redesigned

So there you have it. While iOS 9 introduced great new multitasking tools, selecting apps to multitask with can be a chore. But a few tweaks and some new bits of functionality could go a long way to improving iPad multitasking.

Slide Over redesigned

Singing the Apple Music Blues

Lost in recent Apple Music discussions is how the usability of navigating on-device music has been unnecessarily over-complicated. Apple’s focus on Apple Music the service has seemingly come at the expense of Apple Music the app.

Along with Apple Music the service, iOS 8.4 brought a new organization scheme to Apple Music the app. Previously, the bottom navigational tabs in the app were customizable. I could choose four of Playlists, Albums, Composers, Genres, Songs, Compilations, Artists, and Radio.

Customizable Tabs

To jump from one list of items to another involved a single tap (provided both were present in the customizable tabs). For example, say I wanted to navigate from my list of composers to a specific album. Let’s say I want to listen to a track on the Tomorrowland score. Before 8.4, I would tap the Albums tab, tap the T in the letter slider along the righthand side, scroll to reveal Tomorrowland, and select the Tomorrowland album. Four steps.

Navigating in 8.3

In 8.4, that process has become more complicated. To navigate from composers to Tomorrowland, I tap the status bar to scroll the list of composers to the top, tap the sort button, select Albums, scroll the Recently Added section out of the way, tap the T in the letter slider along the righthand side, scroll to reveal Tomorrowland, and select the Tomorrowland album. Seven steps.

Navigating in 8.4

The steps to navigate are nearly doubled. I could search for the album or track I want to listen to, but I shouldn’t have to rely on search to navigate. While Apple Music the service has made streaming favorite artists and albums easier, Apple Music the app has made navigating on-device artists and albums harder.

In Settings > Music, if I toggle off “Show Apple Music”, the “New” and “For You” tabs in Music are replaced with a Playlists tab.

Toggle off Show Apple Music

And in Settings > General > Restrictions, if I toggle off “Apple Music Connect”, the Connect tab in Music disappears.

Toggle off Apple Music Connect

Why make customizing this row of tabs buried and convoluted especially since in the previous version of the app this customization was forefront and simple?

Navigating my music isn’t the only frustrating new thing about Apple Music the app. The Now Playing view features album art positioned flush against the top of the screen. This top-heavy design makes the whole view unbalanced. And the album art’s new position means the status bar covers the art—making for situations were the status bar is illegible.

Now Playing view

While the new Apple Music the app has become fraught with usability frustrations, the app does have two new features in particular that are welcomed additions.

First is the Up Next feature similar to iTunes on the Mac to show all the upcoming tracks to play. This is especially helpful to create an on-the-go playlist that iPods of yesteryear could create. Here, I can reorder, remove, or add tracks to the currently playing list of tracks.

Up Next

Also of note is the ability to add the currently playing track to a playlist. If I am listening to a particular track and think, “Gee, this would fit really well in X playlist”, I can immediately add the track to said playlist by tapping the ellipsis button and “Add to a Playlist…”. Previously, I would have to browse to the playlist, tap on Edit, tap +, and find the track in the library.

Add to Playlist

While these two new features are great usability additions to Apple Music the app, they don’t overcome the larger usability frustrations of the redesigned app. These frustrations are enough to have me experimenting with alternative music players. I’m hoping a future version of Apple Music the app restores easy customization of the tabs—and thus also restores the superior usability of the old app.

Nagle. Hribar. Oscars. Part III.

Who doesn’t enjoy a little friendly competition? Like last year and the year before, my friend @nagle and I made Oscar predictions. I’ll update this throughout the evening as winners are announced. Two years ago, I beat him by one point. Last year, we tied. This year, if the trend continues, he should beat me by one point. Given our predictions differ in two categories, that just might happen.

UPDATE: Another tie. Well done, sir. Well done.

Nagle: 20
Hribar: 20

Below is a breakdown of each category with the winners in bold.

Nagle: Birdman
Hribar: Birdman

Nagle: Eddie Redmayne (The Theory of Everything)
Hribar: Eddie Redmayne (The Theory of Everything)

Nagle: J.K. Simmons (Whiplash)
Hribar: J.K. Simmons (Whiplash)

Nagle: Julianne Moore (Still Alice)
Hribar: Julianne Moore (Still Alice)

Nagle: Patricia Arquette (Boyhood)
Hribar: Patricia Arquette (Boyhood)

Nagle: How to Train Your Dragon 2
Hribar: How to Train Your Dragon 2
Neither: Big Hero 6

Nagle: Birdman (Emmanuel Lubezki)
Hribar: Birdman (Emmanuel Lubezki)

Nagle: The Grand Budapest Hotel
Hribar: The Grand Budapest Hotel

Nagle: Birdman (Alejandro Iñárritu)
Hribar: Boyhood (Richard Linklater)

Nagle: Citizenfour
Hribar: Citizenfour

Nagle: Crisis Hotline
Hribar: Crisis Hotline

Nagle: Boyhood
Hribar: Boyhood
Neither: Whiplash

Nagle: Ida
Hribar: Ida

Nagle: The Grand Budapest Hotel
Hribar: The Grand Budapest Hotel

Nagle: The Theory of Everything (Jóhann Jóhannsson)
Hribar: The Grand Budapest Hotel (Alexandre Desplat)

Nagle: “Glory” from Selma
Hribar: “Glory” from Selma

Nagle: The Grand Budapest Hotel
Hribar: The Grand Budapest Hotel

Nagle: Feast
Hribar: Feast

Nagle: The Phone Call
Hribar: The Phone Call

Nagle: American Sniper
Hribar: American Sniper

Nagle: Whiplash
Hribar: Whiplash

Nagle: Interstellar
Hribar: Interstellar

Nagle: The Imitation Game (Graham Moore)
Hribar: The Imitation Game (Graham Moore)

Nagle: The Grand Budapest Hotel (Wes Anderson, Hugo Guinness)
Hribar: The Grand Budapest Hotel (Wes Anderson, Hugo Guinness)
Neither: Birdman

Nagle. Hribar. Oscars.

Who doesn’t enjoy a little friendly competition? Like last year, my friend @nagle and I made our Oscar predictions. The final score:

Nagle: 20
Hribar: 20

Below is a breakdown of each category with the winners in bold. Until next year!

Nagle: 12 Years a Slave
Hribar: 12 Years a Slave

Nagle: Matthew McConaughey (Dallas Buyers Club)
Hribar: Matthew McConaughey (Dallas Buyers Club)

Nagle: Jared Leto (Dallas Buyers Club)
Hribar: Jared Leto (Dallas Buyers Club)

Nagle: Cate Blanchett (Blue Jasmine)
Hribar: Cate Blanchett (Blue Jasmine)

Nagle: Lupita Nyong’o (12 Years a Slave)
Hribar: Lupita Nyong’o (12 Years a Slave)

Nagle: Frozen
Hribar: Frozen

Nagle: Gravity (Emmanuel Lubezki)
Hribar: Gravity (Emmanuel Lubezki)

Nagle: The Great Gatsby
Hribar: 12 Years a Slave

Nagle: Gravity (Alfonso Cuarón)
Hribar: Gravity (Alfonso Cuarón)

Nagle: The Act of Killing
Hribar: The Act of Killing
Neither: 20 Feet from Stardom

Nagle: The Lady in Number 6
Hribar: The Lady in Number 6

Nagle: Captain Phillips
Hribar: Gravity

Nagle: The Broken Circle Breakdown
Hribar: The Great Beauty

Nagle: Dallas Buyers Club
Hribar: Dallas Buyers Club

Nagle: Gravity (Steven Price)
Hribar: Gravity (Steven Price)

Nagle: “Let It Go” from Frozen
Hribar: “Let It Go” from Frozen

Nagle: The Great Gatsby
Hribar: The Great Gatsby

Nagle: Get a Horse
Hribar: Get a Horse
Neither: Mr. Hublot

Nagle: Helium
Hribar: The Voorman Problem

Nagle: Gravity
Hribar: Gravity

Nagle: Gravity
Hribar: Gravity

Nagle: Gravity
Hribar: Gravity

Nagle: 12 Years a Slave (John Ridley)
Hribar: 12 Years a Slave (John Ridley)

Nagle: Her (Spike Jonze)
Hribar: Her (Spike Jonze)