PodSearch

Developing Perspective

#194: In Review.

 

00:00:00 ◼   ► Hello and welcome to Developing Perspective. Developing Perspective is a podcast discussing

00:00:04 ◼   ► news of note in iOS development, Apple and the like. I'm your host, David Smith. I'm

00:00:09 ◼   ► an independent iOS developer based in Herne, Virginia. This is show number 194 and today

00:00:14 ◼   ► is Thursday, September 4th. Developing Perspective is never longer than 15 minutes, so let's

00:00:19 ◼   ► get started.

00:00:20 ◼   ► All right, so today I wanted to start off by doing a kind of a quick run through of

00:00:26 ◼   ► the app review guidelines.

00:00:28 ◼   ► And specifically, I'll talk later on about some

00:00:30 ◼   ► of the changes that were recently added to it,

00:00:33 ◼   ► as well as a page Apple put up about common app rejection

00:00:36 ◼   ► reasons.

00:00:37 ◼   ► App review is kind of a core part of making apps

00:00:41 ◼   ► and deploying them to the App Store.

00:00:43 ◼   ► It's fundamentally, I guess, it is

00:00:45 ◼   ► the gate through which every app that is sold on the App Store

00:00:48 ◼   ► will pass.

00:00:49 ◼   ► And so as a developer, it's kind of essential

00:00:52 ◼   ► that we understand its purpose, its structure,

00:00:56 ◼   ► as well as its content, probably.

00:00:59 ◼   ► And, you know, App Review gets, in some ways, gets a rough name sometimes.

00:01:04 ◼   ► It certainly can cause frustration.

00:01:07 ◼   ► It can cause challenges and delays and things that you don't necessarily like.

00:01:12 ◼   ► But at its core, I've grown to appreciate it.

00:01:15 ◼   ► I've grown to, like, it is by no means perfect, but it does a pretty good job of solving an

00:01:23 ◼   ► impossible problem.

00:01:25 ◼   ► And once you start to realize that that problem is impossible, you start to have a better

00:01:29 ◼   ► appreciation of it.

00:01:31 ◼   ► So the goal, I think, in many ways of App Review is to try and at least set some minimum

00:01:36 ◼   ► standards for what content is available on the App Store.

00:01:41 ◼   ► And it's interesting to always keep in mind that the things that, in many ways, we draw

00:01:48 ◼   ► our opinions about App Review or about the App Store from the things that get through,

00:01:54 ◼   ► and not the things that get rejected.

00:01:56 ◼   ► And I think, as I've spent more time thinking about that,

00:02:01 ◼   ► I've started to keep in mind that a lot of times when I say,

00:02:04 ◼   ► oh, I wish App Review was stricter about this.

00:02:06 ◼   ► I can't believe this app got through App Review.

00:02:08 ◼   ► I start to think about, well, if that app got through,

00:02:12 ◼   ► what are the apps that got rejected, right?

00:02:14 ◼   ► It's a really, really hard problem to start drawing lines

00:02:18 ◼   ► and about things like,

00:02:19 ◼   ► and that's starting to get into very subjective things

00:02:21 ◼   ► like quality or UI appearance or those types of subjective things.

00:02:28 ◼   ► There's obviously objective measures that they do very well with, but the subjective

00:02:31 ◼   ► stuff gets tricky.

00:02:33 ◼   ► But I think their goal is to try and have that bar.

00:02:36 ◼   ► And if that bar didn't exist, I think the app store would be a much, much, much more

00:02:41 ◼   ► terrible place.

00:02:42 ◼   ► And so I appreciate that the bar is there, and I think that Apple does a pretty good

00:02:45 ◼   ► job of enforcing it.

00:02:46 ◼   ► It's not perfect, but it does a pretty good job.

00:02:49 ◼   ► And one of the things that I've grown to appreciate about App Review is at least it forces me

00:02:53 ◼   ► in my development process to have a period where I am thinking about other aspects of

00:02:59 ◼   ► my app beyond just its functionality rather than just the actual coding and design of

00:03:05 ◼   ► it.

