visionOS and SwiftUI
Use the window group and immersive space entities and events to understand user behavior within visionOS apps on Apple's Vision Pro headset.
Track the opening and dismissing of SwiftUI window groups using OpenWindowEvent and DismissWindowEvent. These events can be used in any SwiftUI app, not just visionOS. The event data is sent as a window group entity attached to these events.
Use the OpenImmersiveSpaceEvent and DismissImmersiveSpaceEvent to automatically add an immersive space entity to all events occurring within an immersive space. The entity will identify the immersive space in which the events occurred. This feature is enabled by default for the iOS tracker.
This table shows the support for VisionOS tracking across the main client-side Snowplow tracker SDKs. Snowplow currently only supports visionOS apps via SwiftUI, not Unity.
| Tracker | Supported | Since version | Auto-tracking | Notes |
|---|---|---|---|---|
| Web | ❌ | |||
| iOS | ✅ | 6.0.0 | ✅/❌ | Entities are automatically added |
| Android | ❌ | |||
| React Native | ❌ | |||
| Flutter | ❌ | |||
| Roku | ❌ | |||
| Unity | ❌ | |||
| Google Tag Manager | ❌ |
Available events
The following events track user interactions with SwiftUI windows and visionOS immersive spaces. These events have no properties themselves; the contextual data is captured in the attached entities.
Open window
Tracks when a user opens a SwiftUI window or window group.
open_window
EventProperties and schema
- Table
- JSON schema
This schema has no properties.
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"self": {
"vendor": "com.apple.swiftui",
"name": "open_window",
"format": "jsonschema",
"version": "1-0-0"
},
"description": "Schema for an event for opening a SwiftUI window or window group.",
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_apple_swiftui_open_window_1 open_window_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'open_window'
and events.event_vendor = 'com.apple.swiftui'
select
unstruct_event_com_apple_swiftui_open_window_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'open_window'
and events.event_vendor = 'com.apple.swiftui'
select
unstruct_event_com_apple_swiftui_open_window_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'open_window'
and events.event_vendor = 'com.apple.swiftui'
and unstruct_event_com_apple_swiftui_open_window_1 is not null
select
"open_window_1".*
from
atomic.events events
join atomic.com_apple_swiftui_open_window_1 "open_window_1"
on "open_window_1".root_id = events.event_id and "open_window_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "open_window_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'open_window'
and events.event_vendor = 'com.apple.swiftui'
Dismiss window
Tracks when a user closes or dismisses a SwiftUI window or window group.
dismiss_window
EventProperties and schema
- Table
- JSON schema
This schema has no properties.
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"self": {
"vendor": "com.apple.swiftui",
"name": "dismiss_window",
"format": "jsonschema",
"version": "1-0-0"
},
"description": "Schema for an event for dismissing a SwiftUI window or window group.",
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_apple_swiftui_dismiss_window_1 dismiss_window_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'dismiss_window'
and events.event_vendor = 'com.apple.swiftui'
select
unstruct_event_com_apple_swiftui_dismiss_window_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'dismiss_window'
and events.event_vendor = 'com.apple.swiftui'
select
unstruct_event_com_apple_swiftui_dismiss_window_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'dismiss_window'
and events.event_vendor = 'com.apple.swiftui'
and unstruct_event_com_apple_swiftui_dismiss_window_1 is not null
select
"dismiss_window_1".*
from
atomic.events events
join atomic.com_apple_swiftui_dismiss_window_1 "dismiss_window_1"
on "dismiss_window_1".root_id = events.event_id and "dismiss_window_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "dismiss_window_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'dismiss_window'
and events.event_vendor = 'com.apple.swiftui'
Open immersive space
Tracks when a user enters an immersive space in a visionOS app on Apple Vision Pro.
open_immersive_space
EventProperties and schema
- Table
- JSON schema
This schema has no properties.
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"self": {
"vendor": "com.apple.swiftui",
"name": "open_immersive_space",
"format": "jsonschema",
"version": "1-0-0"
},
"description": "Schema for an event for opening a visionOS immersive space.",
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_apple_swiftui_open_immersive_space_1 open_immersive_space_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'open_immersive_space'
and events.event_vendor = 'com.apple.swiftui'
select
unstruct_event_com_apple_swiftui_open_immersive_space_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'open_immersive_space'
and events.event_vendor = 'com.apple.swiftui'
select
unstruct_event_com_apple_swiftui_open_immersive_space_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'open_immersive_space'
and events.event_vendor = 'com.apple.swiftui'
and unstruct_event_com_apple_swiftui_open_immersive_space_1 is not null
select
"open_immersive_space_1".*
from
atomic.events events
join atomic.com_apple_swiftui_open_immersive_space_1 "open_immersive_space_1"
on "open_immersive_space_1".root_id = events.event_id and "open_immersive_space_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "open_immersive_space_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'open_immersive_space'
and events.event_vendor = 'com.apple.swiftui'
Dismiss immersive space
Tracks when a user exits an immersive space in a visionOS app.
dismiss_immersive_space
EventProperties and schema
- Table
- JSON schema
This schema has no properties.
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"self": {
"vendor": "com.apple.swiftui",
"name": "dismiss_immersive_space",
"format": "jsonschema",
"version": "1-0-0"
},
"description": "Schema for an event for dismissing a visionOS immersive space.",
"type": "object",
"properties": {},
"additionalProperties": false
}
Warehouse query
- Snowflake
- BigQuery
- Databricks
- Redshift & Postgres
select
unstruct_event_com_apple_swiftui_dismiss_immersive_space_1 dismiss_immersive_space_1
from
atomic.events
where
events.collector_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'dismiss_immersive_space'
and events.event_vendor = 'com.apple.swiftui'
select
unstruct_event_com_apple_swiftui_dismiss_immersive_space_1_0_0
from
PIPELINE_NAME.events events
where
events.collector_tstamp > timestamp_sub(current_timestamp(), interval 1 hour)
and events.event = 'unstruct'
and events.event_name = 'dismiss_immersive_space'
and events.event_vendor = 'com.apple.swiftui'
select
unstruct_event_com_apple_swiftui_dismiss_immersive_space_1
from
atomic.events events
where
events.collector_tstamp > timestampadd(HOUR, -1, current_timestamp())
and events.event = 'unstruct'
and events.event_name = 'dismiss_immersive_space'
and events.event_vendor = 'com.apple.swiftui'
and unstruct_event_com_apple_swiftui_dismiss_immersive_space_1 is not null
select
"dismiss_immersive_space_1".*
from
atomic.events events
join atomic.com_apple_swiftui_dismiss_immersive_space_1 "dismiss_immersive_space_1"
on "dismiss_immersive_space_1".root_id = events.event_id and "dismiss_immersive_space_1".root_tstamp = events.collector_tstamp
where
events.collector_tstamp > getdate() - interval '1 hour'
and "dismiss_immersive_space_1".root_tstamp > getdate() - interval '1 hour'
and events.event = 'unstruct'
and events.event_name = 'dismiss_immersive_space'
and events.event_vendor = 'com.apple.swiftui'
Available entities
These entities provide context about the SwiftUI windows and visionOS immersive spaces where events occur.
Window group
Describes a SwiftUI window group, including its identifier, title, and window style. This entity is attached to open and dismiss window events.
window_group
EntityExample
{
"id": "group1",
"window_id": "BC374B59-B8E7-4F09-B100-FD5F9AAC0E27",
"title_key": "window1",
"window_style": "automatic"
}
Properties and schema
- Table
- JSON schema
| Property | Description |
|---|---|
window_idstring | Optional. UUID for the current window within the group. |
idstring | Required. A string that uniquely identifies the window group. Identifiers must be unique among the window groups in your app. |
title_keystring | Optional. A localized string key to use for the window's title in system menus and in the window's title bar. Provide a title that describes the purpose of the window. |
window_stylestring | Optional. A specification for the appearance and interaction of a window. Must be one of: automatic, hiddenTitleBar, plain, titleBar, volumetric, |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"self": {
"vendor": "com.apple.swiftui",
"name": "window_group",
"format": "jsonschema",
"version": "1-0-0"
},
"description": "Schema for a window group entity, representing the SwiftUI window group that the event occurs in.",
"type": "object",
"properties": {
"window_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "UUID for the current window within the group."
},
"id": {
"type": "string",
"description": "A string that uniquely identifies the window group. Identifiers must be unique among the window groups in your app.",
"maxLength": 255
},
"title_key": {
"type": [
"string",
"null"
],
"description": "A localized string key to use for the window's title in system menus and in the window's title bar. Provide a title that describes the purpose of the window.",
"maxLength": 4096
},
"window_style": {
"type": [
"string",
"null"
],
"enum": [
"automatic",
"hiddenTitleBar",
"plain",
"titleBar",
"volumetric",
null
],
"description": "A specification for the appearance and interaction of a window."
}
},
"required": [
"id"
],
"additionalProperties": false
}
Immersive space
Describes a visionOS immersive space, including its immersion style and upper limb visibility settings. This entity is automatically attached to all events that occur within an immersive space.
immersive_space
EntityExample
{
"id": "space1",
"view_id": "C0A92B47-9654-4889-BC95-97E1C3721A53",
"immersion_style": "mixed",
"upper_limb_visibility": "visible"
}
Properties and schema
- Table
- JSON schema
| Property | Description |
|---|---|
view_idstring | Optional. UUID for the view of the immersive space. |
idstring | Required. The identifier of the immersive space to present. |
immersion_stylestring | Optional. The style of an immersive space. Must be one of: automatic, full, mixed, progressive, |
upper_limb_visibilitystring | Optional. Preferred visibility of the user's upper limbs, while an immersive space scene is presented. Must be one of: automatic, visible, hidden, |
{
"$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#",
"self": {
"vendor": "com.apple.swiftui",
"name": "immersive_space",
"format": "jsonschema",
"version": "1-0-0"
},
"description": "Schema for an immersive space entity, representing the VisionOS immersive space that the event occurs in.",
"type": "object",
"properties": {
"view_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "UUID for the view of the immersive space."
},
"id": {
"type": "string",
"description": "The identifier of the immersive space to present.",
"maxLength": 255
},
"immersion_style": {
"type": [
"string",
"null"
],
"enum": [
"automatic",
"full",
"mixed",
"progressive",
null
],
"description": "The style of an immersive space."
},
"upper_limb_visibility": {
"type": [
"string",
"null"
],
"enum": [
"automatic",
"visible",
"hidden",
null
],
"description": "Preferred visibility of the user's upper limbs, while an immersive space scene is presented."
}
},
"required": [
"id"
],
"additionalProperties": false
}