[ Music ]
[ Applause ]
It's great to be back on stage at WWDC.
I'm really happy to talk to you guys about designing iPad apps for Mac.
Now, many of you here today have created awesome apps for iPad already, apps that help people be more productive, more creative, apps that entertain, that educate, that help people connect and communicate with each other.
We want to make it easy for you to bring those great experiences to Mac.
With keyboard and mouse or trackpad input, people can work with greater precision and speed.
Flexible windows allow for efficient and fluid multitasking workflows.
And larger display sizes allow your app to present more information and actions at once.
Of course, some iPad apps just won't make sense on Mac.
Some used cases like navigation or augmented reality aren't suitable for a stationary computer.
And apps that rely on iPad hardware features like the gyroscope or rear-facing camera won't really make sense on Mac either.
But, for the rest of you, coming to Mac is a great way to offer the people who use your app with a more efficient and immersive experience.
The first step in bringing your iPad app to Mac is to start with a solid foundation.
Your iPad app should support features like multitasking and drag and drop as well as Auto Layout.
As we all know, Mac windows can be arbitrarily resized.
By fully supporting Auto Layout in your iPad app, your interface will be resizable on Mac.
Similarly, if your app supports drag and drop, you're one step closer to having a great Mac app.
We expect just about everything on Mac to be draggable and droppable.
Now yesterday, we introduced the ability for iPad apps to have multiple windows, like drag and drop, opening documents into their own windows is something that we all expect on Mac.
If your app supports this feature, you'll automatically get multiple windows support on Mac as well, which brings me to the next topic.
What do you get for free?
Free is good, right?
To make the task of coming to Mac easier, many iOS interfaces and interactions will automatically be adjusted to macOS equivalents.
iOS split views will be drawn as split views on Mac, system-provided UIs like the file browser and activity view will be remapped to platform appropriate equivalents.
Edit menus and iOS contextual menus will automatically be presented as contextual menus on Mac.
Copy and paste, rich text editing, and key focus all come for free as well.
Now in all of these cases, the mapping between iOS and macOS is relatively straightforward.
However, there are some key differences between macOS and iOS.
Designing an app that feels appropriate for each platform involves understanding and accounting for those differences in your app.
The biggest and most critical difference is that iOS was designed for touch, whereas mac was designed for keyboard and mouse input.
Designing for touch involves offering touch targets that are larger and easier to access, especially when you're walking or moving around.
On Mac, using a trackpad or mouse provides physical stability and greater control.
And because pointers are small, people can target and manipulate interface objects with greater precision.
Smaller controls also allow Mac UIs to have greater information density or greater control density.
All iOS devices support Multi-Touch gestures like pan, rotate, and pinch.
Some Mac setups don't have Multi-Touch input.
So, if there's any interactions in your app or any actions that rely on gestural input to be performed, you have to find alternatives for the Mac.
When an iPhone is held with one hand in portrait orientation, placing controls in the middle or the bottom of the screen might make them easier to reach.
So and the same is true for iPad in landscape orientation.
People tend to grip on the sides, so placing controls on the left or right side may make them easier to reach there.
Obviously, on Mac, people do not hold or displace when they use them.
Placing controls along the bottom, the left or the right edges provides no ergonomic benefit whatsoever.
Every area of the screen is just as easy to reach as every other area.
And, speaking of displays, you'll need to consider how your Apple look on 1x non-Retina displays.
Special care must be given to assure that glyphs in text look crisp and legible.
Look, I know, we all basically understand that touch devices are different from desktop computers.
But what's less obvious is how interaction models and design patterns vary between iOS and macOS.
These differences are the key to successfully translating your iPad app's design to macOS.
So, with that in mind, let's get into the details about how to design iPad apps for Mac.
As you can see, we have a lot to cover.
You really may want to take some notes.
OK. Let's keep going.
Nothing is more critical to an app's design than how it's architected.
A logical and intuitive app structure helps people to find what they're looking for and it streamlines navigation.
iOS apps tend to be structured in one of three ways.
Some apps use tabs for organizing information into a small number of top-level sections.
Some present a top-level list of sections in a table view.
And some document-focused apps use they use a file/folder metaphor, might have a document browser UI at the top level.
The chances are that your app matches one of these three archetypes.
The simple path is to find the closest macOS equivalent and just use that.
For tabbed apps, you could use a segmented control in the toolbar.
If your top-level navigation is a master list, you can do nothing and it'll show up as is on Mac, same thing with a document browser UI.
A direct translation of your app structure from iOS to macOS might be the right way to go.
It provides one key benefit.
It'll make the Mac version of your app instantly familiar to the people who are familiar with your iOS app already.
On the other hand, you might be missing out on an important opportunity to streamline navigation.
On Mac, sidebars are a powerful navigation tool.
They easily accommodate a large number of options that can be grouped and labeled to help provide additional context and make them easier to scan.
So, if you currently have a tabbed app, you could present those tabs in a segmented control or you could put them into a sidebar.
Now, this obviously does not look great.
It's not a very effective use of screen space.
But if those four tabs have subsections, you can display those subsections in line.
This greatly flattens an app's hierarchy and allows people to move directly between subsections.
It can even allow people to customize these items to their needs.
As we saw before, if your app has top-level list or table view for navigating between sections, that translates directly.
Split views are the way to get a sidebar on Mac.
You just enable the translucent background and you're good to go.
And lastly, if your iOS app shows a document browser at the top level, you can use a sidebar for providing persistent access to folders or for displaying saved searches.
If you use a sidebar, there are two things to keep in mind.
First, sidebars are providing access to locations within your app or collections of documents.
They're not really meant for showing the documents or other kinds of content directly.
Second, the sidebar plays an important role in helping people understand which window or app has key focus.
Glyphs, selection highlights and the sidebar background itself are stylized to appear translucent when the current window is active.
This effect goes away when the window becomes inactive.
Knowing which window is going to respond to keyboard input is super important.
To support this effect, use a translucent background.
Don't fill the sidebar in with a solid color or an image or pattern or anything like that.
For selection highlights, use the system selection color rather than a custom color or like an app tint color.
And in general, you should use template images that have a vibrancy effect applied rather than full color images unless it's necessary.
OK. Next, let's talk about toolbars.
Toolbars are commonplace on the Mac.
And chances are, you'll want to use one for your app.
Placing controls into a toolbar makes them more discoverable.
And it leads to a more stable user experience.
Toolbars create a top-down information flow which is the norm for Mac apps.
If your iPad app has any actions that are located along the bottom edge of the screen, doing the same thing in a Mac window can be very problematic.
Mac windows are draggable.
The bottom edge of Mac windows might be dragged out of you, or below the dock.
Clearly this leads to some usability issues.
When putting actions into the toolbar, keep in mind that a toolbar's contents don't change based on what area of an app someone is in.
If they can't be used in a certain area of the app, they'll be disabled.
But toolbar action should only really get disabled if nothing is selected for them to act upon.
So, if actions are only relevant in specific areas of your app, they probably should not be in the toolbar.
That said, you can provide contextually relevant actions in an action menu.
Action menus can dynamically change based on the current view or selection.
For example, with a file selected in a Finder window, the action menu includes actions that can be performed on the file.
And with nothing selected, the action menu contains commands that can be performed on the current folder that we're viewing.
Now, action menus are not meant to be a catchall.
So be selective about what you put into them.
OK. Next, let's talk about layout.
Mac windows are much, much, much, much larger than iPads.
You'll have much more space to play with, especially in full screen.
But taking advantage of all of that space requires a layout that's optimized for iPad.
Now, some iPad layouts are just blown-up iPhone interfaces, which looks really bad on an iPad.
And it looks even worse on a Mac especially in full screen.
Optimizing your layouts for iPad and Mac requires special consideration.
For both devices, readable content margins keep text lines from getting too long so that they remain readable.
Breaking content into multiple columns can be a great way to maximize information density and using split views or master-detail views is a great way to utilize a wider display.
Split views streamline navigation by simultaneously displaying a list of objects and details about that object which reduces the need to navigate into and back out of an app hierarchy.
If you have a Split View in your app, it'll work great on Mac without modification.
Now, this may sound a little bit strange but making your layout work great on a Mac is probably the best way to identify and address layout issues for Mac for iPad.
OK. Moving on to type.
On macOS, the baseline font size is 13 points.
Most controls and labels use that font size.
On iOS, the baseline font size is 17 points.
Showing an iOS app with 17-point type on a Mac would look totally out of place.
Text would be way too large.
So, to maintain consistency between Mac apps, the system will scale content areas down by 77 percent.
Seventy-seven percent, of course, as we all know, I don't even know if I'm pointing this out, is 13 divided by 17.
Everything in the main interface will be scaled uniformly.
This approach means that you don't have to redesign or recode every screen for macOS.
But it does introduce a bit of complexity on the design side.
When creating mock-ups of your iPad app, you'll want to recreate that 77 percent scale.
So in Photoshop, for example, you can put your entire content area into a smart object and scale it down to 77 percent.
And you can do similar things in Sketch, XD and other design tools.
On macOS, apps tend to only use a few different font sizes.
On iOS, text styles very much more dramatically.
Text styles, the typographic system for iOS and they offer a wide range of size options.
Using some of the smallest size like footnote, caption one, caption two, can make text that's difficult to read on Mac.
Even the Mac size mini is often too small.
So, just you may find that you need to bump up text a little bit to keep it legible on Mac.
And, one final note about type, macOS doesn't support dynamic type.
We'll always use the large size setting, it's just scaled down 77 percent.
OK. Now with iOS, every app has it in color which is used to show when elements are interactive or to highlight selected items.
Some apps go further by colorizing content area or bar backgrounds.
On Mac, things are a little bit different.
It's common for people to have lots of open windows with lots of content in those windows and lots of files and folders on their desktop.
If macOS used color like iOS apps, the user experience would be really fragmented and overwhelming.
Mac interfaces should be more neutral.
They shouldn't compete with a content that they present to people.
What people are that's what people are really interested in.
At the same time, translucency integrates your app into the Mac ecosystem.
We all like to customize our desktop pictures and translucency lets those desktops influence how apps look and it brings them altogether into one cohesive experience.
Similarly, on Mac, highlight colors are a personal preference.
If your app uses a different color to highlight selected items, it'll feel really out of place and it'll be downright confusing for the people who use your app.
It's worth pointing out actually that iOS is becoming a little bit more like macOS with respect to color.
With multitasking, apps are seen alongside each other far more often.
A consistent visual look provides a unified user experience.
With Dark Mode, people expect more control over how apps will look on their device.
Apps that don't respond to their personal preference will feel out of place.
And, tint colors play a smaller part as well.
Steppers and segmented controls that used to be tinted are now neutral with iOS 13.
OK. And one last comment about color.
As some of you may have heard already, the system colors on iOS have been completely overhauled.
If you use these colors for your iOS app, they'll get remapped to macOS equivalents for both light and dark modes.
OK. Moving on to gestures.
UIKit gestures will automatically remap to trackpad or mouse events.
Single tap will be the same as a mouse-down event.
Long press will be mouse down and hold.
Pan will be the same as a mouse drag.
And the swipe gesture will be remapped to a drag in the proper direction.
On trackpads, pinching and rotating will work but they'll behave a little bit differently.
On the iPad, pinch and rotate use the middle point between touches to target objects or center the rotation and scale operation.
On Mac, the cursor's location will be used for these purposes.
Screen edge swipes won't be remapped for obvious reasons.
And depending on how you've used gestures, you may have some work to do.
Some gestures just won't translate very well to Mac.
For example, pulling a scroll view to refresh its contents doesn't translate that well on the Mac.
For any actions that are triggered by gestural input, you'll want to find an alternative way to perform that action.
You can use many bar menus, contextual menus or buttons in the toolbar or all of the above.
And one last note on Mac, you'll be able to receive mouse hover events.
You can use this to display additional information about whatever the pointer is over.
So for example, pressing the stock chart in the Stocks app on iOS reveals the price of a specific point in time.
On macOS, rolling over the stock chart reveals the same information.
You should definitely take advantage of hover states.
There're a powerful way for people to get information without needing to change their selection.
You'll also be able to create touch bars for your iPad apps on Mac.
Touch bars are a great way for displaying contextually relevant information and you can show different touch bars based on what area the app people are in or even what's selected.
Most touch bar components and controls are available for you to use.
Now, touch bars deserve an entire talk of their own.
It's way too much to get into here.
But you can learn more about touch bars in the macOS HIG.
OK. Next up, app icons.
Mac app icons are the face of your app.
They help differentiate your app from dozens or hundreds of other apps that people may have installed.
And they show up all over the place, in the dock, app switcher, Launchpad, application folder and more.
By default, your iOS app icon will show up more or less as is, a square image that's masked by a continuous curve shape.
A subtle drop shadow will be applied so that it fits in a bit better with the other Mac app icons.
You can choose to stop here, or you can go the extra mile.
And I encourage you to do so.
Because of Mac app icon so much more visible, it really pays to have a great icon.
Mac icons have different design characteristics than iOS icons.
They're not simply squares with rounded off corners.
Mac app icons have unique silhouettes to stand apart from other app icons.
At smaller sizes, those silhouettes can help keep icons easily distinguishable from each other.
And, speaking of size, on a 1x display, app icons in the Finder are only 16 pixels tall by wide.
At this size, every pixel counts.
So it's a good idea to create pixel hinted icons at the smallest app icon sizes.
Mac app icons are, of course, crafted to accurately depict physical real-world objects.
Many icons are rendered in 3D software so they have realistic lighting and material effects.
We have lots of information for you to reference about camera perspective and light source in the HIG if you choose to go this route.
We're almost there.
I know it's a lot.
Second to last is contextual menus.
Contextual menus are the unsung heroes of Mac app interfaces.
They let people know what actions can be performed on an object and they bring actions right to the pointer which completely removes mouse trouble.
On Mac, people basically expect contextual menus everywhere.
So, it logically follows that you should add contextual menus to everything.
Any object in your app should have an associated contextual menu that contains the most commonly performed actions.
If you've added contextual menus for your iOS app, they'll automatically be brought to macOS contextual menus.
And the same is true for edit menus.
Whether you're designing contextual menus from macOS or iOS, the same basic rules apply.
Here are six quick tips to keep in mind.
First, avoid overwhelming people with too many options.
Too many options makes it harder for people to find what they're looking for and it leads to menus that take a long time to scan.
Focus on the most contextually most relevant functionality only.
Next, be succinct.
One-word labels are typically sufficient.
When writing labels, convey action, use verbs or verb phrases that suggest what the results of the action will be when it's performed.
Also, the order of commands is very meaningful.
Put the most important stuff at the top and then group related items together.
Going one step further, use separators to make the relationships between commands explicit.
Grouping commands together can be very meaningful and it helps people skip past entire sets of commands when they conceive from the first one or two that it's not going to be relevant to their current needs.
And lastly, use submenus to control menu length and hide away actions that aren't relevant.
Submenus are a classic example of progressive disclosure.
They simplify decision making by reducing complexity.
OK. Now the last major consideration that I'd like to discuss today are menu bars.
Every app has a menu bar.
Menu bars are core to the Mac experience, go back all the way to 1984.
Menu bars were key to what made computers easy to use.
Designing your app's menu bar begins with this super fun exercise.
You write down all of the actions that a person can perform in your app and I do mean all of them and then you take note of what object or objects those actions affect.
Not only is this exercise excruciatingly fun, but it's also necessary.
Every action that someone can perform in your app should be available from the menu bar.
This makes them easier to discover and lets people assign keyboard shortcuts to them.
It also makes them more accessible to people who are using full keyboard access.
Once you've cataloged all of those actions, you'll need to find a place for them to go.
macOS includes a standard set of menu items menu options like the app menu for commands that work operate on the app, file menu for commands that operate on files, edit menu for commands that operate on the content or objects within those files, format menu for formatting text, view menu for customizing the appearance of a window, window menu for commands that operate on windows.
And help menus are for getting help and finding commands in those other menus.
Now, for many of your apps, these standard menus are going to be all that you actually need.
However, it's often necessary to provide additional custom menus.
If you have a couple of key object types in your app, with object specific actions, you should consider adding a top-level menu or two for them.
So, for example, in the mail app, there are two main object types, mailboxes and messages.
There are a number of actions that can be performed on those objects and none of those actions can be performed on the other type of object.
So it makes sense to have one menu button for each of those objects.
At other times, it's helpful to organize actions by a larger workflow that they serve.
In keynote, there are a variety of different object types that can be added to a slide and there's a whole set of actions for aligning and distributing, locking them, grouping them, moving them forward or backward.
And because all of those actions affect all of those objects in a similar way, it makes sense to put them into a single menu based on the workflow they serve.
And once you've determined what custom menus to include in the menu bar, you'll need to create the menus themselves.
All of the tips that I just shared with you for contextual menus apply here with one important addition.
The structure of menu bar menus is stable.
Commands aren't added or removed after an app has been launched.
Like toolbar actions, they disable when they can't be performed.
A stable menu system helps people to learn where commands are, even if those commands aren't currently available.
And, when someone sees a disabled command, they learn that the action that it performs is not currently possible, which is actually really useful information.
And, one more thing about menu bars.
Assign keyboard shortcuts for the most common commands.
Heavy keyboard users will thank you on both Mac and iPad.
Your keyboard shortcuts will work on both.
When picking keyboard shortcuts, always follow precedent.
You could find a long list of standard keyboard shortcuts in the macOS HIG on the keyboard page.
Look, we all appreciate it when we come to an app that we've never used, use a keyboard shortcut that we already know and get the intended result that we expected.
Am I right or am I right?
[ Applause ]
I think I'm right.
So you have to do the work to make that happen.
So, that was a lot about menu bars but I wanted to focus on them because they're core to the macOS experience and require real consideration.
OK. Now, getting your iPad app running on a Mac should be pretty easy.
But that's just the first step.
Mac offers you an opportunity to increase the power, utility and efficiency of your app but realizing that opportunity involves some thoughtful design choices and a bit of effort.
Now, I know we've covered a lot of ground today.
For those of you who weren't taking notes, shame on you.
But, don't worry, I'm just kidding, don't feel bad, we have a dedicated page for you in the Human Interface Guidelines.
It includes lots of useful tips and information about everything I covered today and much more.
And I highly recommend downloading the macOS Apple Design Resources.
They're available for Sketch, Adobe Photoshop and Adobe XD.
You can find all of that at developer.apple.com/design.
And you should also check out these great sessions about taking your iPad app to the next level and font management, all sorts of good stuff about font management.
Thank you so much for your time.
I'm really looking forward to what you create.
[ Applause ]