00:03:06 ◼   ► There's parts of my app that I don't necessarily naturally want to think about.

00:03:10 ◼   ► Things like the privacy policy implications of my application or how it's going to be

00:03:15 ◼   ► viewed in terms of the marketing in the store or those types of things.

00:03:19 ◼   ► are things that it requires you to think about and to do correctly in order for an app to

00:03:24 ◼   ► get into the store. I've had apps rejected many, many, many times, and every time that

00:03:29 ◼   ► happens I've learned something about that process, something that I shouldn't do in

00:03:33 ◼   ► the future. Sometimes app reviews even caught bugs, which are kind of embarrassing that

00:03:39 ◼   ► it took someone external to me to catch it, but at least I'm glad that it's app review

00:03:44 ◼   ► and not my customer.

00:03:46 ◼   ► All right, next, so that's kind of like an overview

00:03:49 ◼   ► of the actual app review process generally.

00:03:51 ◼   ► So you submit an app, it goes into app review,

00:03:54 ◼   ► it goes from waiting in review to in review,

00:03:56 ◼   ► and then they take a look at it.

00:03:58 ◼   ► And Apple recently published a really interesting document,

00:04:00 ◼   ► which is linked in the show notes,

00:04:02 ◼   ► talking about common reasons for app projections.

00:04:05 ◼   ► And I think their purpose, probably,

00:04:06 ◼   ► in putting this out there is to at least draw your attention

00:04:09 ◼   ► to things that are just not going to get through

00:04:12 ◼   ► and to try and understand why they're not going to get through.

00:04:15 ◼   ► And they list out and even break down even some of the reasons, the most common reasons

00:04:20 ◼   ► why this is the case.

00:04:22 ◼   ► And some of them are kind of interesting.

00:04:24 ◼   ► So 14% of app rejections are about not providing an adequate amount of information.

00:04:31 ◼   ► This could be metadata information.

00:04:33 ◼   ► This could be things relating to requiring that you provide the users, the app reviewers

00:04:39 ◼   ► with a test account for your application.

00:04:42 ◼   ► Something like that.

00:04:43 ◼   ► somehow they're unable to complete the review because of the lack of information.

00:04:49 ◼   ► Fourteen percent seems a pretty high number for that, if I'm honest.

00:04:52 ◼   ► And so it's one of those things like that is the easiest thing for us to do.

00:04:55 ◼   ► It's not functional, it's just about providing information.

00:04:59 ◼   ► So make sure we, I guess we just need to make sure we provide all the information that the

00:05:02 ◼   ► app reviewers could need in order to perform their review.

00:05:07 ◼   ► Eight percent of app projections are because an app exhibits bugs.

00:05:12 ◼   ► That's a pretty high number, I suppose.

00:05:14 ◼   ► 8% of apps that they're looking at have bugs in them.

00:05:19 ◼   ► This is most likely things-- or most obviously things

00:05:22 ◼   ► like crashes.

00:05:23 ◼   ► The classic-- at any point in app review and have crashes,

00:05:27 ◼   ► it is immediately rejected.

00:05:28 ◼   ► That's-- as best as I understand, that's the process.

00:05:31 ◼   ► But this could also be other things like weird glitches,

00:05:33 ◼   ► data problems.

00:05:35 ◼   ► I've run into this a little bit where a web service had

00:05:37 ◼   ► an issue that they ran into that then causes

00:05:41 ◼   ► to look like it was a bug.

00:05:43 ◼   ► 6%, the next most likely rejection,

00:05:45 ◼   ► is that an app does not comply with the terms of the program

00:05:48 ◼   ► license agreement, which I guess that could be anything.

00:05:51 ◼   ► There's a lot of things in the app review license agreement.

00:05:55 ◼   ► But this is probably going to be people

00:05:57 ◼   ► who are doing things that you just shouldn't be making apps

00:05:59 ◼   ► for.

00:06:01 ◼   ► And then the last one I'm going to talk about in this section

00:06:05 ◼   ► is guideline 10.6, which is talking about that your app has

00:06:09 ◼   ► to look good.

