Panels, Popovers and iPad Pro

20 January 2014

If the iOS device lineup consisted only of iPods and iPhones1, I think Apple’s mobile OS could continue quite happily as a siloed one-application-at-a-time environment for many more years.

However, the iPad puts a spanner in the works. Everyone is realising for the iPad lineup to keep expanding, iOS has to grow up. The decision to run the iPad on iOS brought all the benefits of a lightweight power-efficient core, but it also brought the less-desirable characteristics as well. Most of these deficiencies don’t matter on a phone but become clear downsides on a tablet.

iPad hardware is outstripping the capabilities of the OS it runs … already. With the potential of an even bigger-screened slate on the horizon, in the form of an ‘iPad Pro’, the need to develop iOS’s multitasking and productivity workflows is more important than ever.

That being said, at the same time, users do not want to sacrifice iOS’ trademark intuitive simplicity either. That is why people love iPads and iPhones as much as they do. “Professional” does not mean complicated.

Therefore, any improvements Apple makes to iOS need to satisfy both of these criteria, to be both straightforward and advanced. It sounds paradoxical, but what realistically can be done?

Windowing is the response everyone wants to give. Let two apps live side by side onscreen. Done. Of course, it’s not that easy. On a desktop, windowing is implemented in a way that adds hierarchy, because windows can stack and occlude other windows. I think its clear to pretty much everyone by now that window management is not desirable for touch interfaces. Resizing is just too fiddly — Samsung proves this point perfectly with its latest TouchWiz stuff.

With Metro, Microsoft enforces constraints on how apps can appear side-by-side. The result is users can quickly “snap” a secondary app as a sidebar, taking up about a third of the display’s width, from anywhere in the UI with just a quick swipe from the edge of the screen. Not only easy, but understandable.

I think Apple could implement this limited form of windowing, in a way that builds upon the established platform that already exists. I mocked up what this would look like in practice, but let me elaborate on the technical details a bit further. With the iPhone 5, Apple stretched the iPhone screen resolution vertically by 176 pixels. Developers were forced to invest time making their apps’ layout vertically flexible so they looked on the iPhone 5. Effectively, Apple has seeded the app ecosystem to react to respond to changing vertical screen heights.

So, if Apple set the width of the sidebar panel to be the width of the current lineup of iPhones (640 pixels), the amount of additional work developers would have to do to adapt to the new system would minimise, because apps are already used to living in environments that are 640 pixels wide and have flexible heights.2 Essentially, when docked in the sidebar, iPad apps would render like elongated iPhone apps.

Taking this ‘panelling’ concept in a slightly different direction, iOS could do with some way to open apps in a more transient manner. With iOS 7, if you want to check Tweetbot, you have to make a concerted choice to leave what you are doing and switch. For things like Twitter, that doesn’t really make sense a lot of the time. I’d love to be able to peek at an app over-the-top of whatever I’m currently doing. Imagine something similar to how iPad Mail behaves in portrait, where the message list can be popped out with a swipe and dismissed just as quickly without losing the context of your current actions completely. This kind of approach is better suited to the 9.7inch iPad form factor we have today, as the system doesn’t need to dedicate a portion of the screen to a secondary app — it just shows and hides over the top of the current primary app.

Multitasking isn’t the only problem to tackle, of course. Ideally, iOS apps should be able to coexist and cooperate between each other. Popovers are an excellent way to expose this in UI, because of their self-contained nature. Apple already does this with integration with the stock apps: presenting a picker for photos, contacts or events in a popover is already common practice on the iPad. Apple just needs to extend this to support third-party datasources. Developers could provide UI that other developers can present to users as a modal popover, without waking up the entire app. XPC would ensure that data transfer between applications remains secure.

Apps should also have the capability to be ‘faceless’, so that other apps can query for data without needing any intermediary UI. This would enable apps like to draw on information available in other apps without pushing additional UI. For example, GarageBand could import sound-clips from apps like djay or Animoog in addition to the Music app. Similarly, a word processor could retrieve definitions from the users’ preferred dictionary app rather than stick to whatever the developer bundled with the app.

The notion of such deep access will undoubtedly sprout fear about data corruption from external sources, malicious or otherwise. However, this system of information exchange does not have to work in both directions. Read-only access alone would be enough to mature the iOS platform significantly.

In many ways, this system would end up being more sophisticated than what is available on OS X. The technologies that will enable this stuff to become reality exist in iOS today, such as remote view controllers, and are already used by Apple extensively for their own apps. Challenges arise when scaling up for third-party use, questions such as ‘which app gets priority for photo management’ are an issue.

In spite of the complexity, I strongly believe progress in this area is necessary … to make up for the shortcomings of a largely siloed OS. OS X doesn’t need this stuff because everything goes through a centralised filesystem, which iOS obviously lacks.

1 Watches?

2 Moreover, the design of most iPhone apps lends well to tall viewports. Most apps are navbar, tableview, toolbar. Just increase the height of the tableview indefinitely to fill the additional space.