# Inicio rápido de iOS

> El botón nativo Guía de tallas (SwiftUI y UIKit), la talla recomendada del cliente y la ventana de prueba virtual en una hoja.

Source: https://docs.tryyoursize.com/es/quickstarts/ios/

> **Para tu equipo de desarrollo**
>
> **Qué hace:** Añade un botón nativo «Guía de tallas» junto al selector de tallas de nuestra app de iOS. Quien tiene sesión iniciada ve «Tu talla: M»; al tocarlo se abre la ventana de TryYourSize en una hoja. La app solo recibe tallas.
>
> **Tiempo necesario:** Alrededor de un día, incluido el registro de la app.
>
> **Qué enviarle:** La clave publicable de prueba (pk_test_…) y el bundle ID de nuestra app, que hay que registrar como ios-app://<bundle id>.

iOS 16+, Swift 5.9+, SwiftUI y UIKit.

> **Caution: De momento, solo modo de prueba para apps**
>
> Los orígenes de app (`ios-app://…`) se aceptan en modo de prueba. El modo real para apps requiere verificar la app (associated domains), que llegará pronto. La distribución pública del paquete de Swift y del pod también llegará pronto: durante el piloto te compartimos el paquete.

## 1. Instalación

- **Swift Package Manager:** File → Add Package Dependencies → el paquete `TryYourSize`, producto `TryYourSize`.
- **CocoaPods:** `pod 'TryYourSize'` (con el `:path` o el origen que te compartamos).

## 2. Registra tu app

En Studio, añade `ios-app://<tu bundle id>` (en minúsculas, por ejemplo `ios-app://com.brand.shop`) a los sitios permitidos de tu tienda para el **modo de prueba**. Hasta que esté registrado, el botón devuelve `app_not_allowed`.

## 3. Úsalo

```swift

let tys = try TryYourSize(publishableKey: "pk_test_…")   // una clave secreta lanza un error: guarda sk_ en tu servidor

// SwiftUI, donde estaba tu enlace "Size guide":
HStack {
    Text("Size")
    Spacer()
    SizeGuide(client: tys, product: "SKU-123") { rec in
        // Al mostrarse y en cada cambio. Preselecciona, pero nunca por encima de la elección del cliente.
        if rec.status == .ready, let size = rec.size, !touched { selectedSize = size }
    }
}

// UIKit
let guide = SizeGuideButton(client: tys, product: "SKU-123", variant: .button)
guide.onRecommendation = { rec in /* … */ }

// Sin botón
let rec = try await tys.recommendation(for: "SKU-123")
tys.present(product: "SKU-123")                                       // abre la ventana tú mismo
tys.on { event in if case let .size(s) = event { select(s.size) } }   // "Usar esta talla" en la ventana
```

**Estados del botón:** «Guía de tallas» (sin sesión iniciada) → «Calculando tu talla…» → «Tu talla: **M**» (con el punto de conectado), o «Guía de tallas · conectado». Los textos siguen `locale` (en, es, fr, de, it); `label:` te permite usar tu propio texto.

**`Recommendation`:** `status` (`.ready`, `.computing`, `.noSize`, `.signedOut`, `.unavailable`), `size` con tus etiquetas, `studioSize`, `wearableSizes`. El valor `"none"` del SDK web es `.noSize` en Swift. Una recomendación nunca inicia una simulación.

## 4. Apariencia

Por defecto (`.inherit`), el botón toma la fuente y el color de texto de SwiftUI, y la ventana toma los colores de texto y de fondo de tu app, modo oscuro incluido.

```swift
let config = TryYourSize.Configuration(appearance: Appearance(
    colorPrimary: TYSColor(UIColor.systemIndigo), fontFamily: "Inter, -apple-system", borderRadius: 12,
    fonts: [URL(string: "https://fonts.googleapis.com/css2?family=Inter:wght@400;600")!]))
let tys = try TryYourSize(publishableKey: "pk_test_…", configuration: config)
tys.appearance.colorPrimary = TYSColor(hex: "#111111")   // en directo: una ventana abierta cambia de estilo al instante
```

## 5. Eventos y errores

- **Eventos** (`tys.on`): `.ready`, `.open`, `.close`, `.size(SizeSelection)`, `.loadError(TryYourSizeError)`.
- **Códigos de error** (`TryYourSizeError.code`): `secret_key_in_app`, `invalid_key`, `invalid_app_identifier`, `invalid_option`, `window_unreachable`, `app_not_allowed`, `sign_in_cancelled`, `sign_in_unavailable`.
- Al deslizar la hoja hacia abajo, primero se consulta a la ventana: si hay medidas sin guardar, el cliente tiene que confirmarlo.

## Inicio de sesión

Los clientes inician sesión dentro de la ventana (correo electrónico y un código de 6 dígitos), una vez por app. Pronto se podrá iniciar sesión a través del navegador del sistema con llaves de acceso, compartiendo la sesión de tryyoursize.com del cliente.
