-
Explorar las mejoras de la app empresarial espacial
Descubre cómo las últimas mejoras y API de visionOS 26 amplían el acceso y las capacidades empresariales anunciadas el año pasado. Descubre cómo estas nuevas funcionalidades facilitan la creación de flujos de trabajo de entrenamiento de modelos, mejoran las transmisiones de video y te permiten alinear sistemas de coordenadas en una red local para desarrollar experiencias colaborativas en tu app interna.
Capítulos
- 0:04 - Introducción
- 1:37 - Agilizar el desarrollo
- 4:54 - Mejorar la experiencia de usuario
- 13:37 - Visualizar el entorno
- 24:01 - Próximos pasos
Recursos
- Implementing object tracking in your visionOS app
- Building spatial experiences for business apps with enterprise APIs for visionOS
Videos relacionados
WWDC25
WWDC24
-
Buscar este video…
-
-
3:00 - createml on the Mac command line
xcrun createml objecttracker -s my.usdz -o my.referenceobject -
4:28 - VisionEntitlementServices
import VisionEntitlementServices func checkLicenseStatus() { // Get the shared license details instance let license = EnterpriseLicenseDetails.shared // First, you might check the overall license status guard license.licenseStatus == .valid else { print("Enterprise license is not valid: \(license.licenseStatus)") // Optionally disable enterprise features or alert the user return } // Then, check for a specific entitlement before using the feature if license.isApproved(for: .mainCameraAccess) { // Safe to proceed with using the main camera API print("Main Camera Access approved. Enabling feature...") // ... enable camera functionality ... } else { // Feature not approved for this license print("Main Camera Access not approved.") // ... keep feature disabled, potentially inform user ... } } -
10:04 - SharedCoordinateSpaceModel
// // SharedCoordinateSpaceModel.swift // import ARKit class SharedCoordinateSpaceModel { let arkitSession = ARKitSession() let sharedCoordinateSpace = SharedCoordinateSpaceProvider() let worldTracking = WorldTrackingProvider() func runARKitSession() async { do { try await arkitSession.run([sharedCoordinateSpace, worldTracking]) } catch { reportError("Error: running session: \(error)") } } // Push data received from other participants func pushCoordinateSpaceData(_ data: Data) { if let coordinateSpaceData = SharedCoordinateSpaceProvider.CoordinateSpaceData(data: data) { sharedCoordinateSpace.push(data: coordinateSpaceData) } } // Poll data to be sent to other participants func pollCoordinateSpaceData() async { if let coordinateSpaceData = sharedCoordinateSpace.nextCoordinateSpaceData { // Send my coordinate space data } } // Be notified when participants connect or disconnect from the shared coordinate space func processEventUpdates() async { let participants = [UUID]() for await event in sharedCoordinateSpace.eventUpdates { switch event { // Participants changed case .connectedParticipantIdentifiers(participants: participants): // handle change print("Handle change in participants") case .sharingEnabled: print("sharing enabled") case .sharingDisabled: print("sharing disabled") @unknown default: print("handle future events") } } } // Be notified when able to add shared world anchors func processSharingAvailabilityUpdates() async { for await sharingAvailability in worldTracking.worldAnchorSharingAvailability where sharingAvailability == .available { // Able to add anchor } } // Add shared world anchor func addWorldAnchor(at transform: simd_float4x4) async throws { let anchor = WorldAnchor(originFromAnchorTransform: transform, sharedWithNearbyParticipants: true) try await worldTracking.addAnchor(anchor) } // Process shared anchor updates from local session and from other participants func processWorldTrackingUpdates() async { for await update in worldTracking.anchorUpdates { switch update.event { case .added, .updated, .removed: // Handle anchor updates print("Handle updates to shared world anchors") } } } } -
12:50 - contentCaptureProtected
// Example implementing contentCaptureProtected struct SecretDocumentView: View { var body: some View { VStack { Text("Secrets") .font(.largeTitle) .padding() SensitiveDataView() .contentCaptureProtected() } .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) } } -
16:48 - CameraRegionView
// // InspectorView.swift // import SwiftUI import VisionKit struct InspectorView: View { @Environment(CameraFeedDelivery.self) private var cameraFeedDelivery: CameraFeedDelivery var body: some View { CameraRegionView(isContrastAndVibrancyEnhancementEnabled: true) { result in var pixelBuffer: CVReadOnlyPixelBuffer? switch result { case .success(let value): pixelBuffer = value.pixelBuffer case .failure(let error): reportError("Failure: \(error.localizedDescription)") cameraFeedDelivery.stopFeed() return nil } cameraFeedDelivery.frameUpdate(pixelBuffer: pixelBuffer!) return nil } } } @main struct EnterpriseAssistApp: App { var body: some Scene { WindowGroup { ContentView() } WindowGroup(id: "InspectorView") { InspectorView() } .windowResizability(.contentSize) } } -
21:15 - CameraRegionAnchor
class CameraRegionHandler { let arkitSession = ARKitSession() var cameraRegionProvider: CameraRegionProvider? var cameraRegionAnchor: CameraRegionAnchor? func setUpNewAnchor(anchor: simd_float4x4, width: Float, height: Float) async { let anchor = CameraRegionAnchor(originFromAnchorTransform: anchor, width: width, height: height, cameraEnhancement: .stabilization) guard let cameraRegionProvider = self.cameraRegionProvider else { reportError("Missing CameraRegionProvider") return } do { try await cameraRegionProvider.addAnchor(anchor) } catch { reportError("Error adding anchor: \(error)") } cameraRegionAnchor = anchor Task { let updates = cameraRegionProvider.anchorUpdates(forID: anchor.id) for await update in updates { let pixelBuffer = update.anchor.pixelBuffer // handle pixelBuffer } } } func removeAnchor() async { guard let cameraRegionProvider = self.cameraRegionProvider else { reportError("Missing CameraRegionProvider") return } if let cameraRegionAnchor = self.cameraRegionAnchor { do { try await cameraRegionProvider.removeAnchor(cameraRegionAnchor) } catch { reportError("Error removing anchor: \(error.localizedDescription)") return } self.cameraRegionAnchor = nil } } }
-
-
- 0:04 - Introducción
El año pasado, Apple presentó las API empresariales, y este año hay una gran cantidad de nuevas funcionalidades y mejoras. Estas API, diseñadas para apps internas patentadas, requieren derechos administrados y archivos de licencia. Las actualizaciones se centran en agilizar el desarrollo, mejorar la experiencia del usuario y habilitar nuevas capacidades de visualización del entorno.
- 1:37 - Agilizar el desarrollo
La última versión de visionOS amplía el acceso a la API para mejorar las capacidades para los desarrolladores. Las mejoras clave incluyen una mayor disponibilidad de API, mejoras en el seguimiento de objetos y una administración simplificada de licencias empresariales. Varias API presentadas el año pasado, como las de acceso a cámaras web compatibles con UVC y Neural Engine, ahora están abiertas a todos los desarrolladores sin licencias empresariales. Ahora, para entrenar modelos de seguimiento de objetos directamente desde la línea de comandos, puedes automatizar el proceso e integrarlo en las canalizaciones existentes. Los archivos de licencia ahora son accesibles dentro de la cuenta de Apple Developer, las renovaciones son automáticas y una estructura nueva permite comprobar fácilmente el estado de la licencia y la aprobación de la app para funcionalidades concretas.
- 4:54 - Mejorar la experiencia de usuario
Varias funcionalidades nuevas en visionOS 26 mejoran las experiencias del usuario en apps espaciales. Una de ellas es el modo de seguimiento de ventana, que permite a los usuarios habilitar una ventana para que se muevan mientras navegan por un entorno espacial. Esto es particularmente útil para tareas que requieren referencia frecuente a la información mientras te mueves. Para habilitar este modo, debes solicitar y administrar un derecho de licencia específico. La computación espacial también se mejora para la colaboración. Los espacios de coordenadas compartidos permiten que las personas que están físicamente juntas compartan sus experiencias espaciales. Todos pueden interactuar con el contenido de la app y hablar sobre él como si estuviera físicamente presente. Puedes usar SharePlay para una configuración sencilla u obtener más control, la nueva API de ARKit llamada “SharedCoordinateSpaceProvider”, disponible específicamente para clientes empresariales. Esta API permite que varios participantes alineen sus sistemas de coordenadas y compartan datos a través de un transporte de red local elegido, y así crear un sistema de coordenadas común para anclajes mundiales compartidos. La privacidad y la seguridad de los datos también son de suma importancia, especialmente en apps empresariales que manejan información confidencial. Una nueva API, llamada “contentCaptureProtected”, te permite marcar elementos específicos de interfaz o escenas enteras como protegidos. Luego, el sistema oculta este contenido protegido en cualquier captura de pantalla, grabación, vista reflejada o sesión compartida, lo que garantiza que los datos confidenciales permanezcan visibles solo para el que usa el dispositivo.
- 13:37 - Visualizar el entorno
La última versión de visionOS mejora las capacidades del Apple Vision Pro para unir los mundos físico y digital. Se amplía el sistema de cámaras, lo que proporciona un mayor acceso a las cámaras del dispositivo a través de la API “CameraFrameProvider” de ARKit. Esta capacidad permite que las apps usen las imágenes de la cámara tanto en entornos de espacios envolventes como compartidos. Una nueva funcionalidad permite a las personas ampliar y mejorar áreas específicas de su visión del mundo real. Al usar “CameraRegionView” de VisionKit, los desarrolladores pueden crear ventanas que muestren transmisiones de video dedicadas de regiones seleccionadas y hacer que los detalles críticos sean más claros. Esta funcionalidad es muy útil para profesionales, como técnicos e inspectores, que necesitan monitorear medidores o componentes pequeños en áreas poco iluminadas. Puedes implementar esta funcionalidad con solo unas pocas líneas de código SwiftUI y usando las API “CameraRegionView” y “CameraRegionProvider”. Estas API ofrecen opciones de procesamiento integradas, como mejora del contraste y la vitalidad, y permiten el análisis y la modificación de imágenes personalizadas, lo que proporciona flexibilidad para diversas apps. La funcionalidad de regiones de cámara de ARKit mejora la transmisión en el Apple Vision Pro, que se puede aplicar a áreas específicas definidas por ventanas virtuales llamadas “CameraRegionAnchors”. Puedes crear estos anclajes especificando su posición, orientación y tamaño en el mundo real. ARKit luego proporciona búferes de píxeles estabilizados y mejorados para estas regiones. Esta funcionalidad permite hacer zoom y desplazarse panorámicamente, y ajusta dinámicamente la velocidad de cuadros según el algoritmo de mejora elegido. Asegúrate de tener en cuenta el uso de recursos, ya que las regiones de cámara más grandes afectan la memoria y el procesamiento.
- 24:01 - Próximos pasos
Para los mejores resultados en las apps empresariales del Apple Vision Pro, prioriza la seguridad, respeta la privacidad recopilando solo los datos necesarios, asegúrate de que las apps cumplan con los requisitos de elegibilidad (internas o B2B personalizadas) y solicita solo los derechos necesarios para una funcionalidad específica.