Tutorial completo con Xcode, buenas prácticas y ejemplos reales
Introducción
Las reseñas en la App Store son uno de los factores más influyentes en el éxito de una aplicación iOS. Una buena valoración no solo genera confianza en nuevos usuarios, sino que también mejora la visibilidad de la app dentro de la tienda gracias al App Store Optimization (ASO).
Apple es consciente de la importancia de este aspecto y, por ello, proporciona APIs oficiales que permiten solicitar reseñas directamente desde la aplicación, sin obligar al usuario a salir de ella. Con la llegada de StoreKit 2, Apple moderniza estas APIs para adaptarlas mejor a Swift, SwiftUI y a la programación asíncrona.
En este tutorial aprenderás:
- Qué es StoreKit 2 y en qué se diferencia de StoreKit clásico
- Cómo solicitar reseñas usando StoreKit 2 en SwiftUI
- Cuándo y cómo pedir reseñas sin molestar al usuario
- Cómo controlar la frecuencia de las solicitudes
- Ejemplos prácticos y patrones recomendados
- Errores comunes que debes evitar
Este artículo está pensado para desarrolladores con conocimientos básicos de SwiftUI que quieran implementar un sistema de solicitud de reseñas correcto, moderno y alineado con las normas de Apple.
1. ¿Qué es StoreKit 2?
StoreKit 2 es la evolución del framework StoreKit introducida por Apple a partir de iOS 15. Está diseñada para:
- Usar APIs modernas basadas en
async/await - Integrarse mejor con SwiftUI
- Simplificar la gestión de compras, transacciones y eventos de la App Store
- Unificar el acceso a funcionalidades relacionadas con la tienda
Aunque StoreKit 2 es más conocido por la gestión de In-App Purchases, también mantiene y moderniza funcionalidades como la solicitud de reseñas.
2. Reseñas en iOS: cómo funciona el sistema de Apple
Antes de escribir código, es importante entender cómo funciona el sistema de reseñas en iOS.
Características clave
- El sistema muestra un diálogo nativo
- El usuario puede valorar la app y escribir un comentario
- El proceso ocurre sin salir de la app
- Apple controla la frecuencia de aparición
Limitaciones importantes
- Apple permite mostrar el diálogo hasta 3 veces al año por usuario
- No hay forma de forzar su aparición
- No existe ningún callback que indique si el usuario ha valorado la app
- La llamada puede no mostrar nada si el sistema decide ignorarla
Esto significa que solicitar una reseña es una sugerencia al sistema, no una orden.
3. Normas de Apple sobre la solicitud de reseñas
Apple es estricta con este tema. Incumplir las normas puede provocar el rechazo de la app.
Está permitido
- Solicitar reseñas usando la API oficial
- Hacerlo tras una acción positiva
- Preguntar de forma educada y opcional
Está prohibido
- Ofrecer recompensas a cambio de reseñas
- Forzar redirecciones a la App Store
- Bloquear funciones si el usuario no valora la app
- Mostrar solicitudes de forma insistente
4. Requisitos del proyecto
Para usar StoreKit 2 necesitas:
- Xcode 14 o superior (recomendado Xcode 15+)
- iOS 15 o superior
- Proyecto SwiftUI
No es necesario configurar nada en App Store Connect para solicitar reseñas.
5. Importar StoreKit en SwiftUI
En cualquier archivo donde vayas a solicitar una reseña, importa StoreKit:
import StoreKitEn StoreKit 2, la funcionalidad de reseñas sigue estando disponible a través del sistema, pero con mejor integración en SwiftUI.
6. La forma recomendada en SwiftUI: requestReview
Aunque StoreKit 2 introduce muchas APIs nuevas, Apple sigue recomendando usar el Environment de SwiftUI para solicitar reseñas.
Acceso al entorno
@Environment(\.requestReview) var requestReviewEste enfoque es totalmente compatible con StoreKit 2 y es el más limpio en apps SwiftUI.
7. Solicitar una reseña de forma básica
El uso más simple es llamar directamente a requestReview().
requestReview()Esto le indica al sistema que, si lo considera oportuno, muestre el diálogo de reseña.
8. Ejemplo mínimo en SwiftUI
import SwiftUI
import StoreKit
struct ContentView: View {
@Environment(\.requestReview) var requestReview
var body: some View {
VStack(spacing: 24) {
Text("Gracias por usar nuestra app")
.font(.title)
Button("Valorar la aplicación") {
requestReview()
}
}
.padding()
}
}Este ejemplo es funcional, pero no es recomendable usarlo tal cual en producción, ya que no controla el momento ni la frecuencia.
9. Elegir el momento adecuado para pedir una reseña
Uno de los factores más importantes para obtener reseñas positivas es el timing.
Malos momentos
- Al abrir la app por primera vez
- Antes de que el usuario haya hecho nada
- Durante una acción crítica
Buenos momentos
- Después de completar una tarea
- Al alcanzar un logro
- Tras varios usos exitosos
- Al finalizar una experiencia positiva
10. Controlar la frecuencia con UserDefaults
Aunque Apple limita las solicitudes, es buena práctica añadir tu propio control.
Ejemplo de contador de usos
struct ReviewManager {
static func incrementUsage() {
let count = UserDefaults.standard.integer(forKey: "usageCount")
UserDefaults.standard.set(count + 1, forKey: "usageCount")
}
static func shouldRequestReview() -> Bool {
let count = UserDefaults.standard.integer(forKey: "usageCount")
return count == 5 || count == 20
}
}11. Integración con SwiftUI y StoreKit 2
struct TaskCompletedView: View {
@Environment(\.requestReview) var requestReview
var body: some View {
Text("¡Tarea completada!")
.onAppear {
ReviewManager.incrementUsage()
if ReviewManager.shouldRequestReview() {
requestReview()
}
}
}
}Este enfoque asegura que la reseña solo se solicite tras una experiencia positiva.
12. Preguntar primero si al usuario le gusta la app
Una estrategia muy utilizada es filtrar la experiencia antes de pedir la reseña.
Flujo recomendado
- “¿Te está gustando la app?”
- Si responde “Sí” → solicitar reseña
- Si responde “No” → ofrecer feedback privado
@State private var showAlert = false
.alert("¿Te gusta la app?", isPresented: $showAlert) {
Button("Sí") {
requestReview()
}
Button("No", role: .cancel) {
// Mostrar formulario de feedback
}
}Este enfoque mejora la calidad de las reseñas y reduce comentarios negativos.
14. StoreKit 2 y escenas (WindowScene)
En algunos casos avanzados, puede ser necesario acceder explícitamente a la escena activa.
if let scene = UIApplication.shared.connectedScenes
.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}ste método sigue siendo válido y compatible con StoreKit 2, aunque SwiftUI lo abstrae en la mayoría de casos.
15. Diferencia entre solicitar reseña y abrir la App Store
Solicitud interna (recomendada)
- Diálogo nativo
- Mejor UX
- Controlado por Apple
Redirección manual
Solo debe usarse si el usuario lo solicita explícitamente:
let url = URL(string: "https://apps.apple.com/app/idTU_APP_ID?action=write-review")!
UIApplication.shared.open(url)6. Pruebas en simulador, TestFlight y producción
Simulador
- El diálogo no siempre aparece
- No es fiable para pruebas
TestFlight
- Comportamiento más realista
- Ideal para validar el flujo
Producción
- Depende del historial del usuario
- Apple decide cuándo mostrar el diálogo
17. Errores comunes al solicitar reseñas
– Pedir reseñas repetidamente
– Mostrar alertas agresivas
– Forzar la redirección a la App Store
– Pedir reseña antes de aportar valor
– Ignorar la experiencia del usuario
18. Buenas prácticas de UX
- Usa un lenguaje amable y claro
- Haz la solicitud opcional
- Respeta la decisión del usuario
- No vuelvas a preguntar inmediatamente si rechaza
19. Ventajas de usar StoreKit 2
- APIs modernas y seguras
- Mejor integración con SwiftUI
- Preparado para el futuro del ecosistema Apple
- Código más limpio y mantenible
Aunque la solicitud de reseñas no cambia radicalmente respecto a StoreKit clásico, StoreKit 2 encaja mejor en arquitecturas modernas.
20. Conclusión
Solicitar reseñas en una aplicación SwiftUI utilizando StoreKit 2 es técnicamente sencillo, pero requiere una buena estrategia de diseño y experiencia de usuario. Apple pone límites claros para proteger a los usuarios, y respetarlos no solo evita rechazos en la App Store, sino que también genera confianza.
Si solicitas reseñas:
- En el momento adecuado
- Con moderación
- Usando las APIs oficiales
- Pensando en la experiencia del usuario
obtendrás mejores valoraciones de forma natural y sostenible.
Una buena app no pide reseñas desesperadamente: se las gana.
Si tienes cualquier duda sobre este artículo, contacta conmigo y estaré encantado de ayudarte 🙂.Puedes contactar conmigo en mi perfil de X o en mi perfil de Instagram