00:06:11 ◼   ► And so about one in 20 apps that are submitted to the App Store have a visual appearance

00:06:18 ◼   ► that is below the bar that Apple is setting, which, given some of the things that get through,

00:06:23 ◼   ► means that there's a lot of apps that aren't particularly well-designed that are being

00:06:27 ◼   ► submitted.

00:06:28 ◼   ► But anyway, this page is pretty long and interesting to look at.

00:06:32 ◼   ► Like I said, I linked it in the show notes, but I just wanted to highlight a few of those

00:06:35 ◼   ► things because a lot of those rejection reasons are entirely within our control to change.

00:06:40 ◼   ► there are always going to be the rejection for the more

00:06:43 ◼   ► esoteric reason.

00:06:46 ◼   ► You're trying to build this thing that

00:06:48 ◼   ► does something in kind of a new and interesting way,

00:06:50 ◼   ► and that causes app rejection problems.

00:06:52 ◼   ► But not including the appropriate information

00:06:55 ◼   ► and metadata with your application,

00:06:57 ◼   ► having bugs and crashes, having a non-clean interface,

00:07:01 ◼   ► broken links to websites, things like that, placeholder content.

00:07:04 ◼   ► There's a lot of things we can just fix.

00:07:06 ◼   ► And so read this site and just keep

00:07:08 ◼   ► in the back of your mind as you're working on it.

00:07:11 ◼   ► And lastly, I wanted to just talk through some of the changes that they recently added

00:07:16 ◼   ► to the App Review Guidelines.

00:07:18 ◼   ► One of the things I love, somewhat recently, they made the App Review Guidelines a non-private

00:07:23 ◼   ► page in the developer portal, which makes me feel like I can talk about it finally in

00:07:28 ◼   ► actual detail.

00:07:29 ◼   ► Because before it was always kind of this weird semi-NDA thing.

00:07:32 ◼   ► But anyway, they've now put it up in public, so I feel like I can just chat about it.

00:07:37 ◼   ► So as of, I think it was Tuesday this week, September 2,

00:07:42 ◼   ► something like that, they published

00:07:44 ◼   ► a big set of updates, essentially the iOS 8 updates

00:07:48 ◼   ► to the app review guidelines.

00:07:49 ◼   ► And some of them are fairly minor updates.

00:07:51 ◼   ► Some of these are just adding the word, like previews,

00:07:53 ◼   ► when you were before they used to say screenshots.

00:07:56 ◼   ► Now it's screenshots and previews.

00:07:57 ◼   ► Things like that, pretty straightforward.

00:07:59 ◼   ► There's a couple of those.

00:08:00 ◼   ► And just as a note, I went ahead and organized these pretty

00:08:05 ◼   ► nicely in the show notes, which you can either see on any whatever podcast client you're

00:08:10 ◼   ► looking at, or if you go to developandrespect.com, you'll see it there. So I kind of broke out

00:08:15 ◼   ► the changes in a nice easy to read format. So if you'd like to follow along as I'm going

00:08:20 ◼   ► through them, that's a great way to do it. Or if you just want to look at that as a reference

00:08:24 ◼   ► in the future.

00:08:25 ◼   ► All right. So the first major set of changes is about app previews. And so these are the

00:08:30 ◼   ► videos that Apple has now allowed us to add to iTunes Connect that will be displayed in

00:08:36 ◼   ► the App Store along with your application.

00:08:38 ◼   ► And they're making some fairly clear guidelines around what you can put into those videos

00:08:43 ◼   ► and then having a few kind of policies around that.

00:08:46 ◼   ► So the first thing is they can only show video screen captures, voiceover, and then textual

00:08:51 ◼   ► and design overlays.

00:08:52 ◼   ► That's all they can show.

00:08:54 ◼   ► Which actually as a, on a personal note, I love because that's so much easier to do than

00:08:59 ◼   ► And if we had to actually make sandwich videos for our apps in order to be on a level playing

00:09:04 ◼   ► field.

00:09:05 ◼   ► So even if you have this immense graphic design budget, and media budget, marketing budget,

