PAUL TURNER: Thank you.
Thank you, everyone.
Thanks for joining us here.
Thank you for joining us for session 304.
Welcome. My name is Paul Turner and I'm one of the engineering managers for iTunes, but I also some of the teams that I lead, one of the teams is the best teams at Apple and that's the team that manages the logistics and release control for all of Apple's own apps.
And we use iTunes Connect, just like you guys.
So this is a new session we're trying out this year, this is iTunes Connect Development and Distribution.
We already have the wildly popular what's new on iTunes Connect.
We just devoted an incredible session to app analytics and maybe some of the fundamental features of iTunes Connect to make sure that you are empowered to make best use out of them.
That's what this is.
From the conversations that I had in the labs, I think we picked the right topics.
Let's jump into them.
We will talk about the help and resources that are available for you guys.
I want to talk about the vast resources that are available very quickly but then we will jump into a demo of TestFlight.
Then we will briefly go over some of the materials that you need to launch your app on the App Store which will lead us into a deep dive of transporter and XML and how you manage them.
Sounds good, all right!
It's an interactive presentation.
Stay with me here.
Let's jump in.
This screen should be available to everyone, this is iTunes Connect, and here's all the beautiful modules on this.
This is my favorite module.
My favorite module.
This is My Apps.
This is where you spend a lot of your time, the bread and butter of iTunes Connect.
This is where you manage your apps and manage your TestFlight campaigns, manage versions and manage your pricing and availability.
My Apps, if this was a physical button, I feel like mine would have the paint worn off, because I'm always in there.
This is our baby.
Our baby's name is App Analytics.
It launched this year.
It's really empowering you guys.
It's giving you data, I think that only we can provide because of the integration, and it's really giving you a picture of how your app exists in your customer's hands and we do that all the while by maintaining your customer's privacy.
So we love App Analytics.
I hope you caught the session earlier.
It's amazing and as you can see, we took the beta badge off of it.
One more module I would like to talk about, this is my protip of the day and it's not that big of a tip.
I already had a couple of questions about it in the labs.
And it's the agreements, tax, and banking section and so this section my protip is make sure you are caring and feeding for your iTunes Connect by going into the agreements, tax, and banking section and accepting your agreements.
I think one went live on Monday, the unified agreement.
We had a couple of questions in the lab.
My protip is make sure you keep your account up to date and go into your Agreements and Tax and Banking.
It's a stellar tip.
Don't tell anyone.
This is Help and Resources, resources and help.
This is all new.
We are revamping it.
We put as much design as the UI designers let us put in there, I don't know if you caught the session earlier, but we are putting it outside the log-in screen.
It's fully searchable and it will be great.
Help and resources.
Like I said, it's outside the log-in and it contains the best piece of information you will ever own and that is the developer guide.
This has everything you need in it!
This tells you how to launch apps and how to get your assets ready and how to interact with iTunes Connect.
Print it out, put it under your pillow, sleep with it, do whatever you want.
The developer's guide is the be-all and end-all document and I hope you are reading it and referencing it.
It has a lot more stuff.
We have multimedia now.
We have some videos in there.
We have some deep dive videos.
A lot of you guys have questions.
We read through the questions and so we are making videos constantly trying to to keep you up to date, we have Agreements, Tax, and Banking, TestFlight, App Previews, App Transfer, there as a video.
A lot of videos.
Check out these resources.
They are meant to help you.
Of course we have the developer guide but we have specialized user guides, one of which we will talk about later in the session, as the transporter user guides.
Deeper topics a lot of specialized materials and then last but definitely not least, the FAQs.
We have this incredible operations team that's constantly going through all the support requests, all the developer posts, anything, and everything, trying to come up with relevant FAQs for you guys.
It's likely that if you have a question, it's answerable in the FAQs.
So that's resources and help.
I'm just going to move on here.
New also this year we have iTunes Connect specific developer forums.
I hope you are using them.
We have an incredible community of developers out there, which is you guys and thousands of others and if you have a question, there's probably a place somebody else probably had the same question.
It's self-help, questions and answers.
It's a forum post, that's moderated and it's a fantastic resource for you guys.
We would love to hear your feedback on it.
We think it's doing really great.
It's questions and answers and support and it's not for proprietary information there.
Don't pass any passwords to your accounts and things in there.
I will put up the URL right here.
Quickly moving on to another support resource that's available, yes, AppleCare, our friends at AppleCare.
We have iTunes Connect technical support, via AppleCare.
If you go into help and resources right now, it's up in the top left corner, it's called contact us, and you can reach it via the developer forums.
Then we can filter it down by, I think 19 different categories.
We can get your issue to the right specialist.
Sometimes you have a problem with your account and you want to ask somebody a question.
Go for it.
Ask us. It's there for you.
I have a little bit of a surprise, although I think it's already out this in the wild, but we have an 800-number now.
You can call us.
If you have questions that you really need to somebody about, the account, you can call us on an 8-hundred number.
It rings to phone in my pocket.
No, I'm kidding.
Oh, it somebody is actually calling there you go.
I will put that number up right now.
You guys can write it down or take a picture of it.
That's the iTunes Connect technical support.
Too bad. 1-800-633-2152.
I had a bet with people that I wouldn't sing.
There you go.
I know you want to see TestFlight and XML.
Here we go.
There's a couple of other resources, developer technical support.
Sometimes you read the documentation, and you have asked the questions in the dev forums and maybe you have interacted with AppleCare but maybe it's more of a deeper engineering question.
Developer technical support is always available to you.
Go and check it out and also I really encourage you to join our bug filing community.
We really appreciate the bugs that you guys file.
We read them and prioritize them and fix them.
It's a great relationship that we have with you and I really appreciate it.
So join the community.
Lastly, I just want to reinforce that there's some great articles on the developer excuse me, the developer section.
This one, we talked about in the new and iTunes Connect, but I will put it up here again.
The app review is giving you the most common rejection reasons for your app not making it through the first pass through app review.
They keep it up to date.
There are a couple of others.
There's a marketing video that's available as well or excuse me, a marketing article, that's available as well.
It shows you how to make your product page look its best.
Check it out.
These are great articles.
There's another one on app previews.
So that's the help and resources section.
I wanted to reinforce those things and make sure that you were empowered.
So, what do you do when you have an app that's about ready to go?
You test it.
And what do you test it with?
You test it with TestFlight.
I would like to bring up my good friend, Alex Miyamura to give you a demo of TestFlight.
ALEX MIYAMURA: Thank you so much, Paul.
I'm Alex Miyamura.
I'm an engineer with the TestFlight team I'm here to show you how easy it is to distribute your app via TestFlight.
Now, we will begin with a screen that is very familiar to, I'm pretty sure everyone in this room right now, and this is Xcode.
I have an app that I created open, Touch Fighter and I'm going to upload it up to iTunes Connect.
Now, in order to do that, I will go up to product, and archive.
And one of the great things about TestFlight is that instead of having to upload one beta build and then also an App Store build, if you find a beta build that works for you and you want to distribute that to the App Store, you don't have to do that again.
I can go ahead and click this big button, submit to App Store.
Usually you would go through the prompt and would you deliver your build to the App Store but in the interest of time, I'm actually going to switch over to iTunes Connect, where I have a build that's already been a build that's already been uploaded to iTunes Connect.
And here we go.
Thank you so much.
ALEX MIYAMURA: And so now you will see the My Apps module that Paul spoke about, and we'll click in there and see TouchFighter is right in there.
We will click in there.
And you will see the prerelease tab.
Now, of course, we are TestFlighting these apps.
So we do care about prerelease and we will go straight into there.
And you will see we have build two of version 1.0 and we actually get a lot of questions from developers as to where that comes from, right?
And I will actually show you right now.
So we will go back to Xcode.
And we are in the info.plist file for my app.
I will zoom in so everyone can see and as you can see, the bundle version short string is 1.0.
That matches 1.0 that we saw in iTunes Connect.
And the bundle version is 2, which matches the build number build number 2.
And test flight has two types of testing.
We have internal testing and external testing.
And first, we'll go over internal testing.
Internal testing is used to distribute your app to a small select group of testers, within your iTunes Connect organization.
These testers must be either an admin role or a technical role and you get 25 of them.
Each build that you distribute is currently available for 30 days, but coming this fall, we're actually going to double that.
It will be available for 60 days.
And so we will go ahead and click into the internal testers tab.
And you will see that I'm here, Alex Miyamura, and I want to invite one of my colleagues Johnny Appleseed to be a tester.
Oh, here's Johnny Appleseed.
He's a technical user and so we can invite him as a tester.
And we will go to TestFlight beta testers and select his Apple ID and hit save.
When we have done that, that actually adds my colleague, Johnny Appleseed as a tester and if we go back to the internal testers tab, you can see that Johnny Appleseed is now a tester for this app.
Now for them to install the app on their iOS device on the TestFlight app, they will check all the testers that they want to invite.
Go to save.
And then go back to builds and you will see that we have a switch for TestFlight beta testing.
We will go ahead and toggle that switch and that will send those invite emails to all the testers that you have selected.
As you can see, the build is active for 30 days now.
And so once you once you switched that switch, you will see that I as a tester have received an email from the iTunes Store, and I'm invited to test TouchFighter and I can go ahead and open that in TestFlight, and tap install.
Now we will see that the app installs.
It's ready to open.
You go back to your home screen and then you will see TouchFighter right there next to the TestFlight app and that orange dot next to TouchFighter indicates it's a TestFlight app, that it's a beta app.
And so once your testers are able to test your app, they will give you feedback and you will be able to iterate on that.
You will want to distribute your app to a wider range of testers and for that, we have external testers.
And so we'll go into the external testers' tab and the first thing that you will see is, wow!
You have 1,000 of these as compared to 25 internal testers.
That's 40 times and coming this fall, again, we will double that.
Instead of 1,000, you will be able to have 2,000 external testers.
So in order to add testers to be external testers for your build, you will click on the plus, and you will add new testers.
You can obviously type in the email.
But this can get really tedious if you have 1,000 names to type in there.
You will be there for a long, long time.
So that's why we have added this option to import a file.
Now, we provide you with the CSV template if you click on the question mark next to import file, but in order to actually import those testers, you will click open import file, and it will actually populate all the tester names and you will be able to add the testers.
The one difference, other than the large amount of testers that you get as external testing, versus internal testing is that for external testing, do you have to submit your app for beta app review.
We will go ahead and do that.
You have to fill in some information.
Obviously, you need to tell your testers what to test.
They need to see what features you really want to have them focus on.
You might be adding something new and you really want them to drill down in it.
Feedback email is very important because the whole point of testing is to be able to get feedback and to be able to improve your app.
So we do require that.
"This is the best app ever."
And we also require some contact information, so that if there is a problem with your app, we will be able to reach out to you, and so that that can be get resolved as soon as possible.
And once you fill that information in, you can click next.
And export compliance.
We have some export labs here at WWDC.
This is a fairly simple app and so we will go ahead and click no.
We will submit.
And now you will see that external testing for build 2 is waiting for review.
Obviously you can remove it from review and once your app passes beta app review, iTunes Connect will send you an email and then you can send invites to all of your external testers.
And now back to Paul.
PAUL TURNER: Alex what was it, the best feature is the one you don't have?
ALEX MIYAMURA: No provisioning profiles and no UUIDs.
PAUL TURNER: I will make T-shirts that say that and we're going to wear them around town and everyone's going to think we are the weirdest people ever.
Before I bring up Mr. Nik Uglov to do a deep dive into XML, I just want to remind everybody of all the materials needed to launch an app on the App Store.
We come to the end and we are about to release and we go, oh, my gosh, I have to get all of those screen shots localized or the privacy URL.
So let's take a look at the store real quick.
One for the app, one for the watch app, hopefully you guys are doing an app preview.
We also have five screen shots per device.
Just refreshing this in your head right now.
Of course, now we take Apple Watch screen shots.
Starting counting how many screen shots.
Five per device and 28 localizations.
We have app descriptions.
We want to draw people into your app and make sure they understand how to use it before they buy it.
If it has a new version, it's what's new text.
And privacy policies and especially if it's a kid's app and EULAs and all of these things that you need to get together.
I think that's 840 screen shots possible.
We did the math there.
You know, fancy!
And we make it really easy on iTunes Connect to get them in.
We have the drag and drop wells that we reintroduced and separated the sections and made it a really powerful tool.
But maybe you have more than one app.
Maybe you are updating your screen shots frequently.
Maybe you have lots of apps and lots of designers making all of these screen shots for you.
Make you have a CMS system.
Maybe you have a corporate CMS system, wouldn't it be nice to hook up iTunes Connect to your system and manage this in an automated fashion.
And that's what we have to talk about right now, Transporter and command line automation.
Let's bring up my good friend, Mr. Nik Uglov.
NIK UGLOV: Hi, everybody my name is Nik Uglov, I'm an engineering manager with iTunes Store for content import.
And as Paul just showed you and kind of gave you a hint that there's quite a lot of data for you to enter into iTunes Connect in order for your app to appeal to the widest possible audience.
The store's localized in 28 languages.
So that's how many languages you can localize the metadata about your app for.
And it certainly makes sense to reach out to your potential customers in the language that they can understand.
There's up to five screen shots to set up for each of the devices that your app runs on, and those are localizable.
There rates and pricing to set up.
Some of you have a few of those.
Some have hundreds, and some have had thousands.
We have seen that.
And those are localizable.
And those have screen shots in their own right.
Game Center achievements and leaderboards also have images and localization.
Are you counting?
That's quite a lot of work there.
And for those of you who have multiple apps on the store.
First of all, congratulations and thank you.
But also that means that there's that much more work to do, right?
And really at that scale, no matter how good a UI we will put together in iTunes Connect, it's still going to get tedious and error-prone to copy and paste that data.
No matter what we do, it will not scale.
So let's take a look at doing it some other way.
I will produce a command line tool called Transporter that manages inactions between your environment and iTunes Connect using an app metadata XML feed.
The feed covers the areas I just named, the version level localization, the rates and pricing, and in-app purchases and Game Center achievements and leaderboards.
It's not new functionality we are introducing.
We want to make sure that you are aware of it and using it and for those of you who are new to the program new developers, by the way, welcome we want to make sure that you know that you have it in your hands and ready to take advantage of it.
This is a fully supported robust functionality used by developers like you every day.
It's great for automation.
You are able to manage your data in bulk.
And more intriguingly integrate iTunes Connect with your back-end systems whatever those may be.
What I mean by that is suppose we have already an asset management system where the screen shots are collected, or maybe your contracting out with some company that allows to you localize that metadata because you don't have the speakers of all of those languages in house.
So you take it back and you need to park it somewhere.
You are holding it somewhere and you have some sort of process that works for your company.
At that point, if you have a system like this or you are thinking of setting it up, it becomes just a matter of an XML export into a format that we are about to see, hook it up with Transporter and put together a little harness to capture any validation messages we might send back and you are on the way to automate.
So a few basic rules.
The app itself, and the version that you are trying to target must already exist in iTunes Connect.
You set those up first and you are ready to go.
All of these state transitions are done in iTunes Connect, like submitting your app for review or submitting in-app purchases for review.
The app binaries are uploaded the same way they are through today, through Xcode or application loader.
And the feed itself is available for iOS apps and Mac apps equally.
So how does this work?
First of all, it's a two-way communication.
You use Transporter, the command line tool, and the first thing I suggest you do is do a metadata lookup.
What this does is it retrieves onto your local environment, the current state of the app metadata as we have it in iTunes Connect.
So you download it in a form of a package which is just a fancy word for a directory named after your app SKU with a .itmsp extension.
You crack one of those open and you find a metadata XML file in there.
This is the expression of all the metadata we have for your app so far and this is the file that you would use to make changes to iTunes Connect.
You edit that file and you add some screen shots to it, any other assets that you need to add.
You validate it, to make sure that it passes all the rules and if its, go ahead and upload.
So this forms a life cycle of your interactions with iTunes Connect using Transporter.
Download the package, edit XML and add assets to it, validate, and upload and repeat over time as necessary to achieve the edits you are trying to get.
Let's take a look at the commands.
This is for the metadata lookup.
This is to get the information from us.
The command is iTMSTransporter and the first method or mode you want to explore is the look up metadata.
Use your iTunes Connect user name and you identify the app that you are interested in by the vendor ID.
The vendor ID is your app's SKU.
Not the bundle ID, not the Apple ID, that's the app SKU.
Give where you would like this to be deposited in.
You will get the metadata XML data inside and the reason I recommend that you start this way is that it's a lot easier to start by example.
You are going to get a large file captures all the details and it's valid by definition because it's actually emitted from the store.
So you will see all the areas where you can make edits to it and it's a lot easier to put it together than to start from scratch from a spec. So let's say you took that advice and you added keywords and added some screen shots and a localization.
Go ahead and validate it.
Same command, Transporter, different mode, verify.
You use your iTunes Connect user name, and supply a path to the package that you have been working on.
That's the one that has the metadata XML and all the assets that you have added.
So what is going to happen here is we are going to use exactly the same rules that we apply on iTunes Connect the web GUI, to validate what you have September.
We will check all the I.Ds.
We will check all the required fields and the lengths of the field and the dimensions of the screen shots that you are sending to make sure that they match the devices that they are for.
If there are any errors, we will report it back to you right on the command line.
And if you don't have any errors, then go ahead and upload it.
This is the same command, transporter, iTMSTransporter with a different mode, upload.
That's the only difference.
Your iTunes Connect user name and the path to the package that you have been putting together all along.
So what's going to happen here is we are going to actually run through the validation mode first, in case you skipped it, we will apply it anyways.
Same rules as would apply in iTunes Connect.
If there are any errors, they will be reported back to you and the upload will be blocked.
If there are no errors then the app upload will succeed and we will get it on our servers and at that point it's asynchronous.
So it's in the queue to be processed, alongside the binaries and any other content we process.
And it might take a minute or two for it to be, as we say ingested and appear on iTunes Connect.
You can actually use one of the commands in Transporter to look up the current state of that process.
In order to take advantage of all of this, there are two pieces of documentation that you need.
They are available on the resources and the help screen on iTunes Connect.
The app metadata specification for all the tags and a Transporter user guide for all the commands and all the options which is a lot more than I will go through here.
We are ready to see that XML.
So this is what it would look like.
This is how metadata XML would look like.
There are required elements forming a sort of envelope around everything else.
So you have the package, for your team ID.
You have software because this is what we are discussing here, right?
Your app is identified by the vendor ID which is the app SKU and then the software metadata because this is what you are about to send.
Everything else is optional elements.
They are optional in the sense that only those that have some changes, only those that you actually need to send in.
So, for example, if you are making some changes to the purchases, just send that section.
This is not to say that you can't send the whole thing back in.
It is going to work fine.
Let's say you followed that advice I had about doing a metadata lookup first.
You got the package and made a few minor edits and decided to send the whole thing back in, perfectly fine.
That will work.
We are capable of seeing where the changes are and applying those and ignoring the sections that didn't change.
It's all up to you how to structure it.
So diving in, into this into the package here, just to call your attention to the team ID, is a value that you received originally when you created your team account with Apple and your app is identified by the vendor ID which is the app's SKU.
And the next step depends on what it is that you are trying to do.
Which area are you editing?
Let's say you are editing some localization something about localization, adding a description or something like that.
Just like in iTunes Connect, you get to select one of up to two versions that you are trying to target.
The one that's currently on the store and maybe the one you are building up for the next release.
So in the XML, would you do that by using the iTunes Connect version stream, version 1.5 or the 2.0 in this example.
And for the sake of argument, let's say you are interested in editing the 2.0 version.
So the next slide is we are diving down into that, and what's the next step?
Select a language you are talking about.
So let's say in the in iTunes Connect, would you do that by using a pull down for English.
In the XML, it would be locale, name and the BCP47 tag identifying the language.
BCP47 is a format is a standard for identifying any language spoken on this planet, and I think a few off the planet.
But they are only ones that you can only use in the feed are the ones that the store is localized in.
So those are 28 and they are listed in the spec. Please take a look.
Let's say ENUS for US English and diving further down.
Now we are finally down to the actual data elements.
We have the title which is the app name and the description.
We have the version of what's new if it happens to be an update.
And really, any element that you encounter in iTunes Connect at this point has a representative tag in the XML.
I won't go through all of them, other than to stay for a few seconds on screen shots because those are just a bit more involved.
For each screen shot, you would need to tell us what device they are for.
So that's the dismay target and all of the iPhones and Apple Watch and iPad and if it happens to be a Mac app is the option there and which position you want that screen shot to appear on the store and they go from one to five, remember, up to five per device.
Specify the size of the file in bytes.
The file name, which is of the file that you would park next to metadata XML in the package, give us the MD5 checksum, and onwards.
Let's say what you wanted to do is set up some pricing parameters instead.
Like in iTunes Connect, and I think you might be picking up a theme here, that it's it's they are equivalent.
Most of these are applicable worldwide.
So the XML product equivalent section is in the product for territory WW.
And at that level, you get to state what your available date for the app is, the sales start date and things like the educational discount and also still on the same level, also territory WW for worldwide, what is the pricing tier for your app?
So here's wholesale price Tier 3, corresponding to the same option in the GUI and the effective dates of it, the start date and the end date.
Notice for a second that those appear inside an interval tag, which is itself an interval section and what that builds up to is the ability to do this advanced scheduling of your price changes.
So in iTunes Connect, for example, here's a map that goes on sale today for five days, right?
Price Tier 3 goes down to price Tier 1 and then comes back to 3, exactly the same way in the feed.
You have the initial interval, and the wholesale Price Tier 3 and then it goes down to Tier 1 for five days and back up to 3.
Notice no end date there, which means it's effective forever, until you decide to change that with a next update.
What is available on the per territory basis, per country basis?
It's just the setting of whether your app is available there or not.
You can do that by exclusion or inclusion.
In exclusion, you state that it's available for sale everywhere, and then enumerate through territories specifically like Japan over there, where you don't want the app to be available for sale.
So that's one option.
The other one is inclusion, exactly the opposite.
For territory WW, your app is not available for sale, meaning it's just not clear for sale anywhere.
And spend specifically enumerate the areas where you want to make it available.
This is the area where you can probably get the most effect, the most bang for the buck for using the feed.
That's due to the sheer number of in-app purchases that some of your apps have.
This is where we have seen the most activity and this is a deep enough section of the feed that I won't go through the tags here.
Please download the documentation, take a look there.
It's fully supported, what you can do in the web interface, you can do in the feed.
The same goes for leaderboards and achievements.
Everything you can do in a web GUI, you can do in a feed.
Please download the documentation, study it, and take advantage.
So in summary, what you have able to you is Transporter, the command line tool for managing the interactions in your environment and iTunes Connect and app metadata XML feed for all the areas that we covered.
And those are great for automation.
They allow you to manage your data in iTunes Connect in bulk.
You can get out of the copy/paste business.
And you can integrate iTunes Connect with your back-end systems.
Whatever those may be.
So get your hands on two pieces of information, app metadata XML feed for all the tags and all the formats there and Transporter user guide for all the commands and all the options to them.
And automate away!
And with that, back to Paul and thank you.
PAUL TURNER: Okay.
That was great.
Oh, my gosh!
I'm so lucky to work with engineers like this.
All right, we are a little pressed for time and I will wrap it up really quickly.
I want to let you know that 1-800 song already chartered on Apple Music.
You will see me at the Grammys next year.
We took a look at help resources.
I hope you use them.
Give us feedback on them.
I want to know what you need.
We took a look at TestFlight, went over the resources and then Nik's Transporter and XML feeds.
For more information, obviously the developer portal.
And you can contact our fearless evangelist, Marc Malone.
Some related sessions already happened but catch them on the replay.
The What's New in iTunes Connect this morning was fantastic!
The App Analytics lab was incredible.
I'm so happy that you guys are here.
So come visit us and have a great conference!