Transcript
[ Music ]
>> Good afternoon, ladies and
gentlemen.
Please welcome Vice President of
Software Sebastien Marineau-Mes.
[ Applause ]
>> Good afternoon, everyone, and
welcome to WWDC.
Did we love the morning keynote?
[ Applause ]
There you go.
[ Applause ]
Now this year is one of our
biggest for developers and we're
really excited to show you what
we've been working on and see
what you think.
This morning's keynote was just
a taste of what's happening this
year.
There is so much more that we
want to share, and this
afternoon we're going to focus
on the areas that matter most to
you as developers.
Are you ready to hear more?
[ Applause ]
There we go.
Now we've taken a huge step in
terms of developer experience
this year with the new SwiftUI
framework as well as great
interactive tools in Xcode.
And we've really seen each of
our platforms get even deeper at
what they do best.
We have powerful new pro
capabilities for Mac, and new
Dark Mode and rich updates --
sorry, independence for watchOS.
On iOS, a new Dark Mode and
great app updates.
And finally, on iPadOS, a
powerful operating system that
now stands on its own.
Sorry, the monitors aren't
working down here.
[ Laughter ]
There we go.
One of those is working, so I
will go over to the left.
Now these platforms represent a
diverse range of devices and
building great support for them
is easy, thanks to a choice of
many tools and APIs like
AutoLayout, Size Classes and
SwiftUI.
So no more letterbox.
Your users get the best
experience when your app works
well on a wide range of device
sizes.
And starting next spring, it
will be an app store requirement
to deliver UI that adapts to
different screen sizes.
Now tvOS is offering cool new
capabilities --
[ Laughter ]
[ Applause ]
There we go.
[ Applause ]
Now tvOS is offering cool new
capabilities for developers this
year, including multi-user
support for third-party apps,
new UI elements and options,
SwiftUI and of course support
for Xbox and PlayStation game
controllers.
[ Applause ]
Now this morning we announced an
incredible new hardware platform
with the new Mac Pro.
Do we love it?
[ Applause ]
It is incredible, and it will
really unlock amazing new kinds
of apps.
And we also built technologies
that span all of our platforms,
and we'll have a look at a few
of these areas today, including
accessibility, privacy, machine
learning, Siri, augmented
reality and finally Metal.
Now we want to focus on these
three big areas this afternoon,
and we're going to start with
developer productivity.
Now everyone in this room knows
that great tools can
dramatically improve your
productivity.
Great tools give you more time
to be creative and they let you
build better apps.
And the foundation of that
experience is the programming
language.
Over the last five years, Swift
has matured and is built into
every Apple platform.
And Swift gives us the
foundation for SwiftUI.
And Xcode is so much more than a
code debugger -- sorry, code
editor and debugger.
It includes everything that you
need to build an app, including
support for continuous
integration and testing.
And it gives you tools that let
you explore new technologies
such as machine learning and
augmented reality.
And finally, built on the strong
foundation of our platforms, the
SwiftUI framework will
revolutionize how you build user
interfaces.
And together, these three
elements deliver a whole new
level of productivity and they
will fundamentally transform how
all of you build apps.
Now, are you ready to dive right
into SwiftUI?
[ Applause ]
Let's have Josh come up and tell
us more.
Josh?
[ Applause ]
>> Thanks, Sebastien.
Okay, so SwiftUI, as you saw
this morning, is a brand-new
user interface framework built
from the ground up in Swift for
Swift.
We designed it to let you write
less code and have the code that
you do write be better code,
while letting you use more of
that code across all Apple
platforms.
Now first of all, there's so
much functionality built into
each individual line that you
write that you're just going to
write way less code.
So let's take the app for
choosing macOS release names
that we looked at this morning,
but without the animated
transitions.
If you've written an app with
UIKit before, you know the types
of pieces that you need in order
to build this interface.
It's not a lot of views, but
there are many individual
details that you need to get
right.
With SwiftUI, it is way less
code.
Fewer than 20 lines focused on
just three key things.
First, a few lines to define the
structure and layout of your
views.
Then some image and text views
to display your content.
And finally, parameters and
modifiers to adjust how it all
looks.
Now let' stake a look a little
bit more closely at just a few
of these lines.
The scrolling list itself is
barely any code at all.
You just declare the list and
then describe the model objects
to be used in each row.
There's no setup, there's no
configuration and there's no
callbacks.
Now the image at the top is just
as simple.
You display an image, clip it to
a circle and add a shadow.
And it's not just less code.
It's better code.
We designed the API to make the
obvious approach be the right
approach.
The right way to create this
label is exactly the one line of
code that you would think to
write.
It supports dynamic type, Dark
Mode and more.
In fact, even the string
interpolation used here is fully
localizable.
This simplicity eliminates
entire categories of errors.
Looking at our list again, its
rows update automatically if the
model changes, ensuring that
your UI is always up to date and
never displaying out-of-date
data.
And it's easy to read too.
The code for this image with a
corner radius of three says
exactly that.
Reading SwiftUI is like having
someone explain that interface
to you.
And SwiftUi's code is available
everywhere, helping you reuse
more of your code across all
Apple platforms.
Now you've long been able to
share your model and low-level
drawing and compositing code,
but higher-level UI code has
remained mostly
platform-specific.
With SwiftUI, we're raising that
bar, enabling you to share far
more.
Now of course you're still going
to want to tailor your
interfaces for each individual
platform to ensure that your app
feels great everywhere that you
deploy it.
But with SwiftUI's common set of
API patterns, you can learn
those tools once and then apply
them everywhere, getting you a
native interface on each
platform you deploy to.
SwiftUI is designed with a
strong set of four core
principles.
First, a declarative syntax
shifts UI programming away from
how to update the screen and
instead lets you just focus on
what you want to display.
For example, let's say that you
want to build a label with a
headline font and a gray color.
Describing how to get that is a
multi-step process with many
steps having to happen in a
specific order.
But describing what you want
requires no translation.
Text that says Done with a font
for a headline that's colored
gray.
SwiftUI lets you say exactly
that with a great new
declarative syntax.
And it's the minimum code
necessary to describe exactly
your idea.
And iteration becomes
significantly faster as well.
If you later need to change that
label to become a button, that's
a one-line change.
[ Applause ]
I know, it's pretty great.
[ Applause ]
All right, so our second
principle is that we should
provide automatic functionality
whenever it's possible.
This eliminates the need for a
huge amount of code that you
used to have to write by hand.
Our app for naming macOS
releases is pretty simple, yet
it does include a huge amount of
automatic functionality.
We get default handling of
spacing and safe area insets.
Localizability and layout
adjustments for right-to-left
languages.
Dynamic type, Dark Mode and so
much more, all from that one
minimal description.
It's an incredible amount of
automatic functionality for a
small amount of code, but there
is one more thing that is just
so important that it really
deserves special attention.
Our modern interfaces are
interactive and they're
animated.
And with SwiftUI, that same
interface declaration is also
automatically fully animatable.
Animations can be enabled for
the entire hierarchy with just
one line of code.
There's no bookkeeping, there's
no preparation and there's never
any cleanup.
If you've used Keynote Magic
Move animations before, SwiftUI
animations are that easy and
even more powerful.
And for views that are added and
removed, you can specify how
they transition in and out with
just one more line of code.
While animations are in
progress, your app remains fully
interactive and responsive and
ready to handle user input at
any time.
And if the user ever interrupts
one of those animations or if
you need to move to a new
location, SwiftUI handles all of
that automatically too.
Now our third principle is that
compositional APIs are easier to
learn and let you iterate a lot
faster.
We've looked at how we can
declare an individual view like
this text label.
But declaring more complex views
is just as easy.
You just compose together
multiple smaller pieces.
Containers like horizontal and
vertical stacks let you easily
build powerful layouts by just
combining together multiple
simple pieces.
And SwiftUI applies composition
to view properties as well,
using a standard modifier
syntax.
A common set of modifiers can be
applied to any view, like color
applied here to make this text
gray.
This compositional approach lets
you learn a small set of views
and modifiers and then combine
them together to create
progressively more powerful
interfaces.
And our final principle is that
your interface should always be
in a consistent state.
Your UI is a reflection of your
app's data, so the two should
always be in synch at all times.
With traditional APIs, this can
be error-prone.
But with SwiftUI, your interface
updates automatically any time
the data changes.
Now there are two common places
that your data might likely come
from.
Now the first are your model
objects.
And you can use your existing
model objects directly by simply
conforming them to a new
bindable object protocol.
Its only requirement is that you
specify when the data in your
model changes.
Now the second place is
temporary UI state, like whether
the view is currently in editing
mode.
These are declared using a
simple state wrapper applied to
any property on your view.
We're all used to every property
on every view being mutable, but
once you start using SwiftUI,
you're going to be shocked to
realize how little mutable state
your app actually needs.
Now whenever your model or state
changes, that UI is going to
update automatically.
And because it's all Swift code,
you get this behavior while
still being able to use your
model objects directly within
that interface declaration.
You can even transform and
format values in line with no
additional indirection needed.
For example, this string
interpolation can be used to
format a date, resulting in
fully localized formatted text.
All of this means that with
Swift UI, you're going to write
less code and get a more
consistent UI.
Those are the four core
principles of SwiftUI.
A powerful declarative syntax
enabling a huge amount of
automatic functionality with a
compositional API that ensures
your interface is always in a
consistent state.
And a great new framework
deserves incredible tools.
And we've created a whole
brand-new workflow within Xcode
designed from the ground up for
SwiftUI.
You get the power and
flexibility of code combined
with the ease of use and rapid
iteration of a UI tool.
You always have access to both
at all times, so you'll never
have to choose between them
again.
And because the tools work on
your actual existing source
code, you have a truly live
development experience.
Now to really understand how
amazing this workflow is, you
just need to see it again live.
And to show it to you now, I'll
invite Kevin up to give you a
demo.
[ Applause ]
>> Thanks, Josh.
You guys ready to have some fun?
All right, so I'm building a
hiking app and I want to add a
view to my table view cell that
tells me how difficult a trail
is.
So we're going to start in the
library.
We're going to have some text.
And as I'm dragging, Xcode is
suggesting layouts for me.
Now I just tell Xcode where I
want it and Xcode figures out
the layout for me.
And now we can edit the
properties of this view.
So I'm just going to command
click in the canvas here and get
custom-tailored inspectors right
here.
Let's make this text a little
bit smaller.
Now watch -- watch the code
while I do this.
You'll see it writes the code
for me.
Now, we can do the same thing
over here in the source editor
by just editing the code.
And you can see Xcode builds and
runs my code and updates the
canvas on the right.
Now no matter where I'm working,
I get access to all of my design
tools.
So I'm just going to command
click on this V stack, going to
open up the inspectors.
And again I can just modify the
properties that I want.
It's just so fast to iterate.
Now, you might notice that this
view has a couple inputs like
this title and this difficulty.
So how does Xcode know what data
to show in the preview?
This has always been one of the
challenges with UI development:
what data do we show during
design time?
And this is why we invented
Xcode previews.
What is a preview?
I'll show you.
So let me scroll down here.
This snippet of code here -- a
preview is just a snippet of
code in my application that
configures it for design time.
Because it's in my application,
I get access to all the code in
my project.
And because it's in my project,
I can check it in and share it
with my team members.
And it's so easy to try
different data.
Now actually here Half Dome is
pretty hard.
So let's see what it looks like
at hard.
And that's because it's 16
miles, not 6.
And that's really compiling
code.
Now because this is SwiftUI
code, I get access to all the
modifiers that I would use for
the rest of my UI development.
So we can see what it looks like
in Dark Mode.
And I also have preview-specific
modifiers as well.
So by default previews are the
size of a device, but since
we're working on a table view
cell, let's just focus in on
that content.
So I'll just make that the size
that fits.
Okay, now here is the really
cool thing about previews.
You can have as many as you
want.
So let's add a second preview
with completely different data.
But let's not stop there.
Let's command click, repeat it a
couple of times.
Let's enumerate over some common
dynamic type sizes and then
let's configure our cell to use
that dynamic type size.
And there at a glance I can see
my cell with light mode, Dark
Mode, multiple different dynamic
type sizes all at the same time.
[ Applause ]
Now when I tap on this cell, I
want to go to a detailed view.
So let's switch over to that
file now and take a look.
Now I've learned through the
years of hiking that you should
never judge a trail by its name.
So it's really important to me
that we can configure our detail
view to make that image really
large.
And I've already done that with
some SwiftUI state here.
So when we tap the banner, we
want to toggle that expansion
state.
Now I can test that right here
in the UI just by clicking this
play button.
This takes any preview that I
have and makes it fully
interactive.
So I can just click and test out
those different expansion
states.
Now we can really polish this up
with an animation.
It's so easy.
So I can just wrap my state
change in a whip animation
block, and now I get a beautiful
default animation.
[ Applause ]
And it's just as easy to
customize that.
So let's slow it down for some
dramatic effect, and now I get a
beautiful animation opening it
up.
Now what's so cool about SwiftUI
is that every animation is
cancellable and reversible,
leaving my application
responsive the whole time.
Okay, so we have a table view
cell and we have a detail view.
So let's put it all together.
So I'm going to switch over to
my last value here, which has a
bunch of different trails and a
list.
So what I want to do is I
actually want to see what this
looks like on a real device.
So with the click of a button --
let's click this -- Xcode is
going to build my project for
the device.
It's going to install it and
it's going to launch my preview
right here on the device.
And you can see it's fully
interactive right here.
So first let's use that cell
that we built.
So I'll just change this text to
be a trail cell.
Now you can see we're seeing our
trails show up there.
And now when I tap on this, I
want it to go to our detail view
that we built.
This is so easy with SwiftUI.
It's just going to wrap this in
a navigation button, and that
tells us to go to our detailed
view.
And now you can see the chevron
shows up.
So let's check out Snow Creek
and let's move in on that
picture.
And okay, snowy and difficult.
That does not sound like a fun
trail.
So what I'm going to do with
just one line of SwiftUI code is
add swipe to delete.
And now we can say, "We don't
want to do that trail."
And now lastly, let's see what
it looks like in Dark Mode.
Without any work, it's going to
put my preview in Dark Mode and
you can see it looks beautiful.
[ Applause ]
We can tap on our valley floor,
zoom in.
And that looks like a great way
to end the week.
So we just built an app with
navigation, dynamic type size,
light mode, Dark Mode, multiple
different data and saw on the
real device all without ever
building and running.
Now that's fun.
All right, Josh, back to you.
[ Applause ]
>> Thanks, Kevin.
All right, this is really an
incredible new workflow for
fully native code.
What you do in the tool is
always debuggable, diffable,
searchable, and understandable.
And because you can always edit
the code directly, you get
incredible flexibility in your
workflow.
And SwiftUI is deeply integrated
in all of our operating systems,
so using it results in a fully
native app for whichever
platforms you target.
You get the same performance,
the same behavior and the same
controls as any other native
app.
And you can adopt SwiftUI at
your own pace.
You can use it for anything,
from just one view in your app
all the way up to the entire
application.
It works seamlessly with all of
your existing UIKit, AppKit and
WatchKit code so you don't need
to rewrite anything.
And to get you up to speed
quickly, our documentation team
has developed a brand-new style
of interactive documentation.
It quickly takes you
step-by-step from creating a new
project all the way up to
building a fully interactive
interface.
So you'll be up to speed in no
time.
[ Applause ]
So that's SwiftUI and some of
the new tools in Xcode.
Of course, this is a huge year
for Swift and Xcode, so there's
even more to this story.
And to tell you more about it,
I'll hand things off to Matthew.
Thanks.
[ Applause ]
>> Thank you, Josh.
Our tools released this year
bring together innovations in
Swift and Xcode to deliver some
awesome results.
So let's start with Swift.
Now in our fifth year, Swift has
matured and is continuing to
leap forward.
Where our newest and flagship
technologies, from machine
learning to augmented reality
are possible only because of
Swift and it now being part of
our OS.
To achieve this, earlier this
spring we introduced ABI
stability which reduces the size
of your apps by using a single
shared Swift runtime.
[ Applause ]
And we are following that up
today with module stability
which ensures compatibility --
yes.
[ Applause ]
This completes the picture by
ensuring compatibility for your
binaries with the current and
future versions of the Swift
compiler.
And these come alongside a
number of other language
features, tools editions and
performance and code size
improvements, all which further
extend the potential Swift
brings to your projects.
So Swift is already the language
for your apps and now more than
ever for common code to share
across all Apple platforms.
In fact, sharing is the reason
we created Swift Packages which
are the best way to develop and
share your own code and reuse
code from others.
And today we have two big
announcements.
GitHub will be adding support
for Swift packages to the GitHub
Package Registry.
[ Applause ]
Which is perfect because Xcode
now seamlessly supports Swift
packages for apps on iOS, iPadOS
and all of our platforms.
[ Applause ]
Swift packages are top-level
items in your workspaces, always
visible, always accessible, and
deeply integrated.
Packages from the community and
those packages you create get
instant access to all of Xcode's
work flows for source control,
debugging, testing, the works.
So Swift packages built into
Xcode, it's sharing code the way
you've always wanted.
Now that's just the start of our
Xcode release this year, which
is focused on maximizing your
productivity.
And we have a number of
improvements today to share with
you as we take Xcode up to 11.
So let's get started with one of
our biggest changes which is the
Xcode Workspace.
We are giving you full editorial
control.
You can now create and manage
editors however you like.
Whatever your preferred style
and layout is, you can simply
add and remove editors whenever
and wherever you see fit.
[ Applause ]
And even better, your workspaces
can now focus too.
So you can take any editor and
maximize it, and then when
you're done, just put it back
and it will go right back to
where you started.
[ Applause ]
So whether you're working on the
smallest of laptops or with the
largest of displays, your
workspace now works for you.
Now the related content in our
editors, the smart selections
like counterparts, are also
getting a huge boost.
There are new options like
previews, canvas, live views and
more.
You can use the related content
in any editor in your workspace.
And you'll like this one best of
all.
When there is no content, they
automatically disappear so you
no longer need to manager their
visibility.
[ Applause ]
Now once you get your workspace
set up, it's all about the
editing, and I'd like to show
you a quick demonstration of
some of the new source editing
features we have for you this
year.
To help you configure each
editor the way you like, there's
a new Options menu in the upper
right.
You can see here I can enable
the assistants or any of the
related content.
I could turn on code coverage or
source control authors.
I'm going to turn on our newest
feature, Mini map.
So the mini map gives you a
structural overview of your file
to help you navigate.
You can see documentations,
method and functions.
It makes it really easy to move
about the file.
If you'd like to leave yourself
some other landmarks, you can
use the mark syntax to add
labels and horizontal dividers
that show up in your source and
in the mini map.
[ Applause ]
Now if I hover over the mini
map, you'll see the symbolic
landmarks for the file.
Here's a pro tip: hold down the
command key and you'll see all
of the landmarks for the file to
make it really easy to navigate
to exactly where you want to go.
[ Applause ]
And the mini map will show you
issues, test failures, even
in-file find results.
And we've made it fully
accessible.
You'll find our source editor
now pops and your code is more
vivid as we've deepened our
syntax coloring.
You'll also see that we've
increased our documentation
support here with italics, bold
and code voice in the
documentation.
You'll also see that when you
add documentation, it
automatically adds in missing
parameters that you may have
added after you typed your
documentation.
[ Applause ]
And what's even better is to
help you keep your documentation
and code in synch.
You'll find Edit All and Scope
now changes both, all at the
same time.
[ Applause ]
Now we also wanted to add some
additional help to help you keep
track of your changes.
If I'd like to review all of the
changes for this file, I can
open up the new Source Control
History Inspector which shows me
all the changes that have been
made to this file, and I can
quickly jump to any commit.
And because it's in the
inspector, this now works for
any file type in your project.
To help you review local
changes, we've also improved the
change bar.
When I hover over the change
bar, it shows me the local
changes.
But I can now have it show me
the code before the change that
I made to get a quick snippet.
[ Applause ]
And of course it's live, so as I
start typing, it will update to
keep me up-to-date.
So those are just some of the
many source editing features
you'll find in Xcode 11.
[ Applause ]
Okay, so testing is another key
development workflow.
And Xcode already has great
support for writing tests, which
of course you all already know
because you're writing lots of
them, right?
>> Yep.
>> Yeah.
>> Excellent.
That's what we like to hear.
Now what you may not know is
that Xcode can do even more with
your tests by using fantastic
tools like runtime issues,
sanitizers, localization
simulation.
And we add more of these every
year.
With so many options, what's
been missing is a way to combine
them all in one place to be used
in parallel.
And for that we are adding test
plans.
Now the power of test plans
comes from running your tests in
many configurations.
With a few simple selections,
you can instantly test for your
global audience.
And this configuration is also
perfect for capturing
screenshots for the App Store or
collecting details for your
localizers.
Yeah, it's okay to applaud for
that.
This is a big deal.
[ Applause ]
You can then see your app from
every angle by adding in other
diagnostics, tools and
parameters.
And your coverage increases even
further when you run your test
plans against many devices and
OS combinations to get a fully
comprehensive view of how your
app is doing.
Now for testing at this scale,
test plans work perfectly with
Xcode Server which can take full
advantage of the new Mac Pro and
with Xcode's new parallel
testing on simulators and
devices.
The result with test plans is
you now have one command that
does all of the testing for your
apps.
So this is a major advancement.
[ Applause ]
Now often when testing and
debugging, it's necessary to
replicate user scenarios.
And our new Device Conditions
answers the call.
You can now set varied
conditions for network
throughput and thermal states on
your devices and see how your
apps respond.
Now rest assured these are
actually just simulations.
We're not actually going to make
your devices get super-hot here.
You can enable the conditions in
Xcode's Devices window.
And the devices will display
banners when the conditions are
active.
You can tap the banner to
disable the conditions and Xcode
will automatically terminate the
conditions when you disconnect
the devices.
Now for all the testing you're
going to be doing, we've also
improved our result bundles
which are now standalone.
Whether you create them in Xcode
or from the command line, you
can share them via email, attach
them to bugs and then just
double-click on them to open
them back in Xcode to review all
of the details.
[ Applause ]
Now to help you improve your
apps even further, we are
introducing two new feedback
tools.
First, app performance metrics
for iOS and iPadOS App Store
apps.
When users opt into sharing
analytics, you'll received
anonymized metrics for battery
life, launch time, memory use
and more.
These metrics are aggregated and
displayed in the organizer
alongside the crash and energy
logs, and are a great way to
monitor and improve the
performance of your app with
each build.
These aggregated metrics, we
started collecting them in the
spring with iOS 12.2.
So many of your apps will
already have data to review.
Now another great source of
feedback is directly from your
users, and Test Flight will now
let users share what they think.
Test Flight apps automatically
enable user feedback.
When a user takes a screenshot
in your app, they will have a
new option to share it as beta
feedback, optionally adding in
their comments.
[ Applause ]
You can review all the feedback
on App Store Connect and
download all the details for
your bug tracking systems.
So all these features today are
just a small taste of our Xcode
release, which brings together
innovations in Swift, the SDK
and across all of our tools.
All this to help you do your
best work faster than ever.
And that is Xcode 11.
[ Applause ]
>> And now I'd like to invite
Sebastien back to tell us more
about Apple's platforms.
Sebastien?
[ Applause ]
>> Thank you, Matthew.
Wasn't that amazing?
Really, really great features to
help all of you build better
apps.
So now let's switch to our
platforms.
And of course our platforms
themselves are tailored to
provide great experiences and
they really reflect the unique
way in which each of them is
used.
So some of what we're doing this
year is unique to each of them,
and what we're going to do now
is dive right in to macOS and
tell you what we're doing there.
macOS Catalina is a great
release with a rich set of
compelling new features such as
screen time and the new Music
app.
And the Mac takes another great
step forward with amazing
productivity features such as
Sidecar.
We're going to love Sidecar,
right?
[ Applause ]
All right.
Well, with an active installed
base of over 100 million users,
the Mac is a vibrant platform
with a rich app ecosystem.
And the Mac ecosystem is full of
powerful native apps that you
have created using our AppKit
framework.
And a great example of this is
Pixelmator Pro.
Now AppKit is the powerful
framework that enables the full
capabilities of the Mac.
But we also recognize that there
are a number of apps available
for iPad that would be great to
run on the Mac, but you have not
always had time to use AppKit to
bring that to the Mac.
And so this year we're adding an
additional way to create native
Mac apps with the technology
that allows you to take an
iPadOS app and bring it to the
Mac with minimal effort.
We --
Can you go back two slides?
Sorry.
One more. All right.
This is a huge opportunity for
the Mac to tap into the world's
largest app ecosystem.
There are over a million iPad
apps out there and we think many
of them would be really great on
the Mac as well.
Now to achieve this, we've
ported more than 40 frameworks
and libraries from iOS to the
Mac.
And if you're an existing iOS
developer that doesn't have a
Mac app yet, you're going to
love having the same APIs
available on both platforms.
In fact, we've made available
almost the entire iOS API set
with only a small number of
exceptions for unique mobile
features.
Now we achieved this by adapting
UI Kit as a native framework.
That enables iPad apps to run on
the Mac and feel just as fast
and fluid as other apps on the
platform.
And by integrating UI Kit
directly into macOS, many of the
fundamentals are automatic.
So many Mac desktop and
windowing features are added
without any work on your part,
and we adapt platform-unique
elements like touch controls to
keyboard and mouse input, saving
you a ton of work and giving you
a huge head start in your
development.
Now we've been working on this
technology for a number of years
and we're using it for our own
apps, which has allowed us to
prove out and refine the
technology before we make it
available to you in macOS
Catalina this year.
If you have an iPadOS app,
targeting the Mac is super easy.
There are basically three steps.
First, click the checkbox in
Xcode -- here we go.
[ Laughter ]
That easy.
In Xcode's Project Editor, and
turn on Mac support for your
project.
There you go.
As easy as that.
And here's the magic.
That single project and target
builds apps for all three
platforms.
And when you make a change to
your source, all three apps
update automatically.
The second step is to ensure
that your app is great on the
iPad.
Better iPad apps make better Mac
apps as well.
So the work that you put in to
adopting the newest technologies
and optimizing for larger iPad
screens translates wonderfully
to the Mac.
Just following best practices
such as supporting external
keyboards will also result in
richer Mac experiences.
The third step is to take
advantage of specific Mac
capabilities.
And this is where you make
customizations that take full
advantage of typical
Mac-specific user interface
elements like full menus and
toolbars.
And if applicable, sidebars and
their special materials.
Now to show you how easy this
is, I'd like to invite Matthew
back onstage for a demo.
Matthew?
[ Applause ]
>> Thank you, Sebastien.
Here we have our travel
application running in the iPad
Simulator.
It's a list view of locations.
When I select a location, the
globe will rotate.
And we have a logging area where
I can start keeping track of my
trips in a journal.
Let's follow Sebastien's three
steps and bring this app to the
Mac.
Step one, check the box.
I'll quit the simulator and here
in the target editor I'll check
the box for Mac support to
enable it.
That's it.
I can now build and run my
application for the Mac.
By checking the box, we added
the Mac as a destination.
So just like I can pick between
devices and simulators for my
app, I can now choose the Mac.
And here's the Mac app.
List View on the left, select
the location and log in.
[ Applause ]
I know, pretty powerful
checkbox.
All right, let's move on to step
two, make a great iPad app.
I've not implemented any actions
from my List View, things like
Adding to Favorites or to Share.
When I implement those for the
iPad, they'll show up as a
context menu on the Mac.
It's a double win.
So I'll quit the Mac app and
change to my sidebar controller
here, and I'll just add a table
view delegate method that sets
up those menus for each item.
Okay. Let's move on to step
three.
I'd like the sidebar on my Mac
app to be vibrant.
Now this change doesn't happen
automatically because it's
something you should review to
make sure it's appropriate.
When you do find it's what you'd
like, it's a simple one-line
change to set the background
style to sidebar.
Okay, for our final change, I'd
like to add a menu bar to our
application.
So here in the storyboard I'll
bring up the library and I'll
search for a menu.
I'll grab a main menu and I'll
drag it out into my storyboard
and we'll open up the file menu.
I'd like to add a menu command
in here for the login action.
So we'll call this Login.
We'll give it a key equivalent
of Command-L.
And I just now need to connect
the menu item up to the action
that I'm already using for
Login.
Okay? That's it.
Let's build and run our changes.
I'm going to go up and hide
Xcode for the moment so we can
see our application.
Okay, so now we have the vibrant
sidebar.
When I select an item, I can
bring up a context menu and up
here in the File menu I now have
the Login action.
So just like that, three easy
steps.
[ Applause ]
Three easy steps to bring our
app to the Mac and make a great
user experience for all our
users.
Back to you, Sebastien.
[ Applause ]
>> Thank you, Matthew.
That was really amazing.
Doesn't this make you want to go
and try it out?
Yes. All right, in fact, over
the last few weeks we invited a
number of developers to take
this for a spin.
And the progress that they have
made in a few short weeks is
truly impressive.
Here's a sample of the iPad apps
that they already have running
on the Mac.
Now once you've built a Mac app,
the best way to distribute it to
your users is through the Mac
App Store.
It features the biggest catalog
of Mac Apps.
It's available in 155 countries
throughout the world and the Mac
App Store allows you to reach
every single Mac user.
Now we also built Gatekeeper to
give users flexibility and
choice on how they get their
apps while helping protect them
from malicious software.
And in macOS Catalina,
Gatekeeper will validate the
apps that you run from the
internet both at first launch
and periodically thereafter to
confirm that they're free of
known malware.
This is accomplished by
requiring developers to use the
notarization service that we
announced last year for both new
and updated apps.
So now you and your users can
safely get apps from both the
Mac App Store and the internet.
Notarization has already seen
broad adoption.
It's simple and fast with over
98% of submissions completing
within 15 minutes.
Now speaking of security, we're
continuing to invest in the
foundations of macOS and I'd
like to focus on three areas.
First, a new technology called
Driver Kit which allows you to
move your kernel extensions out
of the kernel and into user
space.
And by running these drivers and
extensions as user processes, we
improve the stability of macOS
for all of our users.
We identified the most common
use cases that have required
kernel extensions in the past,
and now we have a user space
alternative for over 75% of them
in macOS Catalina.
We encourage you to adopt Driver
Kit as future versions of macOS
will no longer run these types
of kernel extensions.
Next, we're improving the
stability of macOS by making the
system volume read-only.
Here's how it works.
Today there's a single volume
that includes user data, apps
and the operating system.
And to further isolate macOS
from changes, the Mac will now
be divided into two logical
volumes.
One for the operating system
files which will be read-only,
and the other for user data and
apps.
[ Applause ]
There you go.
[ Applause ]
This will further protect the
operating system from changes,
increase stability and set us up
to deliver future security
benefits.
Now some of you may have made
assumptions in your app or your
installer, and you'll want to
check that it works seamlessly
on macOS Catalina.
Finally, enhancements to app and
data protection.
We have spent the last few years
adding additional data
protection categories so that
users are in control of which
apps can access important files
like your photos or sensitive
sensors like your camera and
microphone on your Mac.
In macOS Catalina, we're
continuing this work by ensuring
that apps seek permission before
capturing input events, so
things like key presses or
screen recordings.
And we're also going to protect
user data on your Mac, so apps
will now have to seek permission
before accessing the files that
users keep on their desktop,
downloads, documents, iCloud
drive and external drives.
Yeah.
[ Applause ]
We are really excited about all
the enhancements that we're
bringing in macOS Catalina.
Now another platform that's got
some really big changes this
year is watchOS.
And to tell you more, I'd like
to invite Lori up on stage.
Lori?
[ Applause ]
>> Thanks, Sebastien.
[ Applause ]
This morning we introduced a
bunch of cool new features in
watchOS 6, including new health
apps like noise and cycle
tracking, activity trends,
audiobooks and more.
But the real story for watchOS 6
is that it's now possible to
declare independence from the
phone and build fully
watch-focused experiences.
[ Applause ]
Thanks to cellular connectivity,
customers are increasingly
leaving their phones behind and
enjoying the freedom using just
their Apple Watch to stay
connected.
From running errands to running
workouts, from listening to
music to chatting with friends,
we want all users to enjoy great
Apple Watch experiences without
limitations.
And independent watch apps make
that possible.
We've taken a good look at the
challenges of developing for
Apple Watch and worked hard not
only to bring you new APIs that
make it possible to support
independent experiences, but
also to completely revamp the
experience of being an Apple
Watch developer.
What if I told you it was
possible to create a watch app
that's only a watch app?
If you've got an idea for a
great watch-only experience,
Xcode now makes it simple to
create a watch app that's just a
watch app.
So you can pursue your idea
without also having to build an
iOS app.
And if you already have an iOS
app, you can still build your
app to be completely independent
of its companion thanks to a
couple key changes we made in
watchOS 6 to support watch-only
apps, including making Apple
Watch a standalone push target.
You now have the option of
sending notifications directly
to the watch so you can update
both your users and your apps
data without relying on the
phone to mediate.
[ Applause ]
We're also supporting Cloud Kit
subscriptions and complication
pushes to help you keep your app
up-to-date.
And since asking users to sign
in on iPhone is not an option
when you don't have an iPhone
app, in watchOS 6 we're giving
you text fields so you can offer
account creation and sign-in
options directly on Apple Watch.
If you want to make account
creation really easy, you can
even add an Assign with Apple
button to your app to let your
users set up an account and sign
in with the Apple ID they
already have.
No new passwords or text entry
required.
With watchOS 6 we're also
addressing a common watch-only
use case by bringing streaming
audio to watchOS.
We introduced background audio
playback in watchOS 5 for local
files.
And now in watchOS 6, we've
brought three ways to stream
audio directly to Apple Watch by
making Network,framework,
NSURLsessionStreamTask and even
more of AVFoundation available
to you.
We also recognize that there are
use cases beyond audio playback,
workouts and navigation where
you need to keep your app
running order to complete a
task.
For example, a meditation
session.
In watchOS 6, we're introducing
a new extended runtime API that
gives more apps a way to stay
running even after the user
lowers their wrist.
This enables new app experiences
in self-care, mindfulness,
physical therapy, smart alarms
and health monitoring.
That's a lot of new APIs and
capabilities.
If only you had more options for
creating a compelling user
interface, right?
We know you've been asking for a
more advanced UI framework on
the watch for years.
And in watchOS 6 we finally have
one with SwiftUI.
[ Applause ]
You've already seen SwiftUI on
iOS.
That same declarative language
for defining beautiful user
interfaces is available for
watchOS as well, expanding
what's possible on the platform.
From lists with swipe to delete,
reordering and carousel filing,
to direct access, the digital
crown, it's easier than ever to
create a compelling watch
experience.
Let me show you how to start
making use of some of the new
independent app features with
SwiftUI.
Okay, so I've got my travel app
running here in the Simulator
and I've already started
updating it using SwiftUI, so
it's starting to look great.
But I still have some work to do
beyond layout because my Sign In
button currently just asks users
to sign in on iPhone.
And my users have told me that
is not what they want.
They want to be able to do
everything right on their wrist.
So I'm going to quit the
simulator and go over to my
project file.
And I'll move to my travel watch
extension target and declare
independence from phone by
checking the Supports Running
Without iOS App Installation
box.
Next I'm going to go to the Sign
In view that I've already
started.
I'll resume my previews.
Great. And you can see I have a
Sign In button here and two
previews.
The top one is for English which
is the language that I speak and
the bottom one I'm starting to
experiment with localizing my
app into Arabic which is a
right-to-left language.
So the first thing I'm going to
do is add a field for my
Username button.
And I'm going to bind this to my
-- oops.
To my username state so that the
field updates as the value
changes.
Notice I've set the placeholder
text to username so I give the
user a chance to figure out what
to do with this field.
And I've also set the content
type to username so that
password and username autofill
works when using continuity
keyboard.
Next I'm going to add a password
field, and for this I want to
use a secure field so that
people can't spy on me when I'm
typing my password.
And again, I'm going to bind
this to my password state.
I've got a password placeholder
text and again I'm using the
content type of Password for
autofill purposes.
So that looks great in both
English and Arabic.
And for Arabic it's pulling the
strings right out of my
localizable strings file.
This is not placeholder content.
Okay. Above this, what I want to
do is add a Sign In With Apple
button because I think that's
how users are really going to
want to sign in.
So now I put that right at the
top and then add a separator so
it's clear that users have an
option of signing in with their
Apple ID or creating a customer
username and password for my
app.
That looks great.
So the last step is to go over
to my hosting controller and
change my destination for my
presentation button to the Sign
In view that I just created
instead of the Sign In on iPhone
view.
So I got that going and now I
want to turn on Live Preview, so
all my buttons become
interactive.
And then when I click on my Sign
In button, I get my form.
Sign In With Apple, or sign in
with a username and password.
That looks great.
And that is creating a sign-in
form on the Apple Watch with
SwiftUI.
[ Applause ]
Okay. So you've got the tools to
build a great independent Apple
Watch experience.
How are you going to get your
app in front of customers with
the least friction possible?
The App Store and Apple Watch
will be highlighting great
independent apps through curated
collections and editorial
selections at the top level of
the App Store.
We're emphasizing independent
apps here so users can get the
instant gratification of being
able to download and start using
your awesome apps right away,
whether they have the phone with
them or not.
And when you dive into
individual product pages, you'll
see that this isn't just a pared
down experience.
Users will see full featured app
descriptions, screenshots,
reviews and more.
They can search for apps with
dictation or scribble.
And they'll be able to download
your apps directly to their
wrists, thanks to app and asset
thinning which make it possible
to deliver a small bundle with
only the architecture and assets
that makes sense for the current
watch.
If you have both an iOS and a
watchOS app, this will make your
iOS app smaller too, as we're no
longer downloading the watch
bundle to the phone and then
shuttling it over.
This is truly a whole new era
for Apple Watch apps to be more
functional, more beautiful and
more independent than ever.
We think both you and your
customers are going to love
this.
And now to talk about the
platform that we just declared
independence from, I'd like to
welcome Cindy to the stage.
[ Applause ]
>> Thank you, Lori.
iOS 13 is a big release.
You saw this morning that we
have a ton of new features and
enhancements like a redesigned
share sheet, a Quick Type
keyboard and a brand-new CarPlay
experience.
In addition to all of that, we
took a good long look at our UI
and gave iOS 13 a brand new
look.
This new look includes Dark
Mode, cards, contextual actions
and symbols.
Let's dive into the incredibly
cool new Dark Mode.
Dark mode keeps the brightness
down and gets Chrome out of the
way so you can focus on just
content.
The entire system has been
really thoughtfully updated and
refined to look amazing.
Your users are definitely going
to want this.
And to help you bring these same
refinements to your apps, we've
created some new APIs designed
specifically with Dark Mode in
mind.
But first it's semantic colors.
There are new colors for
backgrounds, fills and text.
And in Dark Mode, they have
multiple variants to give your
app a visual hierarchy.
Now what does that mean?
Well, when your app is
full-screen, its background is
pure black.
To ensure sufficient contrast,
UI presented above it takes on a
brighter color palette.
When multitasking on iPad, the
slide-over app and side-by-side
apps also render in these
lighter layer colors.
There is a lot of nuance to this
design, but you'll get it
automatically with semantic
colors.
And for when you need a pop,
there's a bright palette of
system colors that all have
variants for the increased
contrast accessibility mode as
well variants for Dark Mode.
There's also a brand-new set of
materials and vibrant content
filters with varying levels of
transparency so you can create
UI that looks great over any
content.
And just like semantic colors,
these materials support both
light and dark variants.
And they will automatically
update based on changes to the
UI Kit trait collection.
Adopting semantic colors and
adaptive materials will help you
provide a unified look that
automatically adapts to your
environment.
Another component of iOS 13's
new look is cards.
Since the original SDK, the
default presentation style on
iPhone has covered the full
screen.
We're changing that default to a
much more fluid card
presentation.
Cards provide a visual stack so
you can see at a glance that
you're in a presentation.
And even better, they're
dismissible with just a single
downward swipe.
[ Applause ]
Yeah. Swiping.
We've also updated the Peek and
Pop experience.
It's now quicker and easier to
access contextual actions
throughout the system.
And they're backed by a
brand-new API designed to work
across all devices.
So not only are they better than
ever on iPhone, but they look
great on iPad as well.
And when you bring your iPad app
to macOS, they'll look great
there to.
[ Applause ]
Yeah. While we were going
through the system, making all
those thoughtful refinements, we
started thinking about symbols.
Most apps use symbols.
They are a really useful way to
convey information.
And symbols are very often used
with text.
But text has some great
properties that in iOS 12 our
symbols just didn't have.
So as you can see here, the text
is scaling nicely as the dynamic
type size increases, but the
symbols stayed the same.
Ideally, we'd want the symbols
to scale along with the text.
So we created SF Symbols.
SF Symbols have all the
expressiveness and behavior of a
font but packaged up as a UI
image so they're really easy to
use in your apps.
iOS 13 includes an absolutely
massive catalog of over 1,500 SF
Symbols for you to use.
And they're easily searchable
right within Xcode and using
standalone SF Symbols app on
your Mac.
[ Applause ]
Symbols. [Laughs] So now you can
see the symbols scale along with
the text for better legibility
and a more consistent layout at
larger sizes.
And because they behave just
like a font, they're available
in all of these weights as well.
[ Applause ]
All of this just scratches the
surface of what's available in
iOS 13.
There's a new share sheet API to
let apps have recipient
suggestions.
A new compositional layout API
to make collection views easier
to work with than ever.
And a screenshot enhancement so
apps can provide full page views
of long content.
And so much more.
And in addition to all of that,
we really wanted to bring iOS
forward this year.
So we gave it its own operating
system complete with major
enhancements to multitasking, a
new PencilKit framework and a
whole suite of productivity
gestures.
Let's start with multitasking.
At iPadOS, your app can be open
in multiple spaces at the same
time, as well as in the
slide-over stack, and display
different content in each space.
To enable this, we're
introducing a new UI window
scene API.
Each window scene represents a
single instance of your app's
UI.
Prior to iPadOS, your app
delegate was responsible for
both its process and UI
lifecycle.
With window scene, we're
splitting out the UI portion of
that into a new scene delegate
object so it can be managed
independently.
And since they're completely
independent, your app can now
manage multiple at the same
time.
Your users can even use drag and
drop to allow individual items
from your apps such as a single
window or message to be opened
in a brand-new window scene.
With this new capability, it's
really important that your users
can resume whatever they were
doing in any scene at any time.
To make this easy, we've built a
new state restoration system
based on NSUserActivity.
You're probably already familiar
with this versatile API.
It's used for handoff, search,
indexing, Siri, and now for
window scene state restoration.
One of the things that really
sets -- you can clap, it's fine.
[ Applause ]
One of the things that really
sets iPads apart is Apple
Pencil.
We're introducing PencilKit
which allows you to easily add
smooth low-latency drawing to
your apps.
This is the same engine used in
Apple apps like Notes, Markup
and Screenshots.
So you get all of those same
features and tools right in your
apps.
You can even use the canvas and
palette functionality separately
and just pick and choose which
pieces make sense for your use
case.
Finally, let's talk about
productivity gestures.
We've made text selection much
easier.
You can now just drag your
finger along text to select it.
Text views and web views are
automatically updated with this
new selection gesture.
And there are new three-finger
gestures for undo and redo.
Swipe three fingers left for
undo and right for redo.
These new gestures use the
existing NSUndoManager so you
don't have to do anything at all
to adopt.
If you'd like easy text
selection outside of text or web
views, or if your app already
uses three-finger gestures and
you have a conflict, you can use
the UITexInteraction API to fix
up those issues.
And for scroll views, you can
now drag the scroll indicator to
jump directly to a location in
the scroll view.
To enable this behavior, just
turn on Show Scroll Indicators.
For this one it's really
important that your scrolling is
performant as we might have to
load all of the cells in a frame
at the same time.
We think our users are going to
love the powerful new things
iPadOS gives them, and we cannot
wait to see what you do with it.
So I'd like to welcome Sebastien
back to the stage.
[ Applause ]
>> Thank you, Cindy.
Now as you've seen, each of our
platforms has incredible new
features that refine the
experience that each offers and
gives them great new
capabilities.
And across all of our platforms
we build a range of technologies
that are designed to give your
apps a huge head start so that
you can build the latest
technologies right into your
app.
There are a few of these that
we'd like to focus on this
afternoon and they cover a
pretty wide range of
capabilities from how we open
our platforms and apps to all
users to how we combine the
virtual and real-world with
augmented reality.
And so we start with
accessibility, and to do that
I'd like to welcome Eric Seymour
on stage.
Eric?
[ Applause ]
>> Thank you, Sebastien.
So we all know that technology
plays a powerful role in
people's lives.
But this is especially true for
people with disabilities.
Technology can be instrumental
in fostering independence,
employment and empowerment.
At Apple, we're guided by a few
key principles for accessibility
and it begins with accessibility
being built in.
People should be able to use our
products out of the box, and
that includes people of all
abilities.
Accessibility should be
comprehensive.
People should have access to the
whole platform, every corner of
the OS, every corner of your
apps.
And perhaps most important, we
want to surprise and delight all
users regardless of ability.
And so this is more than just
about fixing accessibility bugs.
This is about using your
features with accessibility and
striving for an experience
that's great, that's just as
inspired as your original
design.
When we think about
accessibility, we're really
talking about a broad continuum
of abilities.
Hearing, vision, physical,
learning.
And within each of these areas,
we're focused on different
conditions.
So for example, for vision, we
of course have Voiceover, our
screen reader for people who
can't see the screen.
But we also have over a dozen
vision-related features from
zoom to large text.
And when we take this approach
and we apply it to that broad
continuum of abilities, we're
talking about dozens of
accessibility features.
And it really underscores the
notion that accessibility is for
everyone.
Probably most of you use at
least one accessibility feature.
And if you don't already,
there's a good chance you will
eventually.
This year we're introducing
several new accessibility
features and enhancements, and
today I'm going to talk about
two, starting with
discoverability.
In the spirit of accessibility
being for everyone, we wanted to
make it easier to find.
And so to that end we've added
accessibility to iOS Quick
Start, making the out-of-box
experience even more accessible.
Also we've moved accessibility
to the top level of settings.
[ Applause ]
And we've reorganized it to make
things easier to find.
We think it's going to go a long
way to help people discover and
use these great features.
Now let's talk about voice
control, right?
We saw this this morning during
the keynote.
Voice control is this full voice
experience from macOS, iOS and
iPadOS and we think it's going
to be really helpful for people
with physical challenges.
Voice control provides
comprehensive platform access.
You can speak to items by name.
You can refer to items by
number.
You can even speak to regions of
the screen using a grid.
Voice control has got great text
editing.
So of course I can dictate text
but I can also make selections
and corrections using only my
voice.
And it also has awareness.
So effectively even when I'm
dictating text, it hears
commands and it doesn't make me
manage that distinction.
I can just talk to it.
And using the true depth camera,
if I look away, it knows that it
can ignore me.
Voice control's got great spoken
gestures so of course I can do
simple things like taps and
swipes.
But I can also pre-record more
complex gestures that I might
want to use in an app or a game,
like this rotate gesture.
And of course voice control
speech recognition runs fully on
device.
And so now I'd like to show you
voice control in action.
[ Applause ]
And for this demo I'm going to
be talking to my iPhone.
Open messages.
Hey Chris, let's grab dinner
tonight.
I'm thinking pizza.
Pizza emoji.
Change tonight to this weekend.
Tap send.
Undo that.
Tap send.
[ Laughter ]
Undo that.
Tap send.
[ Applause ]
Open Maps.
Tap search field.
San Pedro Square.
Show numbers.
Five. Show grid continuously.
15. Zoom at one.
Repeat four times.
[ Applause ]
Swipe up at 27.
Hide grid.
Tap share.
Tap Chris Adams.
Lots of options around here,
period.
See you later.
Peace emoji.
Ah, look at that.
Undo that.
Peace emoji.
Tap send.
[ Laughter ]
Undo that.
Tap send.
[ Applause ]
Go home. Go to sleep.
Okay. So that's voice control.
Now --
[ Applause ]
Now we can also use voice
control as developers to test
the accessibility of our apps.
And so let's do that now with
the travel app that you saw
earlier.
Wake up. Open Travel.
Tap San Francisco.
Show names.
All right, here's the problem.
So I'm trying to tap on San
Francisco, this element, but it
doesn't have a good
accessibility label yet and it's
a really common problem.
It means I can't speak to this
element with voice control, and
even worse, if I couldn't see
the screen and Voiceover were
reading this to me, I'd be
completely out of luck, stopped
in my tracks.
I would not be able to use this
app.
So fortunately these things are
pretty easy to fix.
And so let's talk about what you
can do to make your apps more
accessible.
The good news is, most
accessibility features just
work.
But some of them, indeed the
most transformative features
like Voice Control and Switch
Control and Voiceover, they need
your support.
And so here's what you can do.
First, do what we just did.
Just try it.
Use your apps with accessibility
features.
You might actually be surprised
at what already works.
But more importantly, you're
going to gain valuable insight
into how some users actually
experience your app.
And you're probably going to
want to make some changes.
Next, use the tools.
Xcode's got great built-in
accessibility support for
developers.
You can edit accessibility
properties right in the Xcode
inspector.
And with new Environment
Overrides, you can preview
visual accessibility
accommodations during your
development lifecycle right in
your app.
It's really cool.
Finally, implement the
Accessibility API.
It's the best way to ensure an
accessible experience.
It's the essential way.
Doing this well is like putting
out a welcome mat to your app
for users of all abilities.
It's how Voiceover and Switch
Control and the rest talk to
your app to offer an adapted
experience.
The Accessibility APIs work on
all platform, and while they're
easy to implement, they're super
powerful.
So even the most sophisticated
apps and experiences can be made
fully accessible.
And of course, SwiftUI has great
accessibility support built
right in.
And so that's our accessibility
update today.
Now another thing we care deeply
about at Apple is privacy.
And so to tell you more about
that, I'd like to hand things
over to Katie.
Thanks very much.
[ Applause ]
>> Thanks, Eric.
Privacy is a topic that isn't
going away.
And it's something that everyone
needs to pay attention to.
It's something you have to
design in from the beginning and
it shapes how your product
works.
When you're designing a new
feature, here are a few steps
that you can take to design for
privacy.
Process on the user's device.
Wherever you can keep user data
on-device, do it.
And this helps you to collect as
little data as you can.
If you don't have the data, it
can't be abused or stolen.
Ask first.
Ask permission from your user
for the data and how you plan to
use it.
And if you do collect data, use
random identifiers.
And scope them down from an
account to a device, to a
session where possible.
And encrypt to keep your users'
data secure.
Applying these principles in
your design process will help
you build great features and
great privacy.
I want to talk about two areas
where we've made it easier for
you to take these steps.
First, location.
Where you go can reveal a lot
about your life.
Where you live, where you work,
what doctor's office you might
go to, or how often you're
hitting the gym versus maybe the
bar.
Because of this, some users are
hesitant to share location with
you and your apps.
So they might miss out on some
of your key features.
So this year, we're adding a new
option: Allow Once.
This provides location access
for just that session and will
ask the user again next time.
But let's say your app is even
better with Always Allow
Location permission.
Here's how this will now work.
First the user needs to select
While In Use.
Then you request location while
your app is in the background.
Then the user will be presented
with an alert, letting them know
that you're requesting location
in the background.
If they change to Always Allow,
you'll have background location
access moving forward.
Finally, we're giving users more
transparency into how their
location is being accessed.
For all apps with background
location permission, from time
to time we'll show them where
your app accessed their
location.
[ Applause ]
With these changes to
permissions, users will feel
more comfortable in how they're
sharing location with you.
Now, let's talk about login.
We've all seen or maybe
implemented buttons like these.
And they can be really
convenient, but they can come at
the cost of your user's privacy.
They also might share more
information about your company's
business than you really want to
be disclosing.
So we want to offer a better
option.
And it's called Sign In With
Apple.
[ Applause ]
It offers fast, easy sign-in
without all the tracking.
This isn't just about privacy
for our users, but also for your
company.
It's not our business to know
how users engage with your app,
so Apple simply won't track
that.
[ Applause ]
It's easy to add a Sign In With
Apple button to your app with a
simple API.
Users can set up an account and
sign into your app with a tap
and a quick Face ID.
So why is this great for all of
you?
First off, more trust and less
friction equals more engaged
users.
Sign In With Apple can shorten
the distance between a user
considering your application and
really embracing it.
Second, verify email addresses.
Apple has already done the work
of verifying email addresses for
you.
[ Applause ]
And we're removing the incentive
for users to share made-up email
addresses by offering a private
email relay service.
So even if a user chooses to
hide their email address when
setting up an account, your
email will arrive in their
verified account, their verified
inbox.
And then there's security.
With Sign Into Apple, you don't
need to deal with storing
passwords or password reset
issues.
And every single account is
protected with two-factor
authentication.
[ Applause ]
This can really improve your
security.
We've also integrated some
interesting innovations around
anti-fraud.
We all know that along with some
real users, sometimes you get
some not so real users.
Nobody wants bots or farmed
accounts.
And we work hard to filter them
out of our systems.
And we want to help you do the
same.
So we built what we call a real
user indicator.
It can tell you if an incoming
account is a real user or if you
might want to do some additional
verification.
So how does this work?
First off, the whole system is
built from the ground up to
maintain user privacy.
It uses on-device intelligence
to determine if the originating
device is behaving in a normal
way.
The device generates a value
without sharing any specifics
with Apple.
This is combined with select
account information and then
boiled down into a single value
that's shared with your app at
account setup time.
Then depending on the value that
you receive, you can be
confident that your new user is
a real user or get a signal that
you might want to take a second
look.
And all of this comes with great
cross-platform support.
It's available on iOS, iPadOS,
macOS, watchOS, tvOS and it even
works on the web.
So it can work on Android and
Windows devices.
[ Applause ]
So there you go.
A super-fast and easy way to
engage new users, two-factor
authentication and anti-fraud
built in.
You can implement it virtually
anywhere, and most importantly,
it respects everyone's privacy.
So this is a solution both you
and your users can trust.
We've already had a number of
developers working with us and
we're excited to see many more
of you adopt.
So that's Sign In With Apple.
[ Applause ]
As I mentioned earlier, a great
way to preserve user privacy is
to work with the users' data
on-device.
And we've built some great
technologies for doing just
that.
To tell you more about machine
learning, I'd like to hand it
over to Bill.
[ Applause ]
>> Thank you, Katie.
[ Applause ]
Machine learning is a key
technology for so many of the
experiences in your apps.
And at Apple, we use on-device
machine learning to power
features from stunning camera
and photos capabilities to AR
Kit and more.
And we can do this because of
our cutting-edge silicon.
With powerful CPUs, GPUs and
dedicated ML processors like the
Neural Engine, we can deliver
incredible real-time
experiences.
The Neural Engine is optimized
to accelerate convolutional
neural networks with
multi-precision support and a
Smart Compute system.
What does that mean?
It means it's an absolute beast.
In fact, the Neural Engine is
capable of up to 5 trillion
operations per second.
Best of all, we've built our
machine learning APIs on top of
this so that your apps can take
full advantage of this blazing
performance.
And we have some great updates,
starting with our out-of-the-box
APIs like Vision, Natural
Language, and Speech.
Today these APIs deliver rich
features such as face detection,
object tracking and named entity
recognition.
And this year, we're adding even
more.
Let's have a look at a few of
these, starting with image
saliency which gives you a
heatmap for an image,
highlighting important objects
and where users are likely to
focus their attention.
We use this today in photos to
help intelligently crop images
as part of the curation
experience.
We're also releasing text
recognition where you can search
text from images like posters,
signs and documents.
[ Applause ]
And take advantage of the
document camera capability we
use in Notes.
For Natural Language, you can
make use of word embeddings
which help to identify words or
sentences with similar meanings.
We use this today for search in
photos so that if you search for
an unknown term like musician,
we can suggest alternatives like
entertainer or singer.
And this year, our Speech API is
now on-device and works on
iPhone, iPad and Mac with
support for 10 languages.
[ Applause ]
And with features like Speech
Saliency, you can understand the
pronunciation, pitch and the
cadence of speech.
Now for those of you who want to
go deeper with machine learning,
you can make use of Core ML, our
on-device technology designed to
run machine learning models with
high performance and privacy.
Today Core ML has great support
for many machine learning
models, from neural networks to
boosted trees and more.
But as you know, the field of
machine learning is constantly
evolving.
And so this year we set out to
support the most advanced neural
networks by adding more layer
types than ever before.
In fact, Core ML now supports
over 100 model layer types.
This enables you to run some of
the most cutting-edge machine
learning models on Apple
devices.
Models like ELMO or WaveNet or
some very recently published
ones like BERT, bringing
breakthrough natural language
processing to your apps.
Now running models like these in
your apps is only part of the
story.
There are times when you may
want to update the models in
your apps on-device based on
user data.
We do this today for features
like Face ID where a user's
appearance may be evolving over
time.
They change their hair, wear a
hat.
Or for features like our Siri
Watch Face where the set of
recommendations is constantly
evolving to deliver a
personalized experience for each
user.
To achieve these experiences, we
use on-device personalization.
And this year we're bringing
that capability to Core ML.
This means you can update the
Core ML models in your app with
data from individual users.
This creates --
[ Applause ]
This creates an updated and
personalized model for the user.
With model personalization, your
apps can now update models in
the background without
compromising user privacy.
Core ML delivers the most
advanced platform for machine
learning models, and building
Core ML models has never been
easier with Create ML, our
framework designed to help all
of you build models with just a
few lines of code.
And this year we're taking
Create ML even further.
It's now a macOS app that lets
you build models with zero code
right from your Mac.
[ Applause ]
You can choose from many
different model templates to fit
your data.
You can build multiple models
with different datasets and
define the parameters for each
of them.
You get real-time feedback on
model training.
And Create ML supports transfer
learning for tasks like image
classification or text analysis.
This speeds up training since
you need very little data and
can leverage Apple's optimized
and heavily pre-trained models.
And you get to experiment and
preview the models.
So for example, you can get
predictions for images by using
your iPhone's camera with
continuity on your Mac.
Or you can use the microphone on
your Mac to test your sound
classification model.
So that's a ton of new stuff and
we're super excited to see what
you can do with all these
awesome new machine learning
capabilities.
In fact, we invited a few
developers to try out all the
new stuff and we've seen some
amazing results.
One in particular was so cool we
decided we had to share it with
you.
So please welcome Ben Harroway
from Lumen Digital to give you a
preview of his new app
NoisyBook.
[ Applause ]
>> Thanks, Bill.
Hi, everyone, I'm Ben from Lumen
Digital and I've been working on
a brand-new app, NoisyBook.
Let me tell you a story.
Once upon a time, on a beautiful
meadow lived a boy called Jack
and his cow Daisy.
Daisy.
[ Cow mooing ]
A mysterious man gave them some
magic beans which grew into a
giant beanstalk, high into the
clouds.
[ Mystical music ]
Okay, I think everybody knows
this story.
Let's try something really
different.
Suddenly an exploding chicken
and his friend the golden tiger
[growling] jumped into their
helicopter [whirring] and flew
into the forest.
[ Crickets and bird sounds ]
And of course, guess what?
They all lived happily ever
after.
[ Music ]
>> Yay.
>> Can you make animal noises
you heard in the story?
>> Okay, we've had some fun.
Now NoisyBook wants us to repeat
some of the animal noises that
we heard during the story.
I think we heard a cow in this
story, so let's try this.
Moo. There he is.
I really cannot believe I'm
standing here making animal
noises in front of all of these
people.
Mad. But how amazing, the app
has used a sound classification
model to actually recognize that
noise and acknowledge it.
You likely also noticed
NoisyBook was able to work with
both traditional stories and
stories straight from our own
imaginations.
It's super powerful.
And thanks to the new features
of speech, sound and Core ML in
iOS 13 and Create ML, this is
all happening entirely
on-device.
It's all happening in real time
and it's running through a
natural language model that I've
trained on over 90,000 lines of
text.
And thanks to these features,
I've been able to take an idea
that I've struggled with for
around two years and really
implement some of these magical
new features in just a couple of
days.
I'm super proud of it and I do
hope that you'll remember to
check out NoisyBook when it
lands on the App Store later
this year.
Thank you.
[ Applause ]
>> Thanks, Ben.
That was really cool.
I know my kids are going to love
it.
Now one of the biggest uses of
machine learning at Apple is
Siri.
Siri is by far the world's most
popular intelligent assistant
with over 500 million monthly
active devices, making over 15
billion requests.
These are staggering numbers.
And Siri works across all of
Apple's devices.
With Siri, your users can
interact with your apps in new
ways.
On the go, with Air Pods,
hands-free from across the room,
or even while in the car.
And thousands of apps are now
integrated with Siri through
Siri Shortcuts.
We built Siri Shortcuts to allow
you to expose the capabilities
you already have in your apps
with very little work and in a
discoverable way for your users.
You can make your shortcuts
discoverable using the Add to
Siri button, educating your
users on how they can use your
app with voice.
That matters because voice
functionality can otherwise be
really hard to discover.
And we've simplified setup so
that the user no longer needs to
record a phrase.
You suggest a phrase and they
add it with a tap.
[ Applause ]
And the biggest request we had
this year was to support
parameters in Shortcuts.
So we've made Shortcuts
conversational which allows
users to interact with your app
through questions in Siri.
So for example, if I'm choosing
what to cook, I could run a
Shortcut with Pana, my recipes
app, and see a list of all my
favorites.
When I choose from the list, it
takes me to the recipe and
starts playing.
And this year the Shortcuts app
is built into iOS and iPadOS,
which means that every user will
have an opportunity to try it
out.
And the app is now the home for
shortcuts from your apps too.
And by popular request, we're
adding support for automation.
[ Applause ]
Which allows users to set
specific triggers for when to
run any shortcut.
And there's plenty of options to
choose from.
You can trigger a shortcut based
on time of day, when you start a
workout on your Apple Watch,
when you connect to CarPlay and
many more.
And the editor now enables full
configuration of your app's
actions, including the ability
to pass information in or out of
your action through parameters.
With this, your app's actions
can be combined with actions
from other apps in multi-step
shortcuts.
Let's say you need to get dinner
for the family.
The kids are hungry, you need it
fast.
You could have a shortcut that
uses the Caviar app that lets
you choose a restaurant, choose
a meal, place the order and then
text the whole family with
what's for dinner and when it
will arrive.
That's combining the power of
your apps with Siri Shortcuts to
make everyday tasks really easy.
And of course --
[ Applause ]
And of course Shortcuts work
across iPhone, iPad, Apple Watch
and HomePod too.
And that's our update for Siri.
[ Applause ]
Now I'd like to invite Jeff to
tell you about the latest
advances in augmented reality.
Thank you.
[ Applause ]
>> Thanks, Bill.
I am thrilled to be here today
to talk about augmented reality.
AR helps you visualize things
that are difficult, expensive or
impossible to do otherwise.
And since introducing AR Kit,
we've seen amazing growth in
applications.
One may think of AR as only for
entertainment, but we've seen
great applications in education,
enterprise, commerce and more.
Commerce is a particularly
impressive use case with Home
Depot, Target and Wayfair all
having tens of thousands of
products available to preview in
AR.
AR Kit hosts the USDZ file
format and Quick Look together,
make the world's first mass
market augmented reality
commerce solution.
In fact, Wayfair is seeing more
than a threefold increase in
purchasing when folks view their
products in augmented reality.
And we love that this is a real
business use case.
This is a great real business
use case for augmented reality
in commerce.
We'd like to continue this
momentum by announcing that
Apple Pay will be integrated
directly with AR Quick Look this
fall.
This makes it easier for
consumers to try on and buy
items like these glasses,
directly from augmented reality.
AR Kit for iOS and iPadOS are
the world's largest augmented
reality platform with hundreds
of millions of enabled devices.
And we've heard from many
developers, they love to take
advantage of this great
opportunity but may not be sure
where to start.
Or 3D can be a little bit
intimidating if you've never
used it before.
Well, we've been listening and
we're really excited to announce
three technologies that make it
much easier to develop augmented
reality applications.
AR Kit, RealityKit and Reality
Composer together provide the
frameworks and tools you need to
quickly and easily develop
augmented reality applications
and experiences.
Starting with Reality Composer,
you can create compelling AR
experiences even if you've never
worked with 3D before.
It provides an intuitive, what
you see is what you get
interface that integrates
seamlessly with Xcode.
And to show you Reality
Composer, I'd like to invite one
of my colleagues, Shrudi, up to
the stage.
[ Applause ]
>> Thank you, Jeff.
Happy to be here.
I have this great travel app
which shows some activities
offered on the main island of
Hawaii.
If the user opts for helicopter
tours, the app shows the path of
the helicopter.
How about we use AR to provide
users a better sense of the
actual tour?
I can do that by adding a button
to the existing app to launch my
AR experience.
Let's see how to do that.
First, we create a button using
SwiftUI.
Followed by adding that button
to my existing view.
Then I open an empty project
file in Reality Composer and
integrate it to my Xcode project
by simply dragging and dropping
it in Xcode.
To load my AR scene from this
Reality Composer project file, I
import RealityKit and then
create a new view for AR.
Oops. Sorry.
Create a new view for AR using
SwiftUI.
And that's all the code you need
to add an AR experience to your
existing app.
Moving on to the fun part of
creating my AR scene with
Reality Composer.
I open my empty Reality project
and start by loading a custom
USTZ of the Hawaii model.
Sweet. Next I'd like to mark the
beginning of my helicopter tour.
For that I can use Reality
Composer's built-in content
library which offers hundreds of
professional-grade 3D content to
developers.
I'll use a simple sphere.
I can change the content's look,
by applying a different material
to it.
As you can see, placing content
in 3D is pretty simple and
intuitive with Reality Composer.
Let's see what else we can do
here.
How about adding a cool fading
effect to the scene when the
scene starts.
I can do that by opening the
Behaviors panel and creating a
custom behavior which gets
triggered when the scene starts.
I first add an action to hide
all the content in the scene.
Then the scene starts, and then
add another action to make all
the content appear after a
certain duration.
How about we preview it right
here?
Awesome. Developing AR on Mac is
convenient, but it poses the
challenge of guessing the
content scale and look when
placed in real world.
That's why we created Reality
Composer for macOS as well as
iPadOS and iOS to remove the
guesswork out of development.
So I'll hand this off to Jeff to
see what we have so far on an
iPad.
>> Thanks very much, Shrudi.
So this is Reality Composer for
the iPad.
It has the same great features
that you see in the Reality
Composer for the Mac.
And we can take the seen that
Shrudi handed off and finish it
out with our final artwork.
So we've had someone create with
Adobe Arrow our final file or
our final artwork, and we'll put
it into the scene.
So I'm going to take the proxy
art that Shrudi had.
I'm going to replace that with
our new artwork.
Let me check to see if that's
the right thing.
Fantastic.
That is our final helicopter.
And I also want to bring in the
animation that goes with that.
That's super easy.
If you remember, she created
that behavior, so we're going to
look at that behavior and all
we're going to do is add an
additional action.
So we look for USDZ animation
which is bringing in the
animation that went with the
file.
Fantastic.
Looks good.
Let's preview that.
Great. So hide our Behaviors
tab.
That looks like what we want.
Perfect. Let's preview this in
AR, but you can do it with the
iPad.
Wow. Let's try that again.
Fantastic.
That's exactly what I wanted it
to look like.
And we can also play that.
Perfect. We have the animation
of the helicopter touring the
island.
That will look great in our
travel application.
So that's Reality Composer for
the iPad.
And you're going to love how you
can have the same great ease of
use and seamless experience
between macOS, iPadOS and iOS
with Reality Composer.
[ Applause ]
Now RealityKit.
RealityKit is a modern
high-performance 3D engine
designed from the ground up for
augmented reality rendering and
simulation.
And because it's delivered as a
framework, it's very easy for
all of you to take your 2D apps
and extend them into 3D.
RealityKit uses modern
visibly-based rendering and
materials.
It is a data-driven rendering
system and a fully
multi-threaded renderer that's
highly optimized for Apple's
GPUs.
And also, really importantly,
we've integrated AR Kit scene
understanding into RealityKit.
Which means as AR Kit leans more
about the environment, it
synchronizes this to your
virtual scene automatically.
We saw RealityKit in action this
morning.
Let's take a closer look.
Let's see what's really going
on.
The reality you see is based on
things like image-based
lighting, motion blur and camera
effects like depth of field and
camera noise that really blur
the line between what is reality
and what is virtual.
And you get these features with
RealityKit automatically.
You access RealityKit through a
new framework which is a native
Swift API.
It takes many advantages of the
key features of Swift to allow
you to write clear, compact
code.
Concepts Log and Rally are
directly integrated.
For example, it's easy to load
your AR assets and directly
attach them to anchors.
Protocol extensions provide easy
access to entity property which
allow you to quickly access
components such as lights or
shadows in this case and reduce
the need for runtime checks.
This also means that you're able
to work with entities in a
strongly-typed manner.
Here we're applying an angular
force to an entity that
participates in physics.
And that's all the code you need
for this scene.
Last but definitely not least
today is a new version of our
augmented reality framework AR
Kit 3.
We've taken the most capable AR
platform in the world and made
it even more powerful with new
in-depth reverse features.
Since introducing AR Kit, we've
had many developers ask to be
able to use the front and back
cameras simultaneously.
Well, in AR Kit 3 you can.
So you can -- that's right, both
cameras at the same time.
[ Applause ]
This allows you to use face
tracking to drive your augmented
reality experiences directly.
And as Craig talked about this
morning, properly occluding
people in an AR scene is an
extremely tough problem.
You see it every time someone
walks in front of a virtual
object.
To solve this, we've built an
advanced machine-learning
algorithm that figures out which
pixels are a person, the depth
of that person in the scene and
uses its information to allow us
to properly render the scene in
the virtual objects.
With people occlusion, entirely
new experiences like Minecraft
Earth Demo you saw this morning
are possible.
[ Applause ]
Absolutely amazing.
And finally, we built a system
that allows humans to interact
with virtual content.
AR Kit 3 is able to capture a
person's motion in real time
with just the single RGB camera
in an iPad or iPhone.
We again use a machine learned
algorithm to track the person,
building a 2D stick figure and
take that figure and then infer
a 3D motion from them or lift it
into 3D.
Both the 2D skeleton and the 3D
skeleton are available to
developers.
The 3D has over 90 articulated
joints and provides the same
ease of use as Face Kit.
So those are our new
technologies.
AR Kit 3, RealityKit, and
Reality Composer are tools and
frameworks that make it easy for
anyone, anyone, to build amazing
AR experiences.
And we'd like to do something
fun today, so we have a fun new
application at the conference.
You may have seen it,
SwiftStrike.
We're making a tabletop version
of this as a developer sample
available today.
It uses RealityKit, AR Kit 3 and
Reality Composer and provides a
great starting point for your
applications.
[ Music ]
Lots of fun.
[ Applause ]
Thank you.
[ Applause ]
And of course Metal powers a lot
of what we do in AR on our
devices.
And to tell you more about
what's new in Metal, I'd like to
welcome Jeremy to the stage.
[ Applause ]
>> Thank you, Jeff.
So Metal is Apple's modern
high-performance GPU programming
API for graphics and compute.
It's also incredibly easy to
use, both for beginners and
experts alike.
And it brings stunning
performance increases,
supporting up to 100 times more
draw calls than OpenGL and
enabling a whole new generation
of advanced graphics
performance.
This is because Metal gives your
app direct control over the GPUs
that are at the core of Apple's
products.
And those GPUs now power over
1.4 billion Metal-capable system
from iPhones to iPads to the
all-new Mac Pro.
In fact, all of Apple's
platforms now run on Metal.
From our smooth user interface
to the latest 3D rendering in
RealityKit, to our advanced
camera processing pipeline,
we're using Metal everywhere.
And you can too.
To help you do just that, this
year we focused on three key
areas.
We've made Metal even easier to
use.
We've enabled all-new levels of
high-performance GPU compute.
And we've enhanced Metal for our
most demanding pro app
developers and customers.
First, with Metal's incredibly
approachable API and GPU shading
language, you can get started
with our powerful suite of
developer tools for GPU
debugging, profiling and
performance optimizing.
And we've made those tools even
better.
We have added full Metal support
to the iOS Simulator in Xcode.
[ Applause ]
We're glad you're excited about
it.
We're really excited about it
too.
You can now use Metal directly
in the simulator and you
automatically get major
performance improvements when
using UI Kits, Maps and all of
those system frameworks built on
Metal.
And this is because the iOS
Simulator is now using the
native Metal support built right
into your Mac.
We've also added an all-new
Metal memory debugger.
You can now identify exactly how
much memory your app is using
for Metal textures, buffers and
heats and you can optimize your
games and apps to use every last
byte for even more advanced
graphics.
Now over the past few years,
Metal has grown to support the
advanced features of dozens of
GPUs, each with their own
hardware from every major GPU
vendor and across all of our
platforms and OS releases.
And as a developer you
previously had to manage all of
this complexity of these
different hardware feature sets
yourself.
Well this year we've made it
much simpler with just three
Metal GPU families.
A Metal common GPU family,
identifying the vast majority of
Metal features that you can use
across all of our platforms.
A second family for the advanced
unique features of our Apple
Design GPUs and our iOS, iPadOS
and tvOS products.
And a third family for the
powerful GPUs on our Mac
systems.
And it makes it that much easier
to bring your apps from iOS to
macOS or the other way around.
Now, in addition to enabling
immersive games and advanced
graphics, Metal also gives your
app the ability to harness the
GPU for compute.
So what is GPU compute?
Well, GPUs were originally
designed to process large
numbers of pixels requiring the
execution of complex
mathematical computations in a
massively parallel fashion.
And it turns out we can apply
that computational horsepower to
a wide variety of tasks besides
traditional graphics.
So Metal provides all of the
building blocks that you need
for general purpose computation
on the GPU.
A familiar C++ based GPU
programming language, compute
command encoding, API and
runtime, a full-feature compiler
and debugger and a rich library
of shaders and kernels called
the Metal performance shaders.
This MPS library provides you
valuable compute functions all
pre-optimized for all of those
GPUs and all of those Apple
systems and it's all fully
integrated right into your Metal
code.
And on our Apple Design GPUs,
Metal also provides advanced
compute features like tile
shading, enabling you to combine
your compute shaders and your
fragment processing into one
simple, highly-efficient render
pass.
And this year we're also
introducing Metal indirect
compute command encoding.
It allows you to build your GPU
compute commands right on the
GPU itself, unlocking all-new
algorithms for compute
efficiency and freeing the CPU
for other activities in your
app.
And with the Radeon Pro Vega II,
the new Mac Pro is a GPU compute
monster, capable of up to 56
teraflops of GPU compute all
made available to you via Metal.
Now that's a heck of a lot of
flops.
I mean, look at them all.
They barely fit on the screen.
[ Applause ]
That's a lot.
[ Applause ]
So what can you do with all of
those flops of GPU compute?
Well, with Metal you can use
them for advanced compute
processing.
For your videos, you can improve
the quality of your photos.
You can train your ML models and
you can use them to accelerate
interactive ray tracing.
So we have further improved
Metal support for ray tracing
this year, now enabling dynamic
scenes by moving the bounding
volume hierarchy construction
from the CPU to the GPU, and
added all-new optimized MPS
de-noising filters to further
improve image quality.
Now ray tracing, it uses the GPU
to computationally model the
physical properties of lights
and surfaces and reflections and
it can be so complex, people
actually earn PhD's in this
topic.
So to show you how you can use
Metal and GPU Compute for ray
tracing, we decided to put
together a pretty simple
example.
And I'd now like to invite Rav
to the stage to give you a quick
demonstration.
Rav?
[ Applause ]
>> Thank you, Jeremy.
So we built a prototype hybrid
ray tracing engine to see what
we could do with Metal Compute
on the powerful new Mac Pro.
Now this toy city that we built
looks simple, but we're using
Metal to process over 1 billion
rays per second at 4K
resolution.
Let me walk you through what
we're doing here.
So we start by using Metal draw
commands to render the geometry
and material information that
we're going to use later, and
then switch to using Metal
Compute and the MPS ray triangle
intersection APIs to do all the
heavy lifting.
This includes calculating
ambient light at every surface
point, as you can see in this
image.
But also to simulate light
bouncing between objects in our
scene at increasing ray depth to
generate shadows, reflections
and even reflections within
those reflections.
And then we end by using the
optimized MPS or optimize
compute kernels in the new MPS
de-noiser to produce this really
high-quality image.
So traditional CPU renderers
would take over a minute to
generate a frame like this.
With Metal, we've been able to
reduce this to under 30
milliseconds, which is a
staggering 1,000 times faster.
So pro app developers -- thank
you.
We think it's pretty great too.
[ Applause ]
So pro app developers can now
use Metal Compute to build new
interactive tools to visualize
these physically accurate
lighting effects like these
dramatic shadows that are cast
by the buildings and also by
that fire escape.
Or if we pan over here to this
roof, the realistic way that
green light bounces onto this
neighboring building.
That just looks great.
Thank you.
[ Applause ]
Another great effect that we can
simulate or model is accurate
reflections, as you can see in
the windshields of this bus.
In fact, you can see the shadows
moving in that windshield or in
those reflections as I change
the position of the sun.
So that looks great, but
animating objects in a ray trace
scene can be very
computationally expensive
because we have to update the
bounding volume hierarchy that's
associated with the geometry.
Fortunately, with Metal Compute
and the MPS APIs, we're able to
move all of this work onto the
GPUs and achieve this great
animation.
And there go our trains.
So that was just an example of
what's possible when you use
Metal Compute for accelerated
ray tracing on the new Mac Pro.
It's a beast.
Thank you.
Back to you, Jeremy.
[ Applause ]
>> Thank you, Rav.
So that's what we did in just a
short bit of time.
But high-performance ray tracing
can be even more powerful in the
hands of our most expert
third-party developers.
Which is why we are so excited
that OTOY has announced they're
using Metal Compute to build
OctaneX, an all-new version of
Octane Renderer, their
interactive path tracing engine
optimized for Metal and the
Apple platforms.
And we are incredibly thrilled
to be working with Maxon who's
bringing their powerful
GPU-accelerated renderer
Redshift to the Mac with an
all-new version optimized for
Metal and the new Mac Pro.
So with advanced Metal Compute
APIs and incredibly powerful
hardware, we've built Metal to
power the most advanced
professional content creation
tools.
And we've been working really
closely with the leading app
developers who have all
announced that the upcoming
versions of these professional
content creation tools and apps
will be fully optimized for
Metal and the Apple platforms.
For instance, Serif has just
announced an all-new version of
Affinity Photo for Mac using
Metal's graphics and Compute
APIs to hypercharge their
advanced photo processing engine
in achieving stunning
performance increases.
More than 10 times better
performance and jaw-dropping
increases of 50 times better
performance using Metal with
multiple GPUs on the new Mac
Pro.
So to enable these kinds of pro
apps and this kind of
performance, we work really
closely with our GPU hardware
and software partner teams to
add all-new features to Metal.
To support the new AMD Infinity
Fabric link in the new Mac Pro,
we added the Metal Peer Group
API.
So what does this do?
Well, previously sharing
workloads across multiple GPUs
would require moving large
amounts of data in a round trip
across the PCI bus.
But with the Metal Peer Group
API, apps can use multiple GPUs
much more efficiently, directly
sharing data across the Infinity
Fabric link and without taking
that long and scenic route
through system memory.
Now finally, you've seen how you
can use Metal Compute and the
new Mac Pro to process a whole
lot more pixels.
But we also want you to produce
even more beautiful pixels.
So we've introduced the gorgeous
new Pro Display XDR with all-new
HDR software support in macOS.
You can now use the AV
Foundation APIs to decode HDR
videos or you can render native
HDR content directly with Metal.
You can manage the HDR display
tone mapping yourself or you can
let the window system and our
advanced display system software
handle it all for you.
And with these same APIs, you
can also access a far greater
range of brightness levels on
many of our existing Mac
displays as well.
So that's our Metal update for
today.
It's even easier to use Metal
across all of our platforms with
Metal in the iOS Simulator and
simplified GPU families.
We have all-new features and
powerful hardware to unleash
all-new levels of GPU compute
performance.
And we built Metal to be the
best GPU programming API to
drive modern professional
content creation tools and apps.
So thank you very much.
I'll hand it back to Sebastien
now.
Thank you.
[ Applause ]
>> Thank you, Jeremy.
Don't you love Metal?
Don't you love the power of
Metal?
Really, really amazing.
Now what you've seen this
afternoon is a huge amount of
new technology that's new for
all of you as developers.
And what we've shown covering
developer tools, the Apple
platforms and core technologies
is just some of the highlights.
We actually have so much more to
show you this week.
And so ahead of us are 109
different sessions.
And it turns out that that
wasn't enough to cover
everything.
So this year we added an
additional 27 video-only
sessions.
And when you want to dive even
deeper, you could sit down with
some of the over 1,000 Apple
engineers that are here at WWDC
in 229 different lab sessions
throughout the week.
So get out there and prepare to
have your minds blown.
It's going to be a great week.
Thank you.
[ Applause ]