O que é StoreKit e para que serve?
\n\nStoreKit é 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\nAs 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
É 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\nInstalação e configuração
\n\nComo StoreKit é um framework do sistema, sua instalação se resume a conectá-lo no projeto Xcode:
\n\n- \n
- Abra seu projeto no Xcode. \n
- Selecione o target (seu aplicativo) → aba "General". \n
- Role até a seção "Frameworks, Libraries, and Embedded Content". \n
- Clique em "+" e selecione StoreKit.framework. \n
- Certifique-se de que o status "Embed" esteja definido como "Do Not Embed". \n
Depois disso, importe o framework nos arquivos necessários:
\n\nimport StoreKit\n\nTambé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
Início rápido com exemplo de código
\n\nExemplo funcional mínimo para solicitar e comprar um produto:
\n\nimport 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