Guía · iOS (Swift)
Añade un programa de afiliados o de referidos a tu app iOS.
El paquete Swift de InfluTo funciona en apps SwiftUI y UIKit. Te dice qué creador refirió una instalación, acepta códigos de referido escritos a mano y hace que cada compra se verifique, ya sea con RevenueCat o directamente con StoreKit 2 y la App Store Server API.
Actualizado: 1 de noviembre de 2026
En resumen
Añade el paquete Swift github.com/influto/influto-ios al target de tu app, llama una sola vez a InfluTo.initialize al arrancar, desde una Task, y después a checkAttribution e identifyUser. Sin RevenueCat, la captura con StoreKit 2 ya viene incluida: el SDK observa Transaction.updates y recupera los entitlements vigentes, y tú además llamas a reportPurchase(verification:) justo después de que product.purchase() termine con éxito. Con RevenueCat, pasa un revenueCatAttributeSetter para que el SDK pueda etiquetar al suscriptor. iOS 16+, sin dependencias de terceros, sin IDFA y sin aviso de ATT. Cuenta con una tarde de trabajo.
Qué incluye
El paquete solo depende de Foundation, StoreKit 2 y CryptoKit, se distribuye con Swift Package Manager (no hay pod de CocoaPods) y tiene licencia MIT. Requiere iOS 16 y Swift 5.9 (Xcode 15) o posterior, y también compila para macOS 13, tvOS 16 y watchOS 9.
Atribución sin rastreo. Un código escrito a mano es una coincidencia exacta; si no, la coincidencia por clic en el enlace conecta la instalación con un toque reciente en el enlace del creador, dentro de las 72 horas. Sin identificador publicitario ni características del dispositivo, así que no hace falta el aviso de App Tracking Transparency.
Un campo de código en SwiftUI. InfluToReferralCodeInput valida mientras el usuario escribe y aplica el código al pulsar. En UIKit, aloja la vista en un UIHostingController.
Captura con StoreKit 2 incluida. En apps store-direct, el SDK informa de las compras por sí mismo, e InfluTo verifica con Apple cada transacción firmada.
Paso 1: añade el paquete Swift
En Xcode, elige File → Add Package Dependencies, pega la URL del repositorio y añade la biblioteca InfluTo al target de tu app. O decláralo en Package.swift:
// Xcode → File → Add Package Dependencies →
// https://github.com/influto/influto-ios (from 1.1.1)
// Or in Package.swift:
.package(url: "https://github.com/influto/influto-ios.git", from: "1.1.1")Paso 2: inicializa al arrancar
Todos los métodos del SDK son async. Llama a initialize una sola vez al arrancar, desde una Task, y espera su resultado. Lanza un error si falla (clave incorrecta, sin red): captúralo, regístralo y sigue; el siguiente arranque lo intentará de nuevo. En UIKit, inicia la Task desde application(_:didFinishLaunchingWithOptions:).
checkAttribution nunca lanza errores. Si hay un error, o si initialize no se completó, devuelve attributed == false y no guarda nada. Una respuesta positiva se guarda en el dispositivo, así que las llamadas posteriores la devuelven sin hacer ninguna petición.
La clave de API (it_…, en Setup & SDK) sirve para desarrollo y producción. No la incluyas en el código que subes al repositorio; por ejemplo, ponla en un .xcconfig que no se versione y léela a través de Info.plist. Un arranque típico en SwiftUI en una app con RevenueCat:
import SwiftUI
import InfluTo
import RevenueCat // only if you use RevenueCat
@main
struct MyApp: App {
init() {
Purchases.configure(withAPIKey: "appl_…") // RevenueCat apps: configure it first
Task { await startInfluTo() }
}
var body: some Scene { WindowGroup { ContentView() } }
}
func startInfluTo() async {
var config = InfluToConfig(
apiKey: Bundle.main.object(forInfoDictionaryKey: "INFLUTO_API_KEY") as? String ?? "",
appVersion: Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
)
config.revenueCatAttributeSetter = { attrs in
Purchases.shared.attribution.setAttributes(attrs)
}
do {
try await InfluTo.initialize(config)
} catch {
print("InfluTo initialize failed: \(error)") // retried on the next launch
return
}
let attribution = await InfluTo.checkAttribution()
await InfluTo.identifyUser(Purchases.shared.appUserID)
}Paso 3: conecta las compras
InfluTo solo paga comisión por compras verificadas con la tienda. Elige un camino para iOS:
RevenueCat: pasa un revenueCatAttributeSetter, como en MyApp.swift más arriba; sin él, nada asigna el atributo en iOS. El SDK lo llama una vez, cuando encuentra el referido, así que configura RevenueCat antes de checkAttribution. Después, conecta el webhook en Setup & SDK.
Store-direct (StoreKit 2): cuando la app está configurada como store-direct en Settings → Validation, initialize empieza a observar Transaction.updates y recupera los entitlements vigentes y las transacciones sin finalizar. Cada transacción se informa una sola vez, identificada por su ID de transacción original. El SDK nunca llama a finish(); tu app sigue encargándose de finalizar sus transacciones.
Un detalle de StoreKit importa: las compras hechas dentro de tu app vuelven a quien llamó a product.purchase(), no al listener en segundo plano. Por eso, informa justo después de una compra exitosa, como se muestra abajo. Los informes se deduplican, así que una compra informada aquí y por la captura automática cuenta una sola vez.
Para vincular las transacciones con el ID de tu usuario, pasa el account token de StoreKit: product.purchase(options: [.appAccountToken(InfluTo.appAccountToken(forUserID: userID))]), siempre el mismo UUID para un ID de usuario dado. reportPurchase lanza InfluToError.retryable ante un 503 (reintenta más tarde) e InfluToError.notConfigured ante un 400 (iOS aún no es store-direct).
// Store-direct only (no RevenueCat). Report right after a purchase — StoreKit
// doesn't send purchases made in your app to the background listener, and
// reports are de-duplicated, so this is safe alongside auto-capture:
if case .success(let verification) = try await product.purchase() {
let r = try await InfluTo.reportPurchase(verification: verification)
}Paso 4: añade tu clave de la App Store Server API
Store-direct necesita acceso de lectura a la App Store Server API. InfluTo solo lee; nunca cambia nada en tu cuenta de App Store Connect.
- 1
Crea la clave. En App Store Connect, abre Users and Access → Integrations → In-App Purchase, crea una clave y descarga el archivo .p8. Apple solo permite descargarlo una vez. Anota el Issuer ID y el Key ID.
- 2
Súbela. En InfluTo, abre Settings → Validation, suelta el .p8 (el Key ID se lee del nombre de archivo que Apple asigna por defecto) e introduce el Issuer ID, el Key ID y el App Store ID numérico de la app.
- 3
Elige el entorno y activa el cambio. Elige Sandbox mientras pruebas con TestFlight o con testers de sandbox, y Production antes de publicar. Cuando la comprobación de credenciales salga en verde, cambia iOS a Apple — direct. Hasta entonces, los informes reciben un 400, así que puedes publicar el SDK antes sin riesgo.
A partir de ahí, InfluTo comprueba con Apple cada hora las suscripciones atribuidas para detectar renovaciones, cancelaciones y reembolsos, y revierte la comisión en los reembolsos. No necesitas un backend propio.
Paso 5: prueba con TestFlight o un tester de sandbox
Las compras de TestFlight y de sandbox nunca mueven dinero ni alteran tus estadísticas:
- 1
Simula una compra. Simulate a purchase, en Setup & SDK, envía una compra de prueba de sandbox por el flujo real de InfluTo. Solo comprueba la parte de InfluTo, nunca tus credenciales.
- 2
Instala desde un enlace de referido. Únete a tu campaña con una segunda cuenta de creador, abre su enlace en un dispositivo de prueba, instala tu build de TestFlight y ábrela. Escribir el código es la prueba más fiable.
- 3
Compra con una cuenta de sandbox. Con el entorno de Apple en Sandbox, compra con un tester de TestFlight o de sandbox. El Integration log, cambiado a Sandbox, muestra la compra atribuida a tu código.
Vuelve a poner el entorno en Production antes de publicar: InfluTo verifica exactamente contra el entorno que elijas. clearAttribution() restablece el dispositivo para otra prueba.
Notas sobre iOS
Detalles importantes para la revisión y para store-direct:
Solo StoreKit 2. Store-direct necesita la transacción firmada (JWS); nunca envíes la representación JSON sin firmar. El SDK envía el JWS incluso cuando falla la verificación en el dispositivo, e InfluTo lo verifica en el servidor.
Incluye privacy manifest. El paquete incluye PrivacyInfo.xcprivacy: sin rastreo, sin dominios de rastreo, y con los tipos de datos que recoge, no vinculados a la identidad. La documentación de privacidad los relaciona con tus respuestas de App Privacy.
Estado local. El SDK guarda su estado en la suite de UserDefaults com.influto.sdk. Sobrevive a las actualizaciones de la app; si se borra la app, desaparece.
O deja que lo haga tu agente de código
Conecta el servidor MCP de InfluTo a Claude Code, Codex o Cursor y pídele la integración: el agente escribe el código de arranque y de compras, te da un enlace para que subas tú mismo el .p8, ejecuta la comprobación de credenciales y confirma una compra de sandbox atribuida.
SDK de afiliados para iOS, en preguntas y respuestas.
¿Existe un SDK de afiliados para apps de iOS escritas en Swift?
Sí. El paquete Swift de InfluTo (github.com/influto/influto-ios, MIT) añade detección de instalaciones referidas, códigos de referido y atribución de compras a apps en SwiftUI y UIKit. Requiere iOS 16 y Swift 5.9 o posterior, y no tiene dependencias de terceros.
¿Puedo rastrear referidos de creadores en iOS sin el aviso de ATT?
Sí. InfluTo no usa el IDFA ni compara nunca características del dispositivo; los códigos escritos son una coincidencia exacta y la coincidencia por clic en el enlace es un recurso de 72 horas limitado a tu app. El privacy manifest del paquete declara que no hay rastreo.
¿Funciona sin RevenueCat?
Sí. La captura con StoreKit 2 viene incluida, e InfluTo verifica cada transacción firmada con la App Store Server API, usando una clave de In-App Purchase de solo lectura que subes tú. No necesitas un servidor propio.
¿Hay un pod de CocoaPods?
No. El SDK se distribuye solo con Swift Package Manager y figura en el Swift Package Index.
¿Funcionan las compras de TestFlight?
Sí, cuando el entorno de Apple de la app está en Sandbox en Ajustes → Validación. Las compras de TestFlight y de sandbox aparecen en el registro de Integración, pero nunca mueven dinero ni cambian tus estadísticas.
¿Cuánto cuesta?
0 $ al mes. Por cada compra verificada pagas la comisión que hayas fijado más el 10 % de esos mismos ingresos (7 %, 5 % o 3 % según el volumen). El monedero prepago empieza en 50 $ y es reembolsable. InfluTo paga a los creadores cada mes con Stripe Connect en 33 países, a partir de 20 $ ganados.
Lanza códigos de referido en tu próxima build de TestFlight.
Un paquete Swift, una sola vía de validación, un depósito reembolsable. 0 $ al mes; el 10 % solo sobre los ingresos que traen los creadores.
Empieza gratis