This workshop will be retired on May 31, 2020.
App Clean-up, Submission and Review15:33 with Gabe Nadel
In this workshop we delve into the technical and administrative steps needed to submit your app to the App Store. Learn how iTunes Connect, Member Center and Xcode each play a role in submission, as well as how to prepare you and your team for a successful review and launch.
Okay. Since we've created our app record in 0:00 iTunes Connect let's return to Xcode where we'll prepare our binary for submission. 0:02 This process will have a few major steps. 0:06 We'll need the required assets, capabilities, and frameworks. 0:09 We'll do a little project check and cleanup. 0:15 Complete our code signing. 0:18 Archiving. 0:21 We'll finish with validation and submission. 0:22 Okay. 0:26 Returning to Xcode, 0:27 let's make sure that everything we need in our project is there. 0:28 For starters, we'll confirm that the app icons we need are included. 0:31 Depending on if your app is iPhone only, iPad only, or universal, 0:35 which icons are required can change. 0:39 This app, by the way, is iPad only. 0:41 If we click on the project here, we go to the general tab and 0:44 we can click on app icons to see what we've got. 0:50 We have some of the icons we need but we're missing one. 0:53 Let's drag it in there. 0:56 There you go. 1:05 Also, it's worth mentioning that the 1x here means that 1:08 the icon should be 29 by 29, and this would be 58 by 58. 1:12 The same math will be true for all the other sizes. 1:17 Now beware, if you simply fire up an image editor like Photoshop and double the size 1:20 of a smaller asset, you're committing a cardinal sin of design called Upsampling. 1:24 It will usually result in pixelation, quality loss, and general yuckiness. 1:29 Always, always, 1:34 always begin with the largest icon you need, then shrink it down. 1:35 Also, after you use that large icon to create a medium sized one, 1:39 don't turn around and use the medium one to create a smaller one. 1:43 Go back to the original and use that to create the smaller one. 1:46 If you repeatedly shrinken image, you are also likely to see image loss. 1:50 If you don't wanna manually shrink your icons, you can try a site like 1:54 makeappicon.com where you upload your full 1024 by 1024 icon. 1:57 And it will automatically create and email you all the various sizes you might need. 2:03 However, whichever route you go, 2:07 be sure to check the icons on your actual test devices to make sure they look good. 2:09 You may find that certain sizes will need touching up in order to look their best. 2:14 Next, let's ensure we have any launch images we want. 2:18 Now, as of iOS 8, 2:21 you can use a launch file like a nib right than a static launch image. 2:22 However, if you prefer, you can create an asset catalog like you would for 2:27 your app icons. 2:30 For more information on that, head to the launch images link in the teacher's notes. 2:31 In Xcode, they're found right here below the app icons. 2:36 Next let's see if we have all the frame works we need. 2:41 Okay. 2:46 Let's add court's core Okay. 2:47 There it is. 2:54 Lastly, let's head over to the Capabilities tab and 2:55 see if our app requires anything like Game Center, Passbook, Apple Pay, 2:59 In-App purchase, Maps, or if it's in an apps group. 3:04 This doesn't, but as you can see here, you can simply toggle them on and off. 3:08 And you may be greeted with prompts or specific options for those capabilities. 3:13 All right. 3:17 Now, let's see if our project needs any cleanup. 3:18 There are plenty of possible things to address here, but 3:21 here are a few of the most common. 3:24 Dead code. 3:27 This could be methods, classes, or 3:28 variables that you're no longer using in the app. 3:29 Orphaned UI elements. 3:34 Like a UI image view which you put on a story board, but 3:36 never hooked up to an outlet or populated. 3:38 These types of things may be invisible under most circumstances, but can do 3:41 insidious things later on, like steal your touches if they're left hanging around. 3:45 Unused assets, like audio or image files the app doesn't actually need. 3:49 There's no sense having them hanging around, bloating the size of your app. 3:53 Are there lingering hard-coded items, like links or testing credentials, 3:58 which should be dynamic or user driven in the actual binary? 4:03 Log in, either NS log or something perhaps more verbose. 4:07 You'll want to comment that out, or perhaps wrap it with a if def. 4:11 The logging probably won't break anything, but it could slow performance. 4:14 Did you add any analytics that you didn't want shipped with your product? 4:18 If so, now's the time to remove it. 4:22 Okay. Once you've added the required items we 4:24 just spoke about and removed the loose ends, it's definitely time for 4:26 some retesting. 4:30 Just because you thought certain code was dead, doesn't make it so. 4:31 Let's be sure we haven't caused any unexpected problems. 4:34 I'd also highly recommend testing your app on every relevant device and OS. 4:37 Also, when I say device, I mean device, not simulator. 4:42 You would be shocked at how often some problem will arise on an Iphone 5 but not 4:46 on an Iphone 6, oOr even on the Iphone 5 sim, or only on a certain version of iOS. 4:50 If you don't have all the devices at your disposal, 4:55 try borrowing some from a friend, or pick some cheap used ones up. 4:58 And believe me, I know the feeling of being this close to the end and 5:01 how hard it is to stop and re-test. 5:05 But it is time well-spent. 5:06 With that in mind, make sure you block out time and 5:09 personnel to help put your entire app and all its functionality through the ringer. 5:11 That means, testing your app with and without Facebook or Twitter log. 5:16 And if it applies, trying to buy and restore your In App purchases, and 5:19 any other relevant use cases. 5:23 Again, carve out Real Time for this task. 5:25 It will only prove to strengthen your launch and make you a more trusted and 5:27 reliable developer. 5:31 Okay. Now, let's code sign our app. 5:33 First, we will wanna make sure that the bundle identifier matches what we had. 5:37 For this, it's grayed out, so we're going to Info and change it right here. 5:42 As it stands, it's using the product name to create the bundle ID, and 5:48 we don't want it to do that. 5:51 So we're gonna replace this right here with fake app1, and 5:53 that should change it on the general tab, as well. 5:57 Okay, now let's code sign our app. 6:02 For this, we'll click on the project, then the build settings. 6:05 You can search for code signing, and it'll come up right here. 6:09 I always like to remove all the settings that are saved in there and 6:17 change them to Don't Code Sign. 6:20 You don't want there is left lingering around. 6:24 And then, you're going to change under release 6:27 to iOS distribution and leave your provisioning profile on automatic. 6:32 The reason I like to clean all these out first is that, eventually, 6:38 you may have lots of options in this drop down, and it's easy to get them mixed up, 6:41 then we do a clean. 6:46 And then we archive. 6:50 If archive is ever grayed out, the reason that's probably happening 6:53 is that this iOS device may be set to one of your SIMs or 6:58 to a test device plugged into your computer. 7:01 Just remove that test device, unplug it, and then set to iOS Device. 7:03 Then you can go ahead and archive. 7:08 We've got an old archive in here. 7:13 We're gonna delete that. 7:16 Make sure we use the correct new one. 7:18 Now, at times, Xcode may stop you here and ask you to reconcile a missing profile or 7:23 something similar. 7:28 If that happens, follow the prompts. 7:29 However, you should know that this is one of those cases where repeated road blocks 7:31 probably means you need to head to member center and 7:35 see what's going on behind the scenes. 7:38 Perhaps,, you'll need to visit the docks as well. 7:41 There are lots of potential hiccups, and 7:44 we can't really address them all at the moment. 7:46 Just know that if you step through the process methodically, 7:48 you'll figure it out before long. 7:50 One such place you might find yourself digging is in your schemes, 7:52 which you can find here under Manage Schemes. 7:57 You'll see you have different schemes for archiving, analyzing profiling, and 8:04 testing. 8:09 And there may be changes you need to make here. 8:10 Back to the organizer. 8:14 And now, it's time to validate our binary. 8:18 Now bear in mind, here, we're only validating for technical specs, and 8:26 passing validation certainly won't assure us of app approval. 8:29 Great, we passed validation. 8:40 Now, let's submit. 8:43 Since we already validated, we shouldn't see any surprises here. 8:46 Okay, good. 9:00 Now bear in mind, we've uploaded our binary, but 9:02 we haven't actually submitted it for review. 9:04 For that, we'll head back to iTunes connect. 9:07 We visit our apps page, refresh, and we scroll down to where the builds are. 9:11 Hey wait, what's going on? 9:22 There's no build. 9:23 Well, you have to click this little plus, and 9:26 there you see the build that we just uploaded. 9:29 Select that. 9:32 And now, it's here. 9:35 Also, if you visit the pre-release tab above, you'll see that build there, 9:37 as well. 9:42 Okay. 9:42 Now, assuming you've done all the testing you want to, and 9:43 you've entered all the metadata, screenshots, pricing info, 9:48 and the like, you can save, and then submit for review. 9:53 If you get any warnings, address them. 9:57 If not, remove your hand from the mouse slowly, 9:59 place it over your opposite shoulder, and give yourself a firm pat on the back. 10:01 You just submitted your first app to the App Store. 10:06 Okay. 10:12 Before we go, let's cover a few quick things about the waiting period and 10:13 review process. 10:16 I mentioned at the start of the workshop, but implore you again, to read through 10:18 the review guidelines as well as the reasons for common app rejections. 10:21 They're both linked below. 10:25 You want to be sure that from both the technical and content perspective, 10:26 your app gets approved, and ideally, the first time around. 10:29 There's no official guidance, but anecdotally, 10:33 it seems that once an app has been rejected for a content reason, 10:36 it will be subject to higher scrutiny on subsequent submissions. 10:39 That might mean that, if you think your app might be skirting some line, 10:43 don't test those limits on your first app submission. 10:46 Err on the side of caution. 10:49 In future updates, the reviews probably won't be as thorough, so 10:51 that might be a better time to take risks. 10:54 In addition, 10:56 if your update gets rejected, you'll still have your existing app live and for sale. 10:57 I suppose this would be a perfect time to scan through those documents I just 11:02 mentioned. 11:06 Let's go there now. 11:06 Here in the Introduction to Guidelines, we see some big picture red flags. 11:08 If you criticize religion or publish explicit sexual content, 11:13 if the app would risk kids being exposed to improper content, 11:17 if your app looks amateurish, if your app doesn't do something useful, unique, or 11:21 provide lasting content, if you cross the quote on quote line between appropriate or 11:26 not, if you try to cheat the review system, now, down below, 11:31 you'll find some very lengthy guidelines for many of the APIs you'll be using. 11:35 Definitely, review any that apply to you. 11:40 In the common app rejections document, you'll find some technical reasons like 11:43 crashes and bugs, and other more general issues like misleading users or 11:46 repeated submission of similar apps. 11:50 These are living documents, by the way. 11:53 Be sure to check them regularly. 11:54 Okay. 11:57 Assuming your app isn't breaking any of these rules, and that it's been submitted 11:57 successfully, it should, over the course of the next four to seven business days, 12:01 move through the following states Waiting For Review, In Review, 12:05 and Processing for App Store. 12:09 If you select it to Automatically Release Your App, 12:10 it will then move to Available For Sale. 12:13 If not, it will end at Waiting for 12:15 Developer Release until you manually release it. 12:17 If you're rejected, your app will be in a rejected state 12:20 along with some response as to why the rejection occurred. 12:23 If that happens, don't panic and, certainly, don't fool yourself into 12:26 thinking that you can simply re-submit the exact same binary and get a better result. 12:30 Take the guidance seriously. 12:34 Do some research. 12:36 Make the needed changes, do a re-test, and then re-submit. 12:37 If you truly think your app should be accepted as is, 12:40 given the actual Apple guidelines, you can appeal the decision, though they 12:43 tend to confirm their decisions far more often than reverse them. 12:47 Lastly, your app is likely to stay in the Waiting For Review stage for three to five 12:51 business days, and then proceed fairly quickly through the other stages. 12:56 If need be, you can change your metadata during that first period. 13:00 Just be sure not to leave it half finished as it could start being reviewed at 13:03 any time. 13:08 Three to five business days is just an average based on past experience. 13:09 Also, once your app is ready for sale, it may not be searchable for 12 to 36 hours. 13:13 Don't panic. Don't email Apple. 13:19 You may find that you can find it by direct link fairly quickly, but 13:21 category and keyword search may take a bit longer. 13:24 If your app is still not discoverable after 36 hours, 13:27 then you should contact Apple. 13:30 Now the times I've mentioned above are just estimates, and 13:33 they don't include scheduled downtime. 13:35 For example, iTunes Connect usually goes down for 13:38 about a week around the Christmas holiday. 13:40 You should keep that in mind when planning your launch. 13:42 And, of course, 13:45 before long that version 1.0 you launched will probably need to be updated. 13:46 Luckily, updating is a much easier process. 13:50 You've already cut your teeth with code signing and metadata, so 13:52 you simply create a new version of the app here on iTunes Connect complete 13:55 with a new version number and then rebuild your app with that same version number. 13:59 You'll see that all your metadata carries over from the previous version. 14:03 But now, you need to include some what's new in this version text. 14:07 Be sure to include something meaningful and positive here. 14:11 As in, don't say update fixes numerous crashes when you could instead say, 14:14 improves performance and usability or even something more concrete. 14:18 Users will see this information prominently on the app store. 14:22 So, put your best foot forward. 14:26 Also, this is now an opportunity to update your keywords, screenshots, etc. 14:27 So it's worth reviewing them and deciding if you want to do so. 14:32 Reviews often happen a bit faster than the initial approvals, but 14:35 it's still wise to build in five to seven waiting days to your schedule. 14:38 Oh, good. You're still here. 14:43 I know that was a lot of information, and unlike learning to code, it isn't the type 14:44 of information you can infer from logic and other areas of expertise. 14:48 That said, once you've completed the process a few times, 14:52 you'll probably internalize most of it. 14:54 You should also take some comfort in knowing that app submission is infinitely 14:56 simpler, more transparent, and less error prone than it was just a few years ago. 14:59 So, don't let any old horror stories scare you off. 15:03 Most importantly, I hope our tour through the process has opened your eyes to some 15:07 of the business, marketing, technical, and 15:10 editorial decisions which should probably be happening along the way. 15:12 You can update your app as often as you like, and of course, 15:16 no Version 1.0 is perfect. 15:18 But even a minimum viable product should still make the best possible first 15:20 impression to both Apple reviewers and your users. 15:23 Thanks for joining me, and sincerely, 15:27 I can't wait to see your apps on the app store. 15:29 See you next time. 15:31
You need to sign up for Treehouse in order to download course files.Sign up