O que a virada de CEO da Apple realmente significa para quem desenvolve para iOS
Quando li no Olhardigital.com.br que John Ternus assumiu a Apple e já está mexendo na App Store com Eddy Cue, minha primeira reação não foi surpresa — foi atenção. Ternus é engenheiro de hardware, vem de cadeia de suprimentos e tem mentalidade de margem. Quando esse tipo de CEO olha para a App Store, ele vê dois números: a taxa de 30% que a Apple fatura em cima de cada transação e o fato de que boa parte desse bolo poderia render mais se a empresa apertasse as regras.
A saída de Phil Schiller, que era o “escudo” histórico dos desenvolvedores dentro da Apple, é o sinal mais claro. Schiller sempre foi o cara que segurava a barra entre pressão comercial e relacionamento com devs. Sem ele, e com Ternus querendo “deixar a marca”, a próxima leva de diretrizes pode pesar mais no bolso de quem publica app.
O que está tecnicamente em jogo na nova App Store
Vou direto ao ponto: quando o mercado fala em “mudar a App Store para gerar mais receita”, na prática significa mexer em três frentes:
- Comissão sobre transações in-app (atualmente 30% padrão, 15% no programa Small Business para quem fatura menos de US$ 1M/ano).
- Taxas sobre links externos — aquele loophole aberto pelo caso Epic vs Apple, que permite redirecionar usuários para pagamento fora da App Store mediante pagamento de 27% (a “Core Technology Fee” também entra aqui).
- Novas categorias de assinatura e cutucadas no Apple Services, que é onde a empresa mais cresce hoje.
Para quem só usa iPhone como usuário final, isso é notícia de jornal. Para quem mantém um app na loja, é mudança de planilha. E muda muita coisa.
Na Prática: como funciona o modelo de cobrança que pode apertar
Vamos traduzir o impacto em números reais, porque é isso que importa pra quem paga servidor, equipe e Ads.
- Venda direta (IAP): Apple leva 30% (ou 15% se você estiver no Small Business). Você recebe líquido ~70%.
- Assinatura após o 1º ano: comissão cai para 15%. Parece bom, mas só após 12 meses — até lá, é 30%.
- Small Business Program: 15% para devs com receita bruta < US$ 1M/ano no ano fiscal anterior. Quando você cruza a linha, os 30% voltam sobre tudo — cuidado com isso.
<3>Link externo (Reader App / Music App): permitido em casos específicos desde o caso Epic, mas há taxa de 27% sobre transações conduzidas via link em até 7 dias após redirecionamento.
Exemplo rápido: se seu app fatura R$ 50k/mês em assinaturas e você está fora do Small Business, sobram ~R$ 35k após a Apple. Se Ternus mexer nas regras de “boost” de assinatura, esse número pode encolher.
Código real: implementando IAP com StoreKit 2 (Swift)
Como o tema é App Store, faz sentido eu mostrar como é o código moderno de compra in-app. Muita gente ainda usa StoreKit 1, que está deprecated. Se você mexe com iOS, migre para StoreKit 2 — e prepare-se, porque qualquer mudança de guideline nova da Apple vai exigir revisão do seu fluxo de receipt handling.
import StoreKit
@MainActor
final class PurchaseManager: ObservableObject {
@Published private(set) var products: [Product] = []
@Published private(set) var purchasedProductIDs: Set = []
private let productIDs: Set = [
"com.yurideveloper.premium.monthly",
"com.yurideveloper.premium.yearly"
]
func loadProducts() async {
do {
let loaded = try await Product.products(for: productIDs)
self.products = loaded.sorted { $0.price < $1.price }
} catch {
print("Falha ao carregar produtos: \(error)")
}
}
func purchase(_ product: Product) async throws -> Transaction? {
let result = try await product.purchase()
switch result {
case .success(let verification):
let transaction = try checkVerified(verification)
await transaction.finish()
await updatePurchasedProducts()
return transaction
case .pending, .userCancelled:
return nil
case .unverified:
throw NSError(domain: "IAP", code: -1)
@unknown default:
return nil
}
}
func checkVerified(_ result: VerificationResult) throws -> T {
switch result {
case .verified(let safe):
return safe
case .unverified:
throw NSError(domain: "IAP", code: -2,
userInfo: [NSLocalizedDescriptionKey: "Receipt inválido"])
}
}
func updatePurchasedProducts() async {
for await result in Transaction.currentEntitlements {
guard case .verified(let transaction) = result else { continue }
purchasedProductIDs.insert(transaction.productID)
}
}
}
Detalhe importante: o método checkVerified é exatamente onde devs mais erram. Não confie em receipt não verificado. Se a Apple apertar regras e introduzir novos campos de auditoria, receipt que hoje valida pode quebrar amanhã — então trate sempre o caminho .unverified como falha.
Comparativo: App Store vs alternativas reais para devs iOS
Vale entender o cenário global antes de colocar todos os ovos na cesta da Apple.
| Caminho de distribuição | Comissão / Custo | Público | Risco regulatório |
|---|---|---|---|
| App Store oficial | 30% (15% Small Business) | Global | Baixo |
| Alternative App Store (UE via DMA) | 0,50€ por install acima de 1M/ano | União Europeia | Alto (regra nova, em disputa) |
| AltStore / Setapp | Sem comissão Apple (marketplace próprio) | Curto, nichado | Médio (depende de notarização) |
| Sideloading via Xcode (dev account) | US$ 99/ano Apple Developer | Até 3 devices, beta | Limitado |
| PWA / Web App (sem App Store) | 0% | Todos com navegador | Limitado a recursos do navegador |
Na minha experiência, devs sérios mantêm presença na App Store porque é onde mora o LTV mais alto, mas já vi casos de gente que fatura 6 dígitos mensais só com PWA bem feito, especialmente em mercados onde cartão de crédito na App Store é fricção (América Latina, por exemplo).
Erros comuns que devs cometem com a App Store — e que vão doer ainda mais com as mudanças
Testei várias dessas armadilhas em produção. Anota aí:
- Não planejar o “salto” do Small Business. Quando seu app cruza US$ 1M/ano, a Apple recalcula tudo retroativamente. Modele isso no seu P&L antes de crescer.
- Confiar no
originalTransactionIdcomo chave única. Ele muda em restores e family sharing. UseappAccountTokenpara associar ao usuário do seu backend. - Esquecer o refund silencioso. Apple processa reembolso e você só descobre quando o usuário reclama. Implemente
App Store Server Notificationscom webhook V2 e um endpointREFUND— sério, isso evita dor de cabeça. - Não versionar o produto no App Store Connect. Se Ternus mudar regras de assinatura, você vai precisar de novo product ID sem mexer no antigo. Planeje isso desde o dia 1.
- Ignorar o aviso de “Reader App” ou tentar loophole de link externo sem advogado. Apple rejeita sem dó. Não tente ser mais esperto que o app review — eles já viram tudo.
O “porquê” por trás da virada da Apple
Quando Ternus olha para a App Store, ele vê que iPhone vende menos a cada ano e que a margem de hardware encolheu. Serviços hoje é a maior linha de receita da Apple e tem margem operacional acima de 70%. Então faz sentido econômico apertar: cada ponto percentual de comissão adicional representa bilhões. Phil Schiller segurava essa pressão institucionalmente. Sem ele, a régua muda.
Como dev, você não controla o que a Apple decide. Controla o que decide hoje: diversificar receita, testar PWA, avaliar marketplaces europeus, e principalmente — implementar tudo de IAP no padrão novo. StoreKit 2 não é opcional, é sobrevivência técnica.
FAQ — Perguntas reais de quem desenvolve para iOS
1. A Apple pode mesmo subir a comissão de 30% para mais que isso?
Pode para categorias novas ou novos tipos de transação (boost de assinatura, por exemplo). Para a base existente, mexer nos 30% abriria uma guerra regulatória séria, especialmente na UE. O caminho provável é criar novas taxas, não mexer nas atuais.
2. Dev indie pequeno realmente precisa se preocupar?
Se você está no Small Business (15%), está relativamente protegido hoje. Mas se Ternus criar uma “taxa de distribuição” por install acima de certo volume, mesmo indie será afetado. Sim, se preocupe.
3. Vale a pena publicar no marketplace alternativo da UE?
Depende do seu público. Se 70%+ da sua receita vem de Alemanha, Holanda e países nórdicos, vale pilotar. Se vem dos EUA, hoje ainda não compensa o overhead operacional.
4. PWA substitui app nativo hoje em dia?
Para conteúdo e ferramentas leves, sim — funciona bem. Para apps que dependem de push notification robusto, In-App Purchase oficial ou APIs profundas (Core Bluetooth, ARKit), ainda não. E Push no iOS via web é limitado.
5. Qual a primeira coisa que eu deveria revisar no meu app depois dessa notícia?
Seu fluxo de receipt validation e sua implementação de StoreKit. Se está em StoreKit 1, migra. Se já está em StoreKit 2, revise o tratamento de .unverified e garanta que Transaction.currentEntitlements está sendo escutado em background. Isso é o esqueleto de qualquer mudança que venha.
Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto.