From Zero to App Store in Xcode 5

Session 403 WWDC 2013

New account management features in Xcode 5 make it easier than ever to sign and package your app. Join Xcode engineers as they take a brand new project through to App Store submission. See how the new capabilities editor makes it simple to add iCloud, Passbook, and other features and entitlements entirely within the Xcode environment.

[ Silence ]


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 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 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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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], 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.

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 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.

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.

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 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.

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, 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.

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 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 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.

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.

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.

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 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 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.

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 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 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.

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 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, 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 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.

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 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, 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 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, 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, 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.

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.

[ 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, 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 ]

Apple, Inc. AAPL
1 Infinite Loop Cupertino CA 95014 US