Late last night, I received a rejection for an update to my app, FretSketch (App Store). FretSketch is an app for displaying guitar chord voicings offline. I wrote it because I am still learning to play the ukulele. I know a lot of chord shapes for the soprano, but the baritone is tuned differently, and the shapes are not the same. I wanted something in my pocket that understood that.
Update: There’s a couple updates to this at the end, including that Apple has accepted my appeal and approved the 1.2 update as-is. That changes nothing about the StoreKit bug, FB21795992, and Apple Creator Studio going so hard trying to trick the user into a “free” subscription.
I was excited about this 1.2 release, as it checked off one of the major features I wanted to ship the first version with: a voicing tone analysis, which would tell you why you might prefer one particular fingering of a chord.
Why? Well, maybe this easier one is missing an important pitch class, or maybe it has an extra one. Consider an easily explained but probably poor example: a C power chord, for instance. It should have C, G, and nothing else. Maybe a common fingering also has an E. That makes it not a C power chord, but it may appear as one anyway in some references. Depending on the context within the song, you may not care about that E.
The point, since you likely don’t care about any of that, is that I’m really excited about this release.
The 1.2 update has been approved twice already, but both times I found bugs that I didn’t want to ship. I really loathed rejecting the second one: without a fix users would need to re-select their instrument when they upgraded.
Apple’s rejection fell under section 3.1.2, on Business — Payments — Subscriptions:
One or more auto-renewable subscriptions are marketed in the purchase flow in a way that may mislead or confuse users about the subscription terms or pricing. Specifically:
- The auto-renewable subscription promotes the free trial, introductory pricing, or introductory period for the subscription more clearly and conspicuously than the billed amount.
Here’s what it looks like:

This is a screen that’s been unchanged since 1.0. Honestly, I actually agree with them. The wrong thing is emphasized here. Free is big. $4.99/year is smaller. This is misleading.
The styling and text here is provided by Apple, not me.
If this styling and text is unacceptable to Apple, they should fix it in their own code.
The Problem
Try It Free is not an appropriate title here. It’s misleading people into starting a subscription that they’re going to be charged for. Here’s the catch, though: App developers like me don’t control that text.
Instead, we specify information about the subscription in App Store Connect.
In this case:
- It’s a yearly subscription.
- It includes a one-week free trial.
If you use SubscriptionStoreView(groupID:) to present the store, a lot of the presentation details are automatic. But here:
- “FretSketch Full,” the icon, and the bullet list are my code.
- The Terms of Service and Privacy Policy are Apple’s code and presentation, though I provide URLs and ask Apple to make them appear.
- The subscription controls are largely Apple’s, based on my configuration in App Store Connect.
- I did specify that I want multi-line buttons, which can be really explicit about the deal.
This screen is the result of that: Some combination of SwiftUI and StoreKit builds the button labels, styles them, and presents them without me having additional controls. In this case, it went with Try It Free and 1 week free, then $4.99/year. I would’ve preferred to have it say Subscribe, but I can’t do that.
Apple has a few things I can control, though: The big one is .subscriptionStoreButtonLabel(). Here, I’m using .multiline. It’s not documented in Apple’s reference, but there is a comment in the header file:
/// A button label that prefers to display two lines.
Note it doesn’t say anything about what kind of details. It certainly isn’t documented to be misleading, though it is.
There are a few alternatives, but the only one that looks like it might satisfy them is using .price. With that, the button text becomes 1 week free, then $4.99/year. I absolutely loathe this, since it’s not an action. It’s a rambling description. An action is something like Purchase, Try It, or Subscribe, right? 1 week free, then $4.99/year isn’t an action, it’s a ramble. I looked through all of these options back in October; .multiline was the least terrible one, but they all suck.
Apple’s Solution
It was at this point I wondered how Apple handles this in their own apps.
Let’s take a look at how Apple solves this problem in Apple Creator Studio, released earlier this week. This should be fully compliant with Apple’s latest standards, right?
It’s really not. I was angry last night. Now I’m just amused.

This is worse than FretSketh. They don’t even put the price in the button, though Free is in there. The price is left as secondary text, medium grey on a light grey background; much less prominent than the word Free.
They’re also charging $215/year in Canada, which is 43x what I’m charging. I should probably bump my price a little; I was originally planning to charge $0.99/month or $9.99/year, but went with an introductory price of half of that.
You can’t use examples of other apps, even Apple’s, to appeal an App Store rejection. Further, I wouldn’t want this to be the reason they approve the misleading button title. But Apple’s paywall should not have happened, and it would not have passed their own review process. Mine is subtly misleading through no fault of my own because Apple coded it so and judged it (fairly) as unworthy. That screen, though, is intentionally misleading.
Maybe that should be fine. Maybe they should just allow this. But when I say I want to be held to the same standard, I don’t want it to be this sketchy one.
I could say something like “it’s good to be the king,” but I don’t think that’s true. I think not being held to their own standards is going to be detrimental to them. Apple, stop being so sketchy.
My Solution
First, I’ve already appealed to App Review. I don’t expect that to go anywhere they’re fundamentally correct. This is misleading UI. I don’t think “but the misleading is coming from your code, Apple!” is a great defence when it can be worked around.
You could be forgiven for asking “Why are your screenshots so terrible?” Remember I mentioned above that this stuff is configured in App Store Connect? The way to control the button title is to change the parameters in App Store Connect.
As I was writing this, Apple changed those parameters by removing my free trial. It’s not quite as egregious as it seems since I mentioned I was willing to drop the free trial to fix this. I still wish they’d asked, or better yet just acknowledged this was their problem. Other developers get to offer free trials, why can’t I? Then again, they haven’t sent a reply yet, so they could just be experimenting to see if what I’m saying is true. Maybe they’ll put it back and just didn’t think I’d notice.
But this morning I read on Reddit about another customization axis for sheets: .subscriptionStoreControlStyle(). The default is .prominentPicker, which is what I’m using. Most of the options are “pickers,” and they all have this same problem: StoreKit generates button titles that Apple will reject.
There’s just one option that’s not a “picker,” though, which is .buttons. That one shows the title of my subscription as the button, like this:

If I remove the .multiline setting, it actually gets even better.

I like this better. “Free” doesn’t appear anywhere on the button, and with all the subscription details with the same prominence I think it would probably pass App Review. This is better than the appearance in FretSketch 1.0, and it’s certainly better than what Apple does in Creator Studio.
Going forward:
- If Apple approves 1.2 as is on appeal, I’ll ship it. I want this release in the hands of users.
- If Apple removes the free trial to “fix” the button text, I’ll ship 1.2 as is. I like a free trial, but I’m not going to hold the release for this.
- The next build, whether 1.2, 1.2.1 or 1.3, will switch to
.buttonscontrol style and default labels. It’ll re-add the trial, but probably with a longer duration. - I’m calling on Apple to fix StoreKit. That button should be titled Subscribe, not Try It Free. Even if they do that in a future version of iOS, though, it won’t impact iOS versions already out there. I filed this as FB21795992. If this App Reviewer was correct, if you use any control style but
.buttonsin your app with an intro period you’re risking rejection. - I’m also calling on Apple to make Apple Creator Studio more honest. I don’t want Apple to be sketchy like that, and I certainly don’t want that to be our new standard. If you can help get the word out, please do!
Update: Apple has approved the Mac version. It uses the same code and store design. I have not released, because I want to do a simultaneous release.

Update 2: On appeal, the iOS build was approved as-is. I still believe that Try It Free is a StoreKit bug, and Apple Creator Studio goes way over the line with its intentionally subservient pricing information and Accept Free Trial.