#121: Dealing with Rejection.
00:00:00
◼
►
Hello and welcome to Developing Perspective.
00:00:02
◼
►
Developing Perspective is a podcast discussing news of note in iOS development, Apple, and
00:00:07
◼
►
I'm your host, David Smith.
00:00:08
◼
►
I'm an independent iOS and Mac developer based in Herndon, Virginia.
00:00:10
◼
►
This is show number 121, and today is Tuesday, April 23rd.
00:00:16
◼
►
Developing Perspective is never longer than 15 minutes, so let's get started.
00:00:20
◼
►
So today, I'm going to be talking about app store rejection.
00:00:24
◼
►
And this is sort of the topic of my,
00:00:27
◼
►
kind of in the front of my mind,
00:00:28
◼
►
because the first version, or first submission
00:00:31
◼
►
of Feeder Angular to the store was rejected.
00:00:34
◼
►
And that's totally unexpected,
00:00:35
◼
►
and I'll get into that later.
00:00:36
◼
►
But certainly I always just sort of,
00:00:38
◼
►
it's an interesting part of the app process,
00:00:41
◼
►
being in the app store, doing app review.
00:00:43
◼
►
And so I figured that would be an interesting thing
00:00:45
◼
►
to kind of walk through what that's like,
00:00:46
◼
►
and how I look at it, the experience I've had, and so on.
00:00:50
◼
►
So broadly, I'm gonna take a step back
00:00:51
◼
►
and make sure everyone kind of knows what I'm talking about.
00:00:53
◼
►
So if you were going to make an app and put it in either the iOS or Mac App Store, this
00:00:57
◼
►
applies to a couple of other different stores, notably not the Google Play Store, but most
00:01:01
◼
►
stores seem to have some kind of review process.
00:01:03
◼
►
But I'm going to talk about the iTunes and App Store process.
00:01:06
◼
►
And so basically you submit your application and it sits around for a little while.
00:01:09
◼
►
And in Apple's case, it says, "Waiting for review is the app status that it will have."
00:01:14
◼
►
And it sits there for a little while.
00:01:17
◼
►
And then at some point, it changes from "Waiting for review" to "In review."
00:01:21
◼
►
And exactly what that means is entirely ambiguous,
00:01:23
◼
►
other than the fact that you imagine that somehow more
00:01:26
◼
►
things are happening.
00:01:28
◼
►
But in review can take any amount of time.
00:01:30
◼
►
I've had it take minutes.
00:01:31
◼
►
I've had it take hours.
00:01:32
◼
►
I've had it take days.
00:01:34
◼
►
And so while it's in that process, the people at Apple
00:01:38
◼
►
are going through the application
00:01:40
◼
►
and doing some thing to it.
00:01:42
◼
►
That process is somewhat opaque in terms of you
00:01:44
◼
►
don't know exactly what's going on.
00:01:46
◼
►
But generally speaking, you expect
00:01:48
◼
►
that they're looking for things like,
00:01:51
◼
►
Does it crash?
00:01:52
◼
►
Does it do something that's not allowed?
00:01:54
◼
►
Is it implemented in a way that is consistent with the human interface guidelines?
00:01:59
◼
►
Those types of questions.
00:02:00
◼
►
And they're kind of reviewing your application to make sure it's something that they want
00:02:02
◼
►
to put on the store.
00:02:04
◼
►
And if they do, you'll get an email or an update saying, "Ready for sale?"
00:02:09
◼
►
or something like that, or "Processing for App Store.
00:02:11
◼
►
Your app is approved."
00:02:13
◼
►
And then that process begins, it goes into the store, or if it's an update, it gets pushed
00:02:17
◼
►
out through the update system.
00:02:18
◼
►
However, if something is not good,
00:02:21
◼
►
then you will, instead of getting an email
00:02:25
◼
►
that's saying, you know, ready for sale
00:02:27
◼
►
or processing for App Store, you'll get something
00:02:28
◼
►
that says application submission feedback,
00:02:31
◼
►
which is their kind of very passive, soft,
00:02:33
◼
►
gentle way of saying your app was rejected.
00:02:36
◼
►
You actually, you know, you don't actually get anything
00:02:38
◼
►
that says rejection until you go into iTunes Connect.
00:02:40
◼
►
You just get the application feedback submission,
00:02:42
◼
►
or submission feedback.
00:02:44
◼
►
And it's not something to be sort of ashamed of
00:02:47
◼
►
or feel too bad about if you get.
00:02:49
◼
►
I've been doing this a while, and I've probably
00:02:52
◼
►
dealt with probably, I guess, 30 or 40 rejections
00:02:55
◼
►
over the course of all the apps I've submitted
00:02:57
◼
►
and all the different places and all the different problems.
00:03:00
◼
►
So it's just part of the process.
00:03:01
◼
►
And you can be rejected for all kinds of things.
00:03:04
◼
►
The most obvious and simple ones are things like,
00:03:07
◼
►
if your app crashes ever during the review process,
00:03:10
◼
►
it's an automatic rejection, for example.
00:03:12
◼
►
It's one of those things that you'll get a crash log
00:03:14
◼
►
and they'll send it to you.
00:03:16
◼
►
Basically, those types of things are just immediate.
00:03:19
◼
►
Then there's a sort of the second category of things where our topics can be rejected
00:03:23
◼
►
because they, for a variety of reasons that, for which they would violate the app review
00:03:30
◼
►
And so these can be things like content things, they include content that's objectionable
00:03:34
◼
►
or they're not ranked, they're not rated accordingly because of their content.
00:03:38
◼
►
It's doing something that they don't that they don't allow or don't want to allow.
00:03:42
◼
►
all kinds of things that you can kind of do
00:03:44
◼
►
or it could be not useful enough
00:03:46
◼
►
is often a complicated one.
00:03:48
◼
►
I know of a lot of friends who have written an app
00:03:50
◼
►
with a very narrow focus purpose
00:03:52
◼
►
and they can be rejected for saying
00:03:54
◼
►
it's not useful enough, which is complicated to define.
00:03:57
◼
►
But generally speaking, they'll go through the review
00:03:59
◼
►
guidelines and say, whenever you get a rejection,
00:04:01
◼
►
you'll get a reason why.
00:04:03
◼
►
That reason may not be something that you agree with,
00:04:05
◼
►
it may not be something that you like,
00:04:07
◼
►
but it'll be a reason that you can kind of start from.
00:04:09
◼
►
And to Apple's credit, what they used to do
00:04:11
◼
►
to do is that would just be all you'd get.
00:04:13
◼
►
And you could kind of, all you could really do
00:04:16
◼
►
was resubmit and make any changes,
00:04:18
◼
►
add something in the review commentary.
00:04:20
◼
►
But basically that was it.
00:04:22
◼
►
Now what they've done now, which is a little bit better,
00:04:24
◼
►
is they've added something called the resolution center.
00:04:26
◼
►
So when an app is rejected, or an in-app purchase
00:04:29
◼
►
is rejected or anything like that,
00:04:30
◼
►
you will get a, rather than just getting a message
00:04:34
◼
►
with, you know, saying generally what it is,
00:04:36
◼
►
you'll get a slightly longer form thing
00:04:38
◼
►
in what's called the resolution center.
00:04:39
◼
►
And this is kind of like, how do you feel,
00:04:41
◼
►
a chat or a forum, not real time, but it's a way to have a back and forth conversation
00:04:46
◼
►
with App Review.
00:04:47
◼
►
And so this, for example, with Feed Wrangler, I was rejected twice, essentially, in the
00:04:52
◼
►
same submission.
00:04:53
◼
►
The first one was what they called a metadata rejection.
00:04:55
◼
►
And a metadata rejection is where the app isn't rejected outright, but there's something
00:04:59
◼
►
about it that they are not really sure about, or this thing in your description or your
00:05:03
◼
►
icons or something that they want changed or they have questions about, and they can
00:05:08
◼
►
ask you questions.
00:05:09
◼
►
And sometimes it's just, in my case,
00:05:10
◼
►
it was just they had a question about how something worked
00:05:13
◼
►
or how I expected something to work,
00:05:14
◼
►
and they wanted to have clarification.
00:05:16
◼
►
So you go in and write a response
00:05:17
◼
►
and send them something, something.
00:05:19
◼
►
And then you kind of have a little back and forth.
00:05:21
◼
►
And it's very helpful to think of this process
00:05:24
◼
►
as all the communications that you have
00:05:27
◼
►
in the resolution center,
00:05:28
◼
►
you want to be as nice as you can in that sense.
00:05:32
◼
►
I've definitely, I've experienced myself
00:05:35
◼
►
sort of when you can get frustrated,
00:05:36
◼
►
it can feel like you're kind of talking
00:05:37
◼
►
to something a bit that's so opaque or intractable,
00:05:41
◼
►
like what do you do when you get really frustrated.
00:05:43
◼
►
But this isn't the kind of thing that you want to get to.
00:05:45
◼
►
You want to keep your cool, handle yourself
00:05:48
◼
►
in a way that is responsible and kind
00:05:51
◼
►
and just appropriate for who you're interacting with.
00:05:53
◼
►
Obviously, it's not like the other--
00:05:55
◼
►
you're talking to a person probably
00:05:57
◼
►
in Cupertino or somewhere.
00:05:58
◼
►
And so you want to be kind.
00:05:59
◼
►
You want to be nice.
00:06:00
◼
►
You want to be reasonable about--
00:06:01
◼
►
if they're asking a question, you want to answer it.
00:06:03
◼
►
And don't be like--
00:06:06
◼
►
even if it's something you think is obvious
00:06:07
◼
►
or something that's clear, it's like be patient
00:06:09
◼
►
and understanding and kind of work through
00:06:11
◼
►
and create screenshots that lets you make attachments
00:06:14
◼
►
to your posts to the resolution center, so great.
00:06:17
◼
►
If they have a question about how to do something,
00:06:19
◼
►
it's like take the time to,
00:06:21
◼
►
take a series of screenshots, map them out.
00:06:24
◼
►
I use Napkin for this, which is an agent distilled
00:06:28
◼
►
Guy English and Chris Ferris's app
00:06:30
◼
►
for doing that kind of image annotation.
00:06:32
◼
►
And it works great for that.
00:06:33
◼
►
You kind of lay it out, and your goal
00:06:36
◼
►
is to get them on your side rather than being sort of,
00:06:41
◼
►
I guess, argumentative or confrontational.
00:06:43
◼
►
Your goal is to be like, hey, I'm sorry you had that problem.
00:06:46
◼
►
I'm sorry you had that question.
00:06:48
◼
►
Let me try and kind of flesh out what I was thinking about that
00:06:51
◼
►
or why that's a problem.
00:06:52
◼
►
This isn't the time to be sending them a Google search
00:06:54
◼
►
result explaining something to them.
00:06:56
◼
►
It's something you want to take the advantage of opportunity.
00:06:58
◼
►
It's a rare thing that you have an opportunity
00:07:00
◼
►
to talk to out-per-view.
00:07:01
◼
►
So you want to take full advantage of that to talk to them.
00:07:05
◼
►
And basically, in my case, they had a question.
00:07:07
◼
►
I responded.
00:07:08
◼
►
And ultimately, the app was rejected.
00:07:10
◼
►
It was rejected for something that I kind of--
00:07:12
◼
►
I wouldn't say I expected, but I kind of knew it might be happening.
00:07:15
◼
►
And it was the in-app purchase type that I had chosen.
00:07:17
◼
►
I had chosen an auto-renewing one, which is something like, in theory,
00:07:20
◼
►
you can use for something like what I was doing with an ongoing subscription
00:07:24
◼
►
cloud service.
00:07:26
◼
►
But in this particular case, they said it wasn't eligible.
00:07:29
◼
►
And I'm not exactly sure what--
00:07:31
◼
►
it's just I don't know if it's just slightly ambiguous
00:07:33
◼
►
I'm like, all right, that's fine.
00:07:34
◼
►
If they don't want to do it that way,
00:07:35
◼
►
I'll do a non-recurring subscription model,
00:07:37
◼
►
change up E&I purchase, change up my purchasing system
00:07:40
◼
►
a little bit, and resubmit it.
00:07:42
◼
►
And that's where I am now.
00:07:43
◼
►
It's back in waiting for review, I think.
00:07:47
◼
►
And that's kind of the process you go through.
00:07:49
◼
►
I'm not going to get too--
00:07:51
◼
►
it's like, it's one of those things that after it's rejected,
00:07:53
◼
►
you can certainly start kind of attacking it still
00:07:56
◼
►
in terms of going to the resolution center
00:07:57
◼
►
and be like, hey, I think it really should be allowed
00:08:00
◼
►
to do this, I think for this, this, and that reason.
00:08:02
◼
►
I need to be able to do this or whatever it is.
00:08:05
◼
►
And there's probably something to that.
00:08:08
◼
►
If that's a crux of really important to your business
00:08:12
◼
►
or absolutely vital, that you really think
00:08:13
◼
►
you should be able to do something and you can't,
00:08:16
◼
►
maybe it's worth pursuing.
00:08:18
◼
►
In general, I think if you've listened to the show
00:08:20
◼
►
for a while, you know that I'm a fairly pragmatic person.
00:08:21
◼
►
And instead, I'm like, okay, well, that didn't work.
00:08:25
◼
►
I'm doing some things with subscriptions
00:08:27
◼
►
I think are intentionally to make this easier. For example, all of my subscriptions are
00:08:31
◼
►
yearly, or my only subscription. My subscription is based on a yearly model. And so that in
00:08:37
◼
►
general, I don't have to worry too much about a lot of this back and forth that can happen
00:08:42
◼
►
if I had set up, you know, it's a monthly or a weekly or something like that type of
00:08:45
◼
►
a subscription, it would be really annoying if I couldn't use a non-recurring style. So
00:08:49
◼
►
instead, I was like, you know what, I'm just going to adjust my pricing, I'm going to simplify
00:08:52
◼
►
things a little bit for myself and for my customers. It's just one flat yearly price.
00:08:57
◼
►
And so in some ways, I don't even have to really worry
00:08:59
◼
►
about dealing with the way in which I reach out to customers
00:09:03
◼
►
for that renewal for 365 days after the app launches.
00:09:08
◼
►
Obviously, the app is set up to work that way already,
00:09:12
◼
►
but I can really polish and refine and work on the messaging
00:09:14
◼
►
and exactly how I reach out to people later.
00:09:16
◼
►
So it's like, OK, that's fine.
00:09:18
◼
►
I'm not going to get into a big fuss about it.
00:09:20
◼
►
There may come a point down the road where I revisit this.
00:09:23
◼
►
And one approach that I have definitely done before myself
00:09:26
◼
►
is when I'm trying to launch something,
00:09:28
◼
►
I just want to get it out there.
00:09:29
◼
►
And so I'll put this-- whatever I'll go for--
00:09:32
◼
►
do exactly what Apple says for version 1.0.
00:09:35
◼
►
And for version 1.1 or whatever it is,
00:09:37
◼
►
like a little bit farther down, I
00:09:39
◼
►
can submit something that's a bit closer to the thing that
00:09:42
◼
►
was rejected before.
00:09:44
◼
►
And to see if that gets rejected,
00:09:46
◼
►
then I can maybe go have a bit more of a back and forth
00:09:48
◼
►
in the resolution center and really talk to them
00:09:50
◼
►
and explore it and see how far I can go with that.
00:09:53
◼
►
But I'm doing it at a time when that's not holding up
00:09:56
◼
►
launch, it's not holding up my customers, it's just kind of something that I'm doing.
00:10:00
◼
►
And I think probably something more generally that you can do is you can go through a process
00:10:04
◼
►
of what I would call a test submission process.
00:10:07
◼
►
This is something where, you know, it's like, I think actually panic did this for status
00:10:10
◼
►
board, which makes a lot of sense, because some of what they do is very close to the
00:10:14
◼
►
edge of an app review guideline about multi, like multi widget, alternative desks, desktop
00:10:21
◼
►
But so what they did is I think they took a proof of concept and it was working and
00:10:25
◼
►
obviously it's like met the general review guidelines and they submitted that early.
00:10:28
◼
►
So that if Apple was going to come back and say, No, you can't do that at all. They could
00:10:33
◼
►
have explored that as early as you can. And it's just something you want to take advantage
00:10:37
◼
►
of. I mean, understanding that it's not like it's for better or worse, the app review process
00:10:41
◼
►
does not have limits on it in terms of number of submissions, number of reviews, those types
00:10:45
◼
►
of things. And obviously, you don't go nuts with that, you know, constantly be submitting
00:10:48
◼
►
like, you know, half baked ideas, but which if it's it's a valuable thing to understand
00:10:53
◼
►
that app review is a very, very high risk,
00:10:57
◼
►
I guess you could call it, activity in making an app,
00:11:00
◼
►
in that it is a very binary thing.
00:11:02
◼
►
If your app is rejected, it is rejected.
00:11:04
◼
►
That's it, and especially on iOS,
00:11:06
◼
►
there's not an alternative, a good alternative for that.
00:11:09
◼
►
You could say, oh, I can put it on like the jailbreak stores
00:11:11
◼
►
or things, but the reality is you want to be
00:11:13
◼
►
on the app store if you're trying to make your living
00:11:15
◼
►
from selling apps, and so it's very, very important
00:11:18
◼
►
that you respect this process and understand it
00:11:21
◼
►
and make sure that you are planning for it.
00:11:23
◼
►
And by that I mean, so like I'm hoping right now
00:11:26
◼
►
to launch Feed Wrangler next Tuesday, in seven days.
00:11:30
◼
►
So Tuesday, April 30th.
00:11:32
◼
►
That's my goal right now.
00:11:33
◼
►
But obviously, the Feed Wrangler app is currently still waiting
00:11:38
◼
►
for review for the second round.
00:11:40
◼
►
And so it's entirely possible that could change.
00:11:45
◼
►
And so you just have to be careful and plan for that
00:11:47
◼
►
and expect that it's very unlikely,
00:11:49
◼
►
Even if you look at the iOS review times recently,
00:11:52
◼
►
I think are about seven or eight days.
00:11:54
◼
►
But you can't really plan on a seven or eight day from when you
00:11:56
◼
►
submit to when you launch, probably.
00:11:58
◼
►
Typically what I do is I take that number and I double it,
00:12:01
◼
►
and that's what I plan for.
00:12:02
◼
►
And that's generally what I'm doing with this one.
00:12:04
◼
►
I kind of was expecting-- I was hoping to launch today,
00:12:07
◼
►
but it didn't quite work out.
00:12:08
◼
►
And so I'm going to be launching hopefully next Tuesday.
00:12:12
◼
►
And so that's kind of the process you go through.
00:12:14
◼
►
And then hopefully it'll just be approved.
00:12:16
◼
►
A couple things, also, just random notes
00:12:18
◼
►
about app rejections and things, things that are never helpful,
00:12:22
◼
►
really, or useful to talk to you when you're dealing with someone
00:12:26
◼
►
in with app review and something gets rejected, saying, but this
00:12:29
◼
►
other app also does this. Not helpful. I don't either say,
00:12:34
◼
►
well, we should have rejected that too. It's not helpful to
00:12:37
◼
►
say, you know, oh, it's like, but here's someone else who does
00:12:40
◼
►
it. It's like, they'll say, well, that's, you know, that
00:12:42
◼
►
like, that probably should have been rejected to then I'm sorry.
00:12:45
◼
►
Like that's all there is being I said, I said, don't be argumentative, don't get upset about
00:12:51
◼
►
Every now and then you actually get a call from Cupertino.
00:12:53
◼
►
So if you get a if you get a call from them, obviously, you're going to want to answer
00:12:58
◼
►
And you're going to want to talk to it.
00:12:59
◼
►
And I think it was at 418, I think is the area code for app review, or for not for app
00:13:04
◼
►
review, but for Apple.
00:13:06
◼
►
And so if you ever get a call from 418, let me just let me just double check that 408,
00:13:12
◼
►
408. If you ever get a call from a 408 number that you don't recognize, that is probably
00:13:17
◼
►
someone from Cupertino calling to talk to you about your app. And so answer the phone,
00:13:22
◼
►
talk to him, don't let it go to voicemail kind of thing. And again, in that conversation,
00:13:25
◼
►
it can be very frustrating because often you'll be talking to somebody and they're able, they're
00:13:30
◼
►
not able to say as much as you would like. You can't be, typically what they're able
00:13:33
◼
►
to say is here's the line in the app review guidelines that you're violating it. And you
00:13:38
◼
►
can start getting like, well, what if I did this? What if I did that? And like, typically
00:13:41
◼
►
they're unable to say, well, I don't give you a clear answer.
00:13:44
◼
►
They'll say, that's, you know, this is the policy. And this is
00:13:48
◼
►
what you are doing that's against that policy. And be
00:13:50
◼
►
like, well, what if I did this? It's like, well, you have to
00:13:52
◼
►
reset the app. And when we take a look at it, and so just be
00:13:55
◼
►
patient, be understanding and realize that they're doing their
00:13:57
◼
►
job, you're doing yours. And the best thing for everybody is for
00:14:00
◼
►
you to be, you know, kind, respectful and just, you know,
00:14:03
◼
►
roll with it. So that's, that's our projection. Hopefully, it's
00:14:07
◼
►
helpful. I said, it's, I've gone through this so many times that
00:14:10
◼
►
I'm not as upset about it or as disappointed as I used to be.
00:14:13
◼
►
It's kind of expected in some ways
00:14:14
◼
►
that app reviewers caught a lot of bugs and problems
00:14:18
◼
►
in my apps, which I appreciate.
00:14:19
◼
►
It's also caused some frustration or problems for me.
00:14:22
◼
►
But it's just part of the process.
00:14:23
◼
►
You just need to understand it, plan for it,
00:14:25
◼
►
and expect that this is something that could happen.
00:14:28
◼
►
That's it for today's show.
00:14:29
◼
►
As always, if you have questions, comments, concerns,
00:14:31
◼
►
or complaints, I'm on Twitter @_davidsmith.
00:14:33
◼
►
I'm on appnet @davidsmith.
00:14:35
◼
►
And actually, I have one of those bulk app.net invite
00:14:39
◼
►
linky things, which you'll have in the show notes.
00:14:41
◼
►
So if you haven't signed up for app.net,
00:14:43
◼
►
but you want an invite, that's a way to get it.
00:14:45
◼
►
And otherwise, I hope you have a good week.
00:14:47
◼
►
Happy coding.
00:14:48
◼
►
And I'm sure we'll all be going a little bit crazy
00:14:50
◼
►
in the next few days waiting for WWDC tickets to go on sale.
00:14:53
◼
►
My current guess is probably tomorrow, Wednesday morning.
00:14:56
◼
►
But we'll see.