00:09:10 ◼   ► you still can only take screen captures from your app and combine them with voiceovers

00:09:16 ◼   ► and overlays.

00:09:18 ◼   ► So that's all you can do.

00:09:19 ◼   ► You can't show people using the app, there's no hands, there's no gestures, those types

00:09:22 ◼   ► of things.

00:09:23 ◼   ► It is a screen recording with overlays and voice.

00:09:28 ◼   ► Obviously, that's kind of nice, the exact process and how these are going to look.

00:09:33 ◼   ► I'm still struggling with this for myself. I don't know exactly what my app previews are going to look like.

00:09:37 ◼   ► I'm sure I'll do an episode on it down the road.

00:09:40 ◼   ► To start off with, they're probably going to be fairly basic, and then I'm going to see what other people do and kind of get some ideas from that.

00:09:46 ◼   ► Media and video design is not something that I am an expert on, and so I will kind of see where that goes.

00:09:52 ◼   ► They have a few other little policies around app previews.

00:09:55 ◼   ► You can't display personal information.

00:09:57 ◼   ► You can't display or use content or music that

00:10:01 ◼   ► isn't licensed for that reason.

00:10:04 ◼   ► This is especially relevant probably

00:10:06 ◼   ► if you're doing things like just playing

00:10:08 ◼   ► a song from the user's iPod library

00:10:11 ◼   ► or streaming a video off YouTube.

00:10:13 ◼   ► If that includes content that is copy written,

00:10:15 ◼   ► you have to have a license to display it, or if not.

00:10:19 ◼   ► And so you just have to be careful about what

00:10:21 ◼   ► it is you're actually displaying.

00:10:22 ◼   ► And if you're doing something that

00:10:23 ◼   ► involves personal information, you

00:10:25 ◼   ► might need to create fake people, like Apple always

00:10:27 ◼   ► does with John Appleseed.

00:10:30 ◼   ► All right, so that's app previews.

00:10:32 ◼   ► Another interesting note, they added in 14.3,

00:10:34 ◼   ► which is the area about personal attacks.

00:10:37 ◼   ► You now have to-- if your app displays

00:10:39 ◼   ► user-generated content, you must have

00:10:41 ◼   ► a method for filtering objectionable content,

00:10:44 ◼   ► a mechanism for flagging it as offensive,

00:10:46 ◼   ► and an ability to block abusive users from that service, which

00:10:50 ◼   ► makes sense, but is now actually an official part of the guidelines that we have to do.

00:10:57 ◼   ► In Section 17, which is the privacy policy or privacy area, they now say that if you

00:11:02 ◼   ► include account registration or access to a user's existing account, if there's any

00:11:08 ◼   ► kind of account process, you must include a privacy policy or your app will be rejected.

00:11:13 ◼   ► This is a privacy policy that I believe is the one that you specify in iTunes Connect,

00:11:17 ◼   ► So make sure you link and think through a privacy policy

00:11:20 ◼   ► if you do anything with a user account.

00:11:23 ◼   ► All right.

00:11:24 ◼   ► Next, I'm going to dive into extensions.

00:11:27 ◼   ► So extensions are these little bundles

00:11:29 ◼   ► that we can add to the outside of our application.

00:11:32 ◼   ► And there's a couple of interesting rules around them.

00:11:34 ◼   ► I'm not going to read them all out

00:11:35 ◼   ► because they'll take too long.

00:11:36 ◼   ► But basically, your app that is hosting the extension, A,

00:11:43 ◼   ► must have some functionality.

00:11:44 ◼   ► So it can't just be like, it's an app whose purpose is only an extension.

00:11:49 ◼   ► When you launch the app itself, it's got to do something.

00:11:51 ◼   ► This can just be a help screen or some settings or something like that.

00:11:53 ◼   ► But you can't just have a blank app whose entire interface is in an extension.

00:11:58 ◼   ► Extensions themselves cannot contain any marketing, advertising, or in-app purchases.

00:12:03 ◼   ► So if you have anything like that, you must put it inside the host app and not in the

