WWDC2013 Session 403

Transcript

X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
[ Silence ]
[Applause]
>> Welcome, welcome.
So I know it's almost lunch.
I need you guys to hang with me.
We'll be fast.
I'd like to start out with
a question for all of you,
who here builds apps for iOS
devices or builds Mac apps
that take advantage
of Store-only features
like iCloud or Game Center?
Great, this session
is all about you.
You want to get your system
and your projects configured
for this task as quickly as
possible because at the end
of the day you want to spend
more time doing what it is
that you love, building
great products,
and spend the last
time configuring things
so you can begin that process.
My name Joshua Pennington,
I'm one of the Xcode engineering
managers and today I'm going
to show you some of the changes
that we've made in Xcode 5
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
that makes it easy and
fast to get everything set
up so you can spend
more time writing code
and less time configuring
things like entitlements
or provisioning profiles.
We're going to cover
a few topics today.
We're going to start out by
talking about signing assets.
When you develop apps for Apple
platforms, you need to sign them
and there are a few things that
you need in order to do so.
After that we're going to
talk about some of the changes
that we've made in Xcode
5 regarding how we use
and manage your Apple
ID accounts.
After that we'll talk about some
of the changes that we've made
in the project editor
that makes getting set
up to use platform features
like iCloud or Game Center,
really easy, especially
when it comes
to setting up entitlements.
We're also going to show
you some of the changes
that we've made to the
distribution workflow
that makes it easier
to get your products
into iTunes Connect
for App review.
And after that we're
going to talk about some
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
of the advancements
that we've made
in troubleshooting issues
involving code signing
and entitlements.
Xcode 5 makes it easy
to identify, diagnose
and fix problems in these
areas entirely with an Xcode,
so that's what we're
going to cover today.
Let's get started by
talking about signing.
Why do you need to
sign your code?
Well, if you want to run an app
on an iOS device that app has
to be signed with an
Apple issued certificate
where the application will
not install or launch.
Similarly if you're building a
Mac app that's taking advantage
of services like iCloud or Game
Center, for your app to connect
to the different demons
in order to do that,
you have to have your app signed
and include the correct
entitlements.
And of course when it comes time
to distribute your
application you need to sign
that with your distribution
signing identity.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
So if you want to
do these things,
you need to sign your code.
And there are a few things that
you need in order to do so.
There are two signing assets
that you need in order
to sign your application.
The first asset is
a signing identity.
A signing identity means a
certificate and the private key
that goes along with it.
I'm not going to
go into the details
of public-private
key cryptography
or what code sign
does under the hood.
But for the purpose of this
session, you just need to know
that you have to
have the private key
and the apple issued certificate
in order to sign your app.
So that's the first asset that
you need, a signing identity.
After that you need a
provisioning profile.
A provisioning profile
is a document
that outlines a few details
about your application
and it contains the following,
an App ID that will be matched
against the bundle ID of the
application that includes it.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
If this doesn't match what's
in the app's bundle ID,
it's not going to launch.
You can include a wild card
in your provisioning profile
so you can use the same
profile from multiple apps
that your team develops.
A profile also includes a list
of devices that are authorized
to run the application.
If your device is
not in this list,
the app will not
install or launch.
It also includes a list of
certificates that may be used
in conjunction with the
provisioning profile.
And finally it contains a
white list of entitlements.
At runtime, any entitlements
that are
in your application will be
validated against the ones
in the provisioning profile.
So if you include an entitlement
in your app that isn't
in your profile, your app
will not install or launch.
So those are the two signing
assets that you need in order
to sign your applications.
Where do you get them?
The first step is to join
an Apple Developer Program.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
Apple has three developer
programs, iOS, Mac and Safari.
Each one allows you to obtain
the signing assets required
to build for those platforms.
In the iOS and Mac Developer
Program begin the process
of allowing you to submit
applications for review.
Once you've joined the developer
program you'll have an Apple ID
account that is associated
with a development team
in the Member Center.
This allows you to log
in to the Member Center
where you can request
signing certificates
and provisioning profiles.
But really you should use
the integration Xcode has.
Xcode has that integration
with the Member Center
for some time now
for automatically
downloading your signing assets
so you should use this.
In an Xcode 5, we've
made a number of changes
to how these works, to make
obtaining your signing assets
easier and faster and also--
also to make it easier
to diagnose problems
as they crop up.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
To begin telling you about
these changes, I'd like to talk
about the changes
that we've made
to how we use your Apple
ID accounts in Xcode.
Who's seen this before?
Yes. [chuckles] So this
is what we would show you
in Xcode 4 whenever
we needed to authentic
with the Member Center.
We'd ask you for the
username and password
of the Apple ID account
that you use
for your developer
program membership.
And we would ask you for
this every single time.
So if you use the
Member Center a lot
in Xcode you would see this
sheet quite frequently.
Also I know a lot of
you are contractors
and may have multiple Apple
ID accounts, with this UI,
it's not always clear which
account you should use
and it isn't clear what
we're going to use that for.
In Xcode 5 we have now dedicated
space in Xcode's preferences
for managing all of the
account that you use in Xcode
for your development
including Apple ID accounts.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
We make it really easy to add
accounts and to view details
about that information.
And once you've entered in an
account, we will not ask you
for the password again, yes.
[applause] So I'd
like to show you some
of these changes
instead of talking
about them with a quick demo.
I'm going to hop over
to my demo machine.
So I've got a copy of Xcode here
and to view the account's
information I just go
to Xcode's preferences.
To do that I just click
Xcode in the Menu bar
and choose Preferences.
At this point you can see
that there are a few accounts
that Xcode already knows about.
These are some source
control repositories
that I have entered in.
To add an Apple ID account,
I just click the plus button
in the Source list and
choice Add Apple ID.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
I enter in the log
in information
from my developer program
Apple ID, like a type on stage
that would be really
useful, and choice Add.
And now Xcode knows about that
account and will not ask me
for the password again.
You can see we display a
little bit of information
about the account on
the right-hand side.
The most important thing that
we display here is the list
of the teams that this
account is a member of.
Now, I know a lot of you
have individual memberships
in the developer program so
you're probably thinking,
"What's this development teams?"
Well, whenever, you join that
you have a team created for you.
It's probably your name and it
will be listed here as well.
For those of you who
have used your Apple ID
to join multiple teams, you'll
see all the teams listed here
and you also see the role
that your account plays.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
Each account in a development
team has a different role
and the basic idea is there
are varying permission levels
for the types of signing assets
that an account is allowed
to create and a signing
rules allows you to do that.
We also have some UI for
viewing the signing details
about the varying signing
assets that you have for a team
and you can get at that
by clicking the View
Details button.
We'll cover this later
on in this session.
So that's how you
add an account.
You can see it's
pretty straightforward,
and the good news is if you've
used Xcode 4 in the past
and you checked that saved in
keychain option on that log
in sheet, will automatically
import those accounts here.
So you don't even have
to add your account.
Now, this UI is not just
about making it easier
to manage multiple Apple IDs.
We've also made it
easy to migrate
to a new development machine.
Right now it's pretty easy
to get into a situation
where you can't build your apps
when you move to a new machine.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
You try to build and
you'll get an error about
"No valid signing
identity found."
What that means is
you probably forgot
to bring your private key
along from your old machine
to your new one and this is
because Apple does not have
a copy of your private key,
so you need to move it along
to any development machines
as you change machines
to work on.
And we wanted to make this
process really straight forward,
and we also wanted to
bring along all the account
information that we
have stored here.
So it is now possible to export
all of the account information
that Xcode has in the signing
assets that go along with them.
So we'll take your
signing identities
which include your private keys
and your provisioning profiles.
We'll bundle that
up with the list
of the accounts including
their username their passwords.
We'll stash that in a single
password protected file
that we then hand off to you
and you can take that file,
airdrop it to your new
Mac, double click the file
and Xcode will automatically
import the contains.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
This means that you can hit
build in your new project,
or rather your existing project,
and get the exact same code
signing behavior that you had
on your old machine and
in a matter of minutes.
And this is really easy.
To export your accounts, you
just click on the Gear button
in the Source list and
choose export accounts.
Type in filename and enter in
a password to secure the file,
type it in again for
verification and choose save.
In just like that Xcode is now
given me a developer profile
that I can take to my
new machine and import.
So you can see, it's really
straightforward to move
to a new machine and
you can also use this
to update your development
machines.
If you get some new
signing identities,
you can export your
accounts and reimport them
in your other development
machines to make sure
that your signing
identities are always
in a current state
on each machine.
So that's the account section
so I'll go back over to slides.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
And one thing to note here is
this account's UI is not just
about making it really
convenient
to have multiple accounts
or to view information
about those accounts.
It's really the most visible
part of a number of changes
that we've made throughout
Xcode's infrastructure
for using your accounts and
for using your signing assets.
This means that Xcode can give
you better error messages.
Instead of saying, "no valid
signing identities found,"
we can tell you your
private key is missing.
One's actionable, one's not.
[applause] Yeah, I'm pretty
excited about that too.
This also means that we can
be helpful whenever your
configuring your
project to take advantage
of platform features
like iCloud.
We'll set up your
provisioning profiles
and all the other
details that you need
so you can begin
writing your code.
To give you a tour of the
changes that we've made
in the project editor for this
I'd like to turn this stage
over to my colleague
Nittai [phonetic],
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
who's going to show
these things.
Thank you.
[ Applause ]
>> Good morning everybody,
as Joshua mentioned we've
added some great new features
to the project editor
in Xcode 5.
We want the tools to help you
configure your applications
efficiently so that you can
devote more time to development.
One of the areas that we've
focused on is capabilities.
Capabilities are platform
features such as iCloud
or Game Center that you can make
use of in your applications.
These are often features that
make your apps more appealing
or useful to your customers
so we want you to use them,
and we want the tools to
make it easy to set them up.
That said how many of you
have tried to take advantage
of capabilities such
as iCloud in one
of your applications
in the past?
I see a few hands.
If you've done so then you know
that the process for setting
that up could often be complex,
time consuming, and error prone.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
So let's take a look
at a few examples.
When you want to set up iCloud
in your application the first
thing you need to do is sign
in to the Member Center
and download a new provisioning
profile with iCloud enabled.
Then you need to
hop back into Xcode,
create an entitlements file
if you don't already have one
and enter in the appropriate
iCloud specific entitlements.
So that's just iCloud.
What about Game Center?
When you want to use Game Center
you need to follow a similar set
of steps but the
details are different.
You still need a provisioning
profile but now you also need
to link in a framework and
maybe make some modifications
to your info.plist.
Maps integration and
in-app purchase come
with another similar but
slightly different set
of configuration steps
and these aren't even all
of the capabilities
that you can make use
of in your apps,
it's just a subset.
Each one has its own unique
set of configuration steps.
You need to perform
them all correctly.
Now, none of this
is rocket science
but as you might imagine the
more apps you develop the more
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
capabilities you take advantage
of, the more time you'll have
to devote to these
configuration tasks.
Not only that, but if
you make a mistake,
your application may
not launch and you need
to spend more time
debugging that issue.
And keep in mind you
need to perform all
of this configuration before
you can even write a single line
of code to take advantage
of a capability.
So won't it be great if instead
of you needing to fuss with all
of these configuration details
all you had to do is tell Xcode
which capabilities you intend
to use and Xcode took care
of the configuration for you.
Well, that's what the
capabilities tab does.
This is what it looks like.
As you can see, it's just a new
tab inside of the project editor
and when you view it, it shows
you all of the capabilities
that are available for
you to use in your apps.
When you want to use one,
all you have to do is hit the
On switch and Xcode
will perform all
of the configuration for you.
There are no additional steps.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
This-- [applause] Yeah.
This configuration
includes things
like configuration your
provisioning profiles
and downloading them
from the Member Center,
setting up entitlements,
modifying your info.plist,
linking frameworks,
modifying build settings.
There's no magic involve.
Xcode performs all of the
same steps that you use
to have to do manually.
Now, taking the step back,
one of the really great things
about this is that you
don't need to configure all
of these small details in
different editors and Xcode
or in the Member Center anymore.
All you have to do is
tell Xcode that you intend
to use the capability
by hitting the On switch
and Xcode takes care
of the rest.
It also remembers your intent.
So if anything goes wrong
with your configuration
in the future, Xcode
can help diagnose
and resolve those
issues for you.
We'll see more of how that
works a little bit later
on in this session
but it's clear
that the capabilities tab is
going to make it really simple
for you to take advantage of
platform features in your apps.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
Now I'd like to show this
to you on the demo machine
but first I want
to show you a few
of the other changes we've
made to project editor.
We've taken the summary tab
and renamed it to General
and we've also cleaned
up its user interface,
added some new functionality
and focused specifically
on the iOS App icons
and launch images UI.
Here's what it used to
look like in Xcode 4.
As you can see it's a little
cluttered and disorganized.
It's not really easy to tell how
to use it, what you're supposed
to do with those
images UIs [phonetic].
It's not showing you image
UI for all of the App icons
that you should provide
for your apps
such as Spotlight
and Setting icons.
And sometimes it also doesn't
show you the right information.
For example this
application has App icons
but the summary tab is
not showing them to me.
So we wanted to provide you with
the better experience for this.
In Xcode 5 we present you
with a much simplier
streamlined table based view
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
where each image that
you need to provide
for you app is represented by a
row in the table and it's easy
to tell which images you
specified and which are missing
because Xcode shows you a
warning badge for the ones
that you still need to add.
When you're ready to
add one you just click
on the file picker button
and Xcode will show you a
familiar file picker sheet
and you just choose the
image you want to use.
In addition to streamlining
this, we've also built
in support for the iOS app icons
and launch images you'll need
to add when you start
building apps for iOS 7
so you can just specify
those here.
And finally we've also built
in support for asset catalogs.
If you missed the "What's
New in Xcode 5" session
from earlier this week, asset
catalogs are a great new feature
in Xcode 5 that will help
you manage all of the images
for your application
in one place.
Xcode 5 comes with a
dedicated asset catalog editor
which provides you with a very
nice streamlined environment
for viewing and updating your
images including your App icons
and launch images.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
It's a simple drag and drop
interface and you no longer need
to remember all of the various
suffices that need to be added
to launch images in order to
comply with a naming convention.
You just need to drag in
the images you want to use.
So when you're ready to make
use of an asset catalog,
the general tab makes
it just one click away.
You just have to click, click
the use asset catalog button
and the general tab will
copy all of your app icons
and launch images into
a new asset catalog.
So let's take a look, let's
take a look at how that works.
[applause] So here we are back
at Xcode's welcome screen,
and one of the things we've
like to show you over the course
of this session is how
Xcode makes it really easy
to create a brand new
application, configure it
and then eventually archive
and submit it to the App store.
So I'm going to start off by
creating a new application.
I'll do that by hitting the
Create A New Xcode Project
button on the welcome window
and then Xcode will show
me its template assistant.
Xcode comes prepackaged with
a variety of starting points,
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
excuse me for various
types of products
that you can build
including iOS applications.
So, here we can see
the list of templates
that Xcode comes
packaged with for iOS.
And I can just choose
one and hit Next.
In this case I'll choose
Master Detail Application.
I'll give my App a name,
"Crazy notes", and hit Next.
And I'll just put
this on the Desktop
and I'll hit the Create button.
Now, Xcode has created my
brand new iOS application.
Now, by Default, Xcode
opens to the project editor
for a new App, so that you can
immediately begin making project
configuration changes.
The first thing I'd like
to do is to enable my App
to use iCloud because
I plan to use iCloud.
So, to do that I'll click
on the Capabilities tab
and I will see the same
interface that we saw
in the slides a moment ago.
Xcode shows me all
of the capabilities
that are available
for use in my App.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
If I want to see more
information about one,
all I have to do is click this
Disclosure Triangle by its name
and Xcode will show me a
brief description of what
that Capability does as long
as the steps involved
and enabling it.
So, as you can see, when I hit
the On switch to enable iCloud,
Xcode is going to perform
the same tasks we saw
in the slides earlier.
It's going to sign in
into the Member Center
and download a provisioning
profile and it's also going
to update my entitlements.
So, I want to use iCloud,
let's go ahead and turn it on.
OK, now as I said earlier,
when enabling iCloud,
Xcode needs to communicate
with the Member Center
to download a provisioning
profile for me.
So, the first thing, the key
piece of information it needs
to know in order to
perform that task is
which development
team I'd like to use.
The Capabilities tab makes use
of the accounts integration
that Joshua showed you
earlier, both when communicating
with the Member Center and
also in showing you this list
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
of teams from which
you can choose.
So, you don't need to
type in anything manually,
we already know all of the
teams that you want to use
because you specified them
in the account [inaudible].
So, I can simply select
a team from this list
and one thing I should point out
is if I had multiple Apple IDs,
I would see all of
those Apple IDs listed
in this pop-up Menu along with
the teams that they belong to.
But since we only have one Apple
ID, we're just showing the teams
from that-- from that account.
I'll choose the SDK tools
team and hit Choose.
Now, Xcode won't ask me
development team again
for this application, it's
going to remember my selection.
So, if I enable any other
Capabilities, I won't be asked
that again and I can change
it later if I want to.
Once Xcode is done communicating
with the member center,
we can see that it's
finished enabling iCloud.
The steps at the bottom
of the iCloud section
now have checkmarks next
to them indicating that
Xcode completed those
steps successfully.
We can see here in the
project navigator for example
that it's created a
new entitlements file
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
with the iCloud entitlements
that I'll need.
Now, there's also some
new UI that's appeared
in the iCloud section.
Some Capabilities have optional
features that you might want
to configure yourself such
as using the key-value store
for iCloud or specifying some
custom container identifiers.
We show you interface
for managing those options
right alongside the rest
of the Capability so
that you can make all
of your Capability configuration
changes in the Capabilities tab,
you don't have to
go anywhere else.
So, for example, if I want
to use the key-value store,
I can just check the box
and Xcode will modify my
entitlements file for me.
Now, my App is fully
configured to use iCloud.
You'll notice a few things
that I didn't have to do.
I didn't have to sign
in to the Member Center
and download a provisioning
profile.
I didn't have to go
to Keychain Access.
I didn't have to go to any
other editors in Xcode.
I did everything I needed to do
from within the Capabilities
tab.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
And my application
is actually ready
to build and run on my device.
So, I'm going to go ahead and
do that by hitting the Build
and Run button in
Xcode's toolbar.
And my device is locked,
so I'll unlock it first.
And we'll try that again.
Now, we can see that Xcode
is building my application.
It's shipping it
over to my device
and in a few moments
we'll see it launch.
I'll just hold this
up, so we can see
that it launches,
and there it goes.
Screen turns white and that's
my new master detail application
with iCloud enabled,
and it's launched.
[ Applause ]
Now, those of you who have
made use of the capabilities
such as iCloud in the past might
recognize that as the point
where if you made a mistake,
your Apple won't launch
and you need to start debugging
the entitlements issues.
With the Capabilities tab,
that's the thing of the past,
every thing's configured
correctly.
So, your application
can immediately launch
after you enable iCloud.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
Now, let's go back to the
Capabilities tab and take a look
at one of the other
Capabilities available here.
There's a new feature in iOS
7 called "Background fetch"
and I want my App to be able
to take advantage of that.
So that it can download
information
over the network while it's
running in the background.
In order to enable that, I
would need to make modification
to my info.plist file.
And first, I'd probably
have to look
up documentation explaining
what exactly I needed to do.
So that takes a little
bit of time.
With the Capabilities
tab, I don't have
to do any of that anymore.
All I have to do is enable
the Capability by hitting the
On switch and then I can choose
the Background Fetch option.
And we can see from
the list of steps below
that Xcode has modified
my info.plist for me.
So, I didn't have to look
up the documentation or go
to any other editors in Xcode.
And now, I can just start
writing my code to make use
of Background Fetch on iCloud.
I didn't have to
go anywhere else.
I did everything from
the Capabilities tab.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
So, as I've shown you,
the Capabilities tab makes it
really easy to take advantage
of these platform
features, all you have
to do is hit a single switch.
Now, let's look at some of the
changes in the General tab.
The first thing I'd like to
highlight is this team pop-up
in the identity section.
If I ever want to go back and
change the team that I selected
when I enabled the Capability,
I can do that from
this Pop-up button.
All I have to do is choose a
different team and these shows
that same list of
teams that we would see
in the Accounts.prefPane or in
that sheets that came up earlier
when we enabled iCloud.
For now, I'll leave it with
the team I previously selected.
Scrolling down a little,
we can see the new App icon
in launch images UI that
we saw in the slides.
And it's easy to
tell at a glance
that I'm missing
some of my images.
For example, my iPhone
non-retina image has a
warning icon.
When I'm ready to add it I
can just click the file picker
button and Xcode will show me
a familiar file picker sheet
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
that confuse any image
from within my project
or from anywhere else
on my Mac and add it
and that's all I need to do.
In addition, you'll see there
are some rows in these tables
for iOS 7 App icons
and launch images.
So, you can just use the same UI
to add those when
you adopt iOS7.
And finally, as I
mentioned earlier,
we also support asset
catalog migration.
When you're ready to
migrate to asset catalogs
for managing you App
icon and launch images,
so that you don't have
to remember those complicated
suffixes anymore, for example,
all you have to do is click one
button, I'll do that right now.
I'll click the Use
Asset Catalog button
and Xcode will show me a
sheet informing me that it's
about to create a new asset
catalog and then it's going
to copy my existing App icons
and launch images to it.
And when I hit the Migrate
button, Xcode will do just that.
So, now we can see here
in the project navigator
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
that Xcode has created an
asset catalog called "Images."
And the tables that I used
to see in the App icons
and launch images sections
are gone because my app icons
and launch images are
now managed via the Asset
Catalog Editor.
So, when I'm ready to go look
at those or make some edits,
I can either click
on the asset catalog
in the project navigator.
Or I can just click
on the arrow button
and Xcode will navigate
directly to my asset catalog.
And here, we can see a
brand new asset catalog,
it's got the same app icons
and launch images that we used
to see inside of
the project editor.
They've just been copied
into the new asset catalog,
I can view them, I can make
updates just using this drag
and drop image UIs.
And when I build and run
my app, Xcode's going
to bundle those app icons and
launch images up with the rest
of my application and iOS will
make use of them the same way
that it always has,
so I don't have
to do any additional
configuration.
So, that's asset
catalog migration.
Let's take a look
at the slides again.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
So, I've just shown you how
the new project editor makes it
really easy to configure
your application both
to take advantage
of platform features
and to make use of
asset catalogs.
Once you're done creating
your app, configuring it,
you have to write
the code of course.
And then, you're
ready to archive it
and submit it to the App Store.
To show you how to do that,
I'd like to invite my
colleague Clark on stage.
[ Applause ]
>> Good morning everyone.
OK, so now that you've
got your App configured
and you've written the code
and it's ready to be submitted
to the store, what
do you need to do?
The first step in this process
is to create an archive.
Now, what is an archive
and why do I need one?
Well, on the basic level, an
archive in Xcode is a bundle
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
that contains a built
copy of your application
and the associated dSYM file.
The application itself
is typically built
with you development
signing identity.
This is important because it
allows anyone in your team
to create the archive
whether or not they're able
to perform the final submission.
Additionally the dSYM
file contains one
that is essentially a
mapping table to map
from the seemingly
arbitrary addresses you find
in the crash log,
to useful locations
within your source code.
This allows you to quickly
track down the cause
of the crash being reported.
Archives are managed within
the organizer in Xcode.
It's important to keep
around archives of any app
that you distributed elsewhere,
whether that'd be to the store
or to testers or even
within your organization.
It's important because
you want to be able
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
to symbolicate those crash
logs should they come in.
And you need the exact build
of app that crashed along
with the associated dSYM.
Now for the-- for submitting the
app or distributing into others,
all I need to do is select
the archive that I want
to distribute in the organizer,
and click the Distribute button.
Now when I go to upload my
app, to submit it to Apple
for review, what Xcode will do
is take my archive, take the App
from my archive, reassign it
with the appropriate signing
identity, back it up as an IPA,
and upload it to iTunes
connect where a series
of automated steps will--
validation steps will be
performed on it before it send
on to a human reviewer.
Let's take a look at
what the looks like.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
So here we have the app
that Nittai just created,
and we're going to assume that
somebody's written the code
in the past few minutes and
it's ready to be submitted.
So I start this process,
by going to a product menu
and choosing archives.
So Xcode is building a
release configuration of my App
and packaging up with
the associated symbols.
And as you can see here, when
it's completed it shows up here
in the organizer along with
previous iterations of the app
that I've built before.
As I said before it's
important to keep those around,
should you receive crash logs
from those particular builds.
In this case, I'm planning to
distribute this particular build
of the app, so I select
that and click distribute.
Now the options presented here
vary based on what's contained
in the archive, which in
this case is an iOS app.
I've given the option to
submit to the iOS app store,
or I can save it out as an
IPA file which is useful
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
for distributing to testers,
or for use with the
enterprise program.
I can also export
the archive itself.
This is important and useful
when somebody else is
doing the final submission.
As I mentioned before, anyone
on your development team
can create the archive even
if they don't have
the credentials needed
to submit it to the store.
In this case I'm
going to choose submit
to the iOS app store
and click next.
Xcode communicating with iTunes
connect, looking for any apps
that are in the state
ready to upload.
As you can see it's
found this particular app
as it-- as noted here.
Now what I need to do is choose
how I'm going to sign this app.
In previous versions of Xcode,
this would be a relatively,
shall we say, verbose menu.
It would list practically all of
your provisioning profiles along
with all those certificates
contained in them,
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
even if they weren't
directly relevant.
However, thanks to the new
accounts infrastructure,
Xcode knows exactly who
you are and knows how
to associate a specific
provisioning profile
with the app.
So it's only displaying the
relevant provisioning profile.
So I would select that,
and here's where I
would click submit
to actually submit it to Apple.
Of course this is just
a demo and I don't want
to waste their time so I'm
going to cancel out of that.
So we've shown you how easy it
is to configure your application
and how simple everything is
when everything goes your way.
However, what happens when
things don't quite go your way?
There are many issues
that can happen
in configuring your entitlements
or provisioning profiles,
especially in versions of Xcode
before the Capabilities tab.
One such example,
it's a misconfiguration
in your entitlements.
Now that may be as simple
as the entitlements file is
just missing or it may be harder
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
to diagnose issues such as a
typo in the name or the value
of the particular entitlement.
Other possible issues include
issues with your signing assets
such as your signing identity,
you may be missing
the private key,
which is unfortunately
a fairly common issue,
but it's is not always obvious
that the private key only lives
on the machine that you used to
create it in the first place.
It's never sent to Apple.
Another possible issue is you
might be missing the appropriate
provisioning profiles
or the profile might not
specify the correct entitlement.
Now to that point, I'm
going to talk a little bit
about how entitlements
were controlled
by provisions profiles.
Both your app by way of
your entitlements file
and the provision profile
contain a list of entitlements.
But the list of entitlements
in the profile is
just the white list.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
It's a list of allowed
entitlements
that your app is allowed
to take advantage of.
So if entitlement is
specified in your app
and the profile, that's fine.
You can use that entitlement,
the OS will let your app launch.
However, if your app specifies
an entitlement that's not
in the profile, your app
won't be able to launch.
And more importantly the
error message you're given
in that case is shall
we say slightly opaque.
It's not always obvious what
the problem is or how to fix it.
Well, in the capability's
tab, remember the steps
that Nittai showed you earlier,
Xcode remembers those steps too.
And it's constantly
validating that the work
for those steps does
not come undone.
In this case you can see
the entitlement is missing
from my entitlements file.
Xcode knows that, it
knows exactly what's wrong
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
and more importantly it
knows exactly how to fix it.
And so it presents this App
we named, Fix Issue button.
Likewise, in the General tab,
we show issues relating
your signing identities,
such as your-- well
your signing assets,
such as your signing identity
or you provisioning profile.
Again this is a problem
that would prevent you
from building you running or
running your app in the past
that it may not have been
obvious what the actual
problem was.
In this case, we know
exactly what's wrong.
I'm missing my private key.
Additionally, I'm presented
with the two options
to fix this problem.
If I still have access
in the machine
on which I generated the
key in the first place,
I can go to that machine,
use the export functionality
that Joshua showed you
earlier in the accounts pane,
and import it here using
the button on the left.
Alternatively, if I no longer
have access to that machine,
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
I provoke my identity
and request a new one using
the button on the right.
Again, Xcode knows exactly what
the problem is and how to fix it
and presents a simple way
for you to enact that fix.
Now I'm going to show a little
about what this looks like.
So here I have an old iCloud app
that I haven't quite
configured correctly.
In this case, again I'm missing
the appropriate entitlement
in my entitlements file.
Now previous versions of
Xcode, I would be able
to build this app just
fine, it will build,
there'd be no warnings,
no errors.
But when I were to run it,
I would get an obscure error
that frankly without being
someone who works at Apple,
I might not have any way to
understand what's going on.
But in this case it knows
what's wrong, how to fix it
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
and gives me this button.
That's all it took.
[ Applause ]
Now what used to mean hours
of searching documentation
for obscure error codes or
trying out help forums online,
has been reduced to a
single button click.
Likewise another common
issue, unfortunately,
all too common is the
missing private key issue
that I'd showed you
before in the slides.
Again Xcode knows exactly
what's wrong, and exactly how
to fix it, in this case
there are two options.
And as I described before,
I can either import
the developer profile
from my original machine
or I can revoke my identity
and request a new one.
Now we think that the trouble
shooting capabilities offered
here in the General
and Capabilities tab,
will be sufficient for
diagnosing and fixing,
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
just about any issue
you're going to find
with your entitlements or
your signing credentials.
But for those of you who
are the type who need
to know a little more
about what's going
on with the signing
credentials in your team,
we offer the team detail sheet.
I'm going to go back
to preferences,
back to the accounts pane,
select the account
I'm interested in
and the team I'm interested
in, and click Few Details.
Now this sheet displays
two important classes
of information.
In the upper table, I see the
signing identities for this team
that are currently installed
in my key chain on this map.
I display-- it displays each
identity along with the platform
and some important status.
Should any of my keys be
expired, revoked, missing,
that status will show up here.
Should I have such a problem,
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
I can quickly request
a new signing identity
by clicking the plus button and
choosing the type of identity
that I wish to request.
Additionally, even though we
have the ability to export all
of your account info and all of
your signing credentials and all
of your provisioning profiles,
that's not always appropriate.
Sometimes you just need
to export a single signing
identity, perhaps you want
to have someone else say a
build engineer build as you
for the final submission.
That's easily done by selecting
the identity you're interested
in and choosing export
from the gear menu.
As before I give it a name--
[pause] password and click Save.
Now Xcode has taken that
identity and saved it
as an encrypted B12 file that I
can give to that build engineer
to have them build as me.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
And I didn't have to give them
any of my log-in credentials,
any of the additional signing
identities or profiles.
I just exported the
individual item
that I needed to care about.
Likewise, should you need to
revoke a signing identity,
you can do that from
here as well.
Again, select the identity you
care about and choose revoke
from the gear menu, all this
without ever touching key
chain access or needing to deal
with the Member Center.
The lower part of the
sheet displays all
of the provision
profiles from this team
that I have locally on this Mac.
As well as important information
about them, such as their name,
when they expire
and most importantly
which entitlements
are allowed by each.
And should I want to make sure
that I have the latest version
of this information
and the latest version
of all the profiles, I can
refresh the Member Center
by clicking this button here.
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
[ Pause ]
So today we've shown you
some of the new features
in Xcode dealing with managing
your signing assets, as well as,
managing our Apple ID accounts.
We've also shown you how
easy it is in Xcode 5
to configure your
application, to take advantage
of platform features without
needing to know the details
about what needs to be
done for each feature.
We've also shown you the
process for submitting your App
to the App store and
actually getting it
out there to your customers.
Most importantly in my opinion,
we've shown you the
changes we've made in Xcode,
thanks to the account
infrastructure
that we can now diagnose,
troubleshoot most
to the common issues that
plague many of you today.
If your got additional
questions,
X-TIMESTAMP-MAP=MPEGTS:181083,LOCAL:00:00:00.000
feel free to e-mail
our Evangelist
and if you're interested in
the gritty details of what goes
on when you code sign your
app, you can go to this link,
if you can type very quickly.
You also might be interested
in going to these session,
held later today after lunch,
it's a guide to what goes
on when you sandbox your
App, and have a nice lunch.
[ Applause ]