Saltar al contenido principal

SDK de iOS

Información general

El SDK nativo de WebAR³ VPS para iOS localiza a los usuarios dentro de mapas VPS usando ARKit. El XCFramework funciona en aplicaciones UIKit, RealityKit y SwiftUI. Sigue el flujo al estilo Immersal: requisitos, instalación, permisos e inicialización del servicio.

Requisitos

  • iOS 12.0 o superior
  • Xcode 12+ con Swift 5
  • Dispositivo compatible con ARKit (no funciona en el simulador)

Opciones de instalación

Swift Package Manager

  1. En Xcode abre File → Add Packages….
  2. Introduce https://github.com/WebAR-Studio/was-vps-ios.git.
  3. Selecciona la rama o etiqueta deseada y añade el paquete a tu target.

Integración manual

  1. Clona el repositorio:
    git clone https://github.com/WebAR-Studio/was-vps-ios.git
  2. Arrastra WASVPS.xcframework a tu proyecto.
  3. En General → Frameworks, Libraries, and Embedded Content comprueba que el framework esté integrado.

Configurar permisos

Añade descripciones de uso de cámara y ubicación en Info.plist para que iOS muestre las solicitudes.

<key>NSCameraUsageDescription</key>
<string>La app necesita la cámara para mostrar experiencias de realidad aumentada.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>La app utiliza tu ubicación para colocar contenido AR con precisión.</string>
<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
<key>VPSLocalization</key>
<string>Activa la localización precisa para experiencias AR coherentes.</string>
</dict>

Inicializar el VPS

Usa VPSBuilder.initializeVPS para crear un VPSService. Pasa la ARSession, tu API key y los Location ID.

¿Necesitas un API key? Consíguelo en space.web-ar.studio o escribe a support@webar3.com / support@web-ar.studio.

import ARKit
import WASVPS

final class VPSDemoController: UIViewController, ARSCNViewDelegate {
@IBOutlet private weak var sceneView: ARSCNView!
private var configuration: ARWorldTrackingConfiguration?
private var vps: VPSService?

override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
sceneView.scene = SCNScene()

configuration = VPSBuilder.getDefaultConfiguration()

VPSBuilder.initializeVPS(
arSession: sceneView.session,
apiKey: "your-api-key",
locationIds: ["your-location-id"],
url: "https://was-vps.web-ar.xyz/vps/api/v3",
gpsUsage: false,
delegate: self
) { service in
self.vps = service
self.vps?.start()
}
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let configuration { sceneView.session.run(configuration) }
}

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
vps?.frameUpdated()
}
}

extension VPSDemoController: VPSServiceDelegate {
func positionVPS(pos: ResponseVPSPhoto) {
print("Localized pose:", pos)
}

func error(err: NSError) {
print("VPS error:", err)
}

func sending(requestData: UploadVPSPhoto?) {
print("Sending localization request…")
}
}

Detén el servicio en sessionWasInterrupted y reinícialo en sessionInterruptionEnded.

RealityKit

En RealityKit reenvía cada frame desde ARSessionDelegate:

func session(_ session: ARSession, didUpdate frame: ARFrame) {
vps?.frameUpdated()
}

Las llamadas de ciclo de vida (start, stop, clearCustomLocPos) son iguales que en SceneKit.

SwiftUI

Envuelve ARSCNView o ARView con UIViewRepresentable/UIViewControllerRepresentable. Conserva VPSService en un ViewModel y alterna start()/stop() desde controles SwiftUI.

Controles avanzados

  • Usa setCustomLocPosForFirstRequest para definir una pose inicial antes de la primera petición.
  • Cambia el endpoint pasando otro url a initializeVPS (por defecto https://was-vps.web-ar.xyz/vps/api/v3).
  • Activa gpsUsage para incluir coordenadas del dispositivo en las solicitudes.

Solución de problemas

  • Si VPSBuilder.getDefaultConfiguration() devuelve nil, el dispositivo no soporta ARKit.
  • Si no llegan callbacks, comprueba que frameUpdated() se llame cada frame y que tu API key y Location ID sean válidos.
  • En la carpeta /examples hay implementaciones completas para UIKit, RealityKit y SwiftUI.