StoreKit para Swift: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es StoreKit y para qué sirve?

\n\n

StoreKit es un framework integrado de Apple, diseñado para implementar Compras dentro de la aplicación (In-App Purchases) y suscripciones en aplicaciones para iOS, macOS, watchOS y tvOS. Proporciona a los desarrolladores una interfaz unificada para interactuar con la App Store: solicitar productos, procesar transacciones, verificar derechos de acceso y gestionar suscripciones.

\n\n

Las principales tareas que resuelve StoreKit son:

\n
    \n
  • Monetización — venta de bienes digitales (acceso premium, moneda virtual, contenido).
  • \n
  • Gestión de suscripciones — renovaciones automáticas, estados, períodos de prueba.
  • \n
  • Seguridad — procesamiento de pagos a través de la App Store sin transferir datos de tarjetas bancarias al desarrollador.
  • \n
  • Restauración de compras — el usuario puede transferir compras a otro dispositivo.
  • \n
\n\n

Es importante entender: StoreKit no es una biblioteca de terceros, sino parte del SDK de Xcode. No es necesario instalarlo por separado, pero se debe configurar en App Store Connect y agregarlo al proyecto.

\n\n

Instalación y configuración

\n\n

Dado que StoreKit es un framework del sistema, su instalación se reduce a conectarlo en el proyecto de Xcode:

\n\n
    \n
  1. Abra su proyecto en Xcode.
  2. \n
  3. Seleccione el target (su aplicación) → pestaña "General".
  4. \n
  5. Desplácese hasta la sección "Frameworks, Libraries, and Embedded Content".
  6. \n
  7. Presione "+" y seleccione StoreKit.framework.
  8. \n
  9. Asegúrese de que el estado "Embed" esté configurado como "Do Not Embed".
  10. \n
\n\n

Después de esto, importe el framework en los archivos necesarios:

\n\n
import StoreKit
\n\n

También es obligatorio configurar los productos en App Store Connect:

\n
    \n
  • Cree identificadores de productos (por ejemplo, com.example.premium).
  • \n
  • Indique el precio, la localización, el tipo (consumible/no consumible/suscripción).
  • \n
  • Para suscripciones, configure grupos y períodos de prueba.
  • \n
\n\n

Inicio rápido con ejemplo de código

\n\n

Ejemplo mínimo funcional para solicitar y comprar un producto:

\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. Solicitud de productos\n    func fetchProducts(productIDs: Set<String>) {\n        let request = SKProductsRequest(productIdentifiers: productIDs)\n        request.delegate = self\n        request.start()\n    }\n    \n    // 2. Delegado de recepción de productos\n    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {\n        self.products = response.products\n        for product in products {\n            print("Producto 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. Procesamiento de transacciones\n    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {\n        for transaction in transactions {\n            switch transaction.transactionState {\n            case .purchased:\n                // Desbloquear contenido\n                print("Compra exitosa: \\(transaction.payment.productIdentifier)")\n                SKPaymentQueue.default().finishTransaction(transaction)\n            case .failed:\n                if let error = transaction.error {\n                    print("Error de compra: \\(error.localizedDescription)")\n                }\n                SKPaymentQueue.default().finishTransaction(transaction)\n            case .restored:\n                print("Comp                    

Recommendations