StoreKit para Swift: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é StoreKit e para que serve?

\n\n

StoreKit é um framework nativo da Apple, projetado para implementar Compras no Aplicativo (In-App Purchases) e assinaturas em aplicativos para iOS, macOS, watchOS e tvOS. Ele fornece aos desenvolvedores uma interface unificada para interagir com a App Store: solicitar produtos, processar transações, verificar direitos de acesso e gerenciar assinaturas.

\n\n

As principais tarefas que o StoreKit resolve:

\n
    \n
  • Monetização — venda de bens digitais (acesso premium, moeda virtual, conteúdo).
  • \n
  • Gerenciamento de assinaturas — renovações automáticas, status, períodos de teste.
  • \n
  • Segurança — processamento de pagamentos através da App Store sem transmitir dados de cartão de crédito ao desenvolvedor.
  • \n
  • Restauração de compras — o usuário pode transferir compras para outro dispositivo.
  • \n
\n\n

É importante entender: StoreKit não é uma biblioteca de terceiros, mas sim parte do Xcode SDK. Não é necessário instalá-lo separadamente, mas é preciso configurá-lo no App Store Connect e adicioná-lo ao projeto.

\n\n

Instalação e configuração

\n\n

Como StoreKit é um framework do sistema, sua instalação se resume a conectá-lo no projeto Xcode:

\n\n
    \n
  1. Abra seu projeto no Xcode.
  2. \n
  3. Selecione o target (seu aplicativo) → aba "General".
  4. \n
  5. Role até a seção "Frameworks, Libraries, and Embedded Content".
  6. \n
  7. Clique em "+" e selecione StoreKit.framework.
  8. \n
  9. Certifique-se de que o status "Embed" esteja definido como "Do Not Embed".
  10. \n
\n\n

Depois disso, importe o framework nos arquivos necessários:

\n\n
import StoreKit
\n\n

Também é obrigatório configurar os produtos no App Store Connect:

\n
    \n
  • Crie identificadores de produtos (por exemplo, com.example.premium).
  • \n
  • Defina preço, localização, tipo (consumível/não consumível/assinatura).
  • \n
  • Para assinaturas, configure grupos e períodos de teste.
  • \n
\n\n

Início rápido com exemplo de código

\n\n

Exemplo funcional mínimo para solicitar e comprar um produto:

\n\n
import StoreKit\n\nclass StoreManager: NSObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {\n    \n    static let shared = StoreManager()\n    private var products: [SKProduct] = []\n    \n    override private init() {\n        super.init()\n        SKPaymentQueue.default().add(self)\n    }\n    \n    // 1. Solicitação de produtos\n    func fetchProducts(productIDs: Set<String>) {\n        let request = SKProductsRequest(productIdentifiers: productIDs)\n        request.delegate = self\n        request.start()\n    }\n    \n    // 2. Delegate de recebimento de produtos\n    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {\n        self.products = response.products\n        for product in products {\n            print("Produto encontrado: \\(product.localizedTitle) — \\(product.price)")\n        }\n    }\n    \n    // 3. Compra\n    func purchase(product: SKProduct) {\n        let payment = SKPayment(product: product)\n        SKPaymentQueue.default().add(payment)\n    }\n    \n    // 4. Processamento de transações\n    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {\n        for transaction in transactions {\n            switch transaction.transactionState {\n            case .purchased:\n                // Desbloquear conteúdo\n                print("Compra bem-sucedida: \\(transaction.payment.productIdentifier)")\n                SKPaymentQueue.default().finishTransaction(transaction)\n            case .failed:\n                if let error = transaction.error {\n                    print("Erro na compra: \\(error.localizedDescription)")\n                }\n                SKPaymentQueue.default().finishTransaction(transaction)\n            case .restored:\n                print("Com                    

Recommendations