๐Ÿ— Giacomo Balli (@BigBalli) header
๐Ÿ— Giacomo Balli (@BigBalli) profile picture

The Mobile Guy โ†’ I help non-techy owners leverage technology ๐Ÿš€ ๐Ÿ‡ฎ๐Ÿ‡น ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ“ฑ๐ŸŽพ๐Ÿ

San Francisco
Joined June 2010
I got tired of living in the App Store Connect websiteโ€ฆ so I built a Mac app that does the busywork for me. App Store Localization: every app in your account in one window. Translate listings into every App Store language, price for purchasing power in 175 territories, reply to reviews, preflight and submit. The part I'm proudest of is pricing (video below).
6
2
84
Nothing is written until you've seen it. Every change (one keyword or a 121-territory price schedule) opens as a plan with the old and new value side by side. And the Sales tab marks each change on the chart, so 2 weeks later you can see whether it actually did anything.
1
6
It also ships `asl` (a CLI) and an MCP server, so Claude Code or Codex can plan a release for you. Your API key stays in your Keychain and calls go straight from your Mac to Apple (no server of mine in between). Curious what you'd want it to do next?
20
Same notice here, after 16 years on the App Store: 3M downloads, 48 live apps, no spam finding until August. The rejections were all on 11 new apps that never went live. @Apple still sells my live apps and bills my Apple Ads, but has held my payouts since September.
Update: REJECTED Without revealing the actual response from Apple, the issue is multiple resubmission without fixing the issue (the issue being objectionable content). Now let me give you additional context because it matters. I had an ai photo editor app that had different templates. An example of the templates rejected specifically were "change outfit", "fit to fat" or "make this phone screen look cracked". During the initial phase of launching my app (circa 3 months while I was shipping many updates and bug fixes often), I got this objectionable content rejection roughly 11 times but it usually came with other issues so I have assumed it's a junior reviewer and not a problem. I've even been on a call with the Developer Relations to talk about this and I was told it shouldn't be an issue. The app had NSFW guardrails and didn't allow users to generate any nudity at all! I have genuinely considered these rejections as a review error because if it was not, ALL the ai editor apps including CHATGPT would have to be removed. This was not me trying to evade the review process in any way. I'll be grateful for any engagement or reposts to get this to Apple's attention. To Apple staff: I'm sure we can make this a win/win situation where my case will function as a warning to developers showing what will happen, if they evade the review process but also a case where Apple reinstates an honest developer that created an app that users genuinely enjoyed. As you can see on the twitter timeline, developers are rightfully scared if something similar is going to happen to them. Many of them already leaving to do web, others stopped shipping bug fixes just because they are afraid of getting rejected and risking their developer account. Needless to say, this will result in the decline of the appstore sales in the very near future if not handled responsibly. I'm hoping to get this decision reversed and show the developers that they can trust Apple to build a business on their platform, without worrying about getting the whole business destroyed overnight. That is of course, if they obey the Apple rules. Once again, please retweet because this will certainly impact your future as an app store developer.
1
5
164
Separate Claude sessions working on the same project just started talking to each other, sending direct/live messages ๐Ÿคฏ
74
Everyone says EU devs should drop StoreKit for Stripe now that Apple allows it. I ran it for a Small Business Program app. โ‚ฌ49.99/yr plan: Apple IAP: โ‚ฌ7.50 in fees Link-out to Stripe: โ‚ฌ5.00 to Apple + ~โ‚ฌ3.35 to Stripe = โ‚ฌ8.35 Switching costs me โ‚ฌ0.85 more per subscriber.
3
1
112
Apple still takes 10% of link-out sales from small devs. A US Stripe account charges EU cards 2.9% + $0.30, plus 1.5% international, 1% FX and 0.7% for Billing. Then you're merchant of record and file EU VAT yourself, which Apple handled inside its cut.
1
49
The math flips if you pay Apple the full 26%, or sell pricier plans through an EU Stripe entity. On the 15% tier, StoreKit is still the cheapest checkout you can offer.
21
I think weโ€™re framing the AI security problem backwards. The conventional wisdom is that security is inherently asymmetric: the attacker only has to succeed once, while the defender has to succeed every time. Sure. But the defender has some pretty meaningful advantages too. They know the architecture. They can inspect every component. They can simulate compromised machines. They can attack their own systems continuously. And when they find a weakness, they can actually change the system and test whether the change worked. The attacker just needs to find the one thing they missed. Historically, that was a pretty good bet because finding everything was impossibly expensive. AI changes the economics of that bet. If agents can probe thousands of attack paths continuously, then yes, attackers get more capable. But so do defenders, and defenders have something attackers donโ€™t: control over the thing being attacked. This is why Iโ€™m skeptical that slowing down AI meaningfully improves software security. AI didnโ€™t put the bugs in the server. It made finding them cheaper. And cheap discovery is potentially much more useful to the person who can fix the server than the person trying to break into it.
1
130
Who would have known so much information is publicly available? ๐Ÿ˜ฑ
37
A SwiftUI bug silently killed every Mac purchase in my apps. iOS apps run on Apple Silicon Macs as "Designed for iPad." There's a trap there that crashes your paywall on Mac only, and you never see it on your test devices. What it is + the one-line fix
2
82
The fix is one line. Re-inject on the presented view: PaywallView().environment(store) No-op on iOS, required on Mac. The old @EnvironmentObject was carried across the boundary. The new @Observable one is not.
1
7
Grep every .sheet / .fullScreenCover / .popover that presents a view reading Environment(YourType.self), and re-inject there. I just found and fixed it in 24 of my apps. Go check yours.
5