00:12:08 ◼   ► extension view itself.

00:12:12 ◼   ► have a bunch of things around them that you have to deal with. So keyboards have to have

00:12:16 ◼   ► number and decibel keyboards. They must remain functional without a network connection. And

00:12:20 ◼   ► you must put a keyboard extension in the category of utilities and it must have a privacy policy.

00:12:26 ◼   ► Which fair enough because a keyboard is getting access to a lot of interesting, a lot of very,

00:12:31 ◼   ► very personal information. Because obviously if the user is typing with it, what they're

00:12:34 ◼   ► typing is pretty personal. So in general, extensions make, I think that makes sense

00:12:39 ◼   ► for extensions.

00:12:40 ◼   ► I think that you have to have a host app that makes sense.

00:12:43 ◼   ► Some apps, the extension is an actual extension

00:12:45 ◼   ► of its current functionality.

00:12:46 ◼   ► For some things that you can imagine,

00:12:49 ◼   ► the app's primary purpose is to be used as an extension.

00:12:51 ◼   ► But the host app has to at least provide information and help

00:12:55 ◼   ► to the user about how to use it.

00:12:58 ◼   ► HomeKit-- HomeKit is just kind of basically you

00:13:02 ◼   ► have to use it for home automation.

00:13:04 ◼   ► And don't be creepy with the user's data.

00:13:06 ◼   ► In fact, you can't advertise or do data mining on the data you collect as part of HomeKit.

00:13:12 ◼   ► I'm not doing much with HomeKit, so I'll just mention it briefly there and say if you want

00:13:15 ◼   ► to read more, go to section 26.

00:13:17 ◼   ► Then HealthKit.

00:13:18 ◼   ► HealthKit's kind of interesting.

00:13:20 ◼   ► There's a whole bunch of stuff about privacy in here, essentially.

00:13:23 ◼   ► There's a lot of stuff to make sure that if you are at all touching HealthKit, that you

00:13:27 ◼   ► are being very thoughtful and careful about what you're doing with the user's data, about

00:13:32 ◼   ► how you're going to be using that and integrating into your application.

00:13:35 ◼   ► It's actually kind of interesting just for, as a side note, for me and Podometer++, I've

00:13:39 ◼   ► been playing around with whether I should integrate with that.

00:13:43 ◼   ► Right now, I haven't moved too far forward with that in a lot of ways because of these

00:13:47 ◼   ► types of concerns that as soon as I start accessing very, very personal private health

00:13:51 ◼   ► information about my customers, the bar for which I need to be managing that data and

00:13:56 ◼   ► being thoughtful about it goes up dramatically.

00:13:58 ◼   ► And I just don't necessarily have the time and energy to be able to give it what it would

00:14:02 ◼   ► need to require.

00:14:03 ◼   ► But something to keep in mind.

00:14:05 ◼   ► And then lastly, there's a couple of things about TestFlight.

00:14:08 ◼   ► TestFlight can only be used for apps

00:14:09 ◼   ► that you intend to distribute publicly.

00:14:11 ◼   ► The new TestFlight thing can-- the app that

00:14:14 ◼   ► is submitted to TestFlight would have to pass App Review

00:14:16 ◼   ► guidelines in and of itself.

00:14:17 ◼   ► And you have to resubmit it for review any time there

00:14:20 ◼   ► are material changes.

00:14:21 ◼   ► And lastly, you cannot pay your testers who are accessing

00:14:24 ◼   ► your application through TestFlight.

00:14:29 ◼   ► I imagine they cannot pay you, and you cannot pay them.

00:14:31 ◼   ► So it has to be a free exchange.

00:14:32 ◼   ► All right.

00:14:33 ◼   ► That's it for App Review.

00:14:34 ◼   ► Next week's a big exciting announcements,

00:14:36 ◼   ► and so I will expect to have an episode relating to that.

00:14:39 ◼   ► But otherwise, I hope you have a great week.

00:14:41 ◼   ► Happy coding.

00:14:42 ◼   ► Email me, david@developingperspective.com

00:14:44 ◼   ► if you have any questions.