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