Support for Apple Vision Pro in Unreal ??

Thanks a lot for your reply, I do really appreciate it.

In regards to your questions:

  • Are you on Mac Silicon?: Yes, M1
  • UE5 built from source: Correct. I have downloaded “5.4.1 release” code, compiled it and use the UnrealEditor at Engine/Binaries/Mac. After, I do work with the UE5 (VisionOS) project & Xcode.
  • I strictly follow the tutorial and checked it out up to 3 times.
  • I have enabled Metal Desktop Renderer, disabled Metal Mobile Renderer & enabled Mac Metal Desktop Renderer (SM5, Metal 2.4+, macOS Monterey 12.0 or later). Metal Shader Standard to Target "Metal v2.4 (12.0+).

For more details, I use Xcode 15.4, VisionOS 1.2 (On my post above I wrongly wrote VisionOS 1.1), UE 5.4.1 and Sonoma 14.5.

I have even try to disable the hand tracking (//ar_data_providers_add_data_provider(ARKitDataProviders, ARKitHandTrackingProvider)), however I still getting the same outcome when clicking the app button:

**[UE] Fatal error: [File:./Runtime/Apple/MetalRHI/Private/MetalRHI.cpp] [Line: 249]**

**This device does not supports the Apple A8x or above feature set which is the minimum for this build. Please check the Support Apple A8 checkbox in the IOS Project Settings.**

Any other ideas?

Is your project folder are in the root of your UE5 directory ?

I will copy you my project setting to let you try with it.

Wow, quick reply. Thanks!

Correct. It is inside the folder: ./UnrealEngine-5.4.1-release/MyProject

I would appreciate so I could see the differences. If any other idea pop up, just let me know :slight_smile:

Do you bluid your Package from your Engine or from Xcode ? ( I personally build from the engine )

I will check my parameters in Xcode project too.

Here are my project settings.

DefaultEngine.ini

[/Script/EngineSettings.GameMapsSettings]
GlobalDefaultGameMode=/Game/Ængine/Core/Debug/GM_Æ_Debug.GM_Æ_Debug_C
EditorStartupMap=/Game/FingerShooter/Worlds/Levels/Saloon/Map_Saloon.Map_Saloon
GameDefaultMap=/Game/FingerShooter/Worlds/Levels/Saloon/Map_Saloon.Map_Saloon

[/Script/Engine.RendererSettings]
r.Mobile.ShadingPath=1
r.Mobile.AllowDeferredShadingOpenGL=False
r.Mobile.SupportGPUScene=False
r.Mobile.AntiAliasing=0
r.Mobile.FloatPrecisionMode=0
r.Mobile.AllowDitheredLODTransition=False
r.Mobile.VirtualTextures=False
r.DiscardUnusedQuality=False
r.AllowOcclusionQueries=True
r.MinScreenRadiusForLights=0.030000
r.MinScreenRadiusForDepthPrepass=0.030000
r.MinScreenRadiusForCSMDepth=0.010000
r.PrecomputedVisibilityWarning=False
r.TextureStreaming=True
Compat.UseDXT5NormalMaps=False
r.VirtualTextures=False
r.VT.EnableAutoImport=True
r.VirtualTexturedLightmaps=False
r.VT.AnisotropicFiltering=False
bEnableVirtualTextureOpacityMask=False
r.VT.TileSize=128
r.VT.TileBorderSize=4
r.vt.FeedbackFactor=16
WorkingColorSpaceChoice=sRGB
RedChromaticityCoordinate=(X=0.640000,Y=0.330000)
GreenChromaticityCoordinate=(X=0.300000,Y=0.600000)
BlueChromaticityCoordinate=(X=0.150000,Y=0.060000)
WhiteChromaticityCoordinate=(X=0.312700,Y=0.329000)
r.ClearCoatNormal=False
r.DynamicGlobalIlluminationMethod=1
r.ReflectionMethod=1
r.ReflectionCaptureResolution=128
r.ReflectionEnvironmentLightmapMixBasedOnRoughness=True
r.Lumen.HardwareRayTracing=False
r.Lumen.HardwareRayTracing.LightingMode=0
r.Lumen.TranslucencyReflections.FrontLayer.EnableForProject=False
r.Lumen.TraceMeshSDFs=1
r.Lumen.Reflections.HardwareRayTracing.Translucent.Refraction.EnableForProject=True
r.Shadow.Virtual.Enable=1
r.RayTracing=False
r.RayTracing.Shadows=False
r.RayTracing.UseTextureLod=False
r.PathTracing=True
r.GenerateMeshDistanceFields=True
r.DistanceFields.DefaultVoxelDensity=0.200000
r.Nanite.ProjectEnabled=True
r.AllowStaticLighting=True
r.NormalMapsForStaticLighting=False
r.ForwardShading=False
r.VertexFoggingForOpaque=True
r.SeparateTranslucency=True
r.TranslucentSortPolicy=0
TranslucentSortAxis=(X=0.000000,Y=-1.000000,Z=0.000000)
r.LocalFogVolume.ApplyOnTranslucent=False
xr.VRS.FoveationLevel=0
xr.VRS.DynamicFoveation=False
r.CustomDepth=1
r.CustomDepthTemporalAAJitter=True
r.PostProcessing.PropagateAlpha=0
r.DefaultFeature.Bloom=True
r.DefaultFeature.AmbientOcclusion=True
r.DefaultFeature.AmbientOcclusionStaticFraction=False
r.DefaultFeature.AutoExposure=False
r.DefaultFeature.AutoExposure.Method=0
r.DefaultFeature.AutoExposure.Bias=1.000000
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.DefaultFeature.LocalExposure.HighlightContrastScale=0.800000
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.800000
r.DefaultFeature.MotionBlur=False
r.DefaultFeature.LensFlare=False
r.TemporalAA.Upsampling=True
r.AntiAliasingMethod=0
r.MSAACount=4
r.DefaultFeature.LightUnits=1
r.DefaultBackBufferPixelFormat=4
r.ScreenPercentage.Default=100.000000
r.ScreenPercentage.Default.Desktop.Mode=1
r.ScreenPercentage.Default.Mobile.Mode=0
r.ScreenPercentage.Default.VR.Mode=0
r.ScreenPercentage.Default.PathTracer.Mode=0
r.Shadow.UnbuiltPreviewInGame=True
r.StencilForLODDither=False
r.EarlyZPass=3
r.EarlyZPassOnlyMaterialMasking=False
r.Shadow.CSMCaching=False
r.DBuffer=True
r.ClearSceneMethod=1
r.VelocityOutputPass=0
r.Velocity.EnableVertexDeformation=2
r.SelectiveBasePassOutputs=False
bDefaultParticleCutouts=False
fx.GPUSimulationTextureSizeX=1024
fx.GPUSimulationTextureSizeY=1024
r.AllowGlobalClipPlane=False
r.GBufferFormat=1
r.MorphTarget.Mode=True
r.MorphTarget.MaxBlendWeight=5.000000
r.SupportSkyAtmosphere=True
r.SupportSkyAtmosphereAffectsHeightFog=True
r.SupportLocalFogVolumes=True
r.SupportCloudShadowOnForwardLitTranslucent=False
r.LightFunctionAtlas.Format=0
r.VolumetricFog.LightFunction=True
r.Deferred.UsesLightFunctionAtlas=False
r.SingleLayerWater.UsesLightFunctionAtlas=False
r.Translucent.UsesLightFunctionAtlas=False
r.Translucent.UsesIESProfiles=False
r.Translucent.UsesRectLights=False
r.GPUCrashDebugging=False
vr.InstancedStereo=False
r.MobileHDR=True
vr.MobileMultiView=False
r.Mobile.UseHWsRGBEncoding=True
vr.RoundRobinOcclusion=False
r.MeshStreaming=False
r.HeterogeneousVolumes=True
r.HeterogeneousVolumes.Shadows=False
r.Translucency.HeterogeneousVolumes=False
r.WireframeCullThreshold=5.000000
r.SupportStationarySkylight=True
r.SupportLowQualityLightmaps=True
r.SupportPointLightWholeSceneShadows=True
r.Shadow.TranslucentPerObject.ProjectEnabled=False
r.Water.SingleLayerWater.SupportCloudShadow=False
r.Substrate=False
r.Substrate.OpaqueMaterialRoughRefraction=False
r.Substrate.Debug.AdvancedVisualizationShaders=False
r.Material.RoughDiffuse=False
r.Material.EnergyConservation=False
r.OIT.SortedPixels=False
r.HairStrands.LODMode=True
r.SkinCache.CompileShaders=False
r.SkinCache.SkipCompilingGPUSkinVF=False
r.SkinCache.DefaultBehavior=1
r.SkinCache.SceneMemoryLimitInMB=128.000000
r.Mobile.EnableStaticAndCSMShadowReceivers=True
r.Mobile.EnableMovableLightCSMShaderCulling=True
r.Mobile.Forward.EnableLocalLights=1
r.Mobile.Forward.EnableClusteredReflections=False
r.Mobile.EnableNoPrecomputedLightingCSMShader=False
r.Mobile.AllowDistanceFieldShadows=True
r.Mobile.AllowMovableDirectionalLights=True
r.Mobile.EnableMovableSpotlightsShadow=False
r.GPUSkin.Support16BitBoneIndex=False
r.GPUSkin.Limit2BoneInfluences=False
r.SupportDepthOnlyIndexBuffers=True
r.SupportReversedIndexBuffers=True
r.Mobile.AmbientOcclusion=False
r.Mobile.DBuffer=False
r.GPUSkin.UnlimitedBoneInfluences=False
r.GPUSkin.AlwaysUseDeformerForUnlimitedBoneInfluences=False
r.GPUSkin.UnlimitedBoneInfluencesThreshold=8
DefaultBoneInfluenceLimit=(Default=0,PerPlatform=())
MaxSkinBones=(Default=65536,PerPlatform=((“Mobile”, 256)))
r.Mobile.PlanarReflectionMode=0
r.Mobile.SupportsGen4TAA=True
bStreamSkeletalMeshLODs=(Default=False,PerPlatform=())
bDiscardSkeletalMeshOptionalLODs=(Default=False,PerPlatform=())
VisualizeCalibrationColorMaterialPath=/Engine/EngineMaterials/PPM_DefaultCalibrationColor.PPM_DefaultCalibrationColor
VisualizeCalibrationCustomMaterialPath=None
VisualizeCalibrationGrayscaleMaterialPath=/Engine/EngineMaterials/PPM_DefaultCalibrationGrayscale.PPM_DefaultCalibrationGrayscale

[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
bBuildForES31=False
ExtraApplicationSettings=
bPackageForMetaQuest=True

[/Script/WindowsTargetPlatform.WindowsTargetSettings]
DefaultGraphicsRHI=DefaultGraphicsRHI_Default
-D3D12TargetedShaderFormats=PCD3D_SM5
+D3D12TargetedShaderFormats=PCD3D_SM6
-D3D11TargetedShaderFormats=PCD3D_SM5
+D3D11TargetedShaderFormats=PCD3D_SM5
Compiler=Default
AudioSampleRate=48000
AudioCallbackBufferFrameSize=1024
AudioNumBuffersToEnqueue=1
AudioMaxChannels=0
AudioNumSourceWorkers=4
SpatializationPlugin=
SourceDataOverridePlugin=
ReverbPlugin=
OcclusionPlugin=
CompressionOverrides=(bOverrideCompressionTimes=False,DurationThreshold=5.000000,MaxNumRandomBranches=0,SoundCueQualityIndex=0)
CacheSizeKB=65536
MaxChunkSizeOverrideKB=0
bResampleForDevice=False
MaxSampleRate=48000.000000
HighSampleRate=32000.000000
MedSampleRate=24000.000000
LowSampleRate=12000.000000
MinSampleRate=8000.000000
CompressionQualityModifier=1.000000
AutoStreamingThreshold=0.000000
SoundCueCookQualityIndex=-1

[/Script/NavigationSystem.NavigationSystemV1]
bAllowClientSideNavigation=True

[/Script/LinuxTargetPlatform.LinuxTargetSettings]
-TargetedRHIs=SF_VULKAN_SM5
+TargetedRHIs=SF_VULKAN_SM6

[/Script/Engine.Engine]
+ActiveGameNameRedirects=(OldGameName=“TP_VirtualRealityBP”,NewGameName=“/Script/VisionProto”)
+ActiveGameNameRedirects=(OldGameName=“/Script/TP_VirtualRealityBP”,NewGameName=“/Script/VisionProto”)

[/Script/Engine.Engine]
+ActiveGameNameRedirects=(OldGameName=“TP_SIM_BlankBP”,NewGameName=“/Script/AEngine”)
+ActiveGameNameRedirects=(OldGameName=“/Script/TP_SIM_BlankBP”,NewGameName=“/Script/AEngine”)
bUseFixedFrameRate=True
FixedFrameRate=90.000000

[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
bEnablePlugin=True
bAllowNetworkConnection=True
SecurityToken=804F43B12B4A6BE1CB15BCBB0B195C45
bIncludeInShipping=False
bAllowExternalStartInShipping=False
bCompileAFSProject=False
bUseCompression=False
bLogFiles=False
bReportStats=False
ConnectionType=USBOnly
bUseManualIPAddress=False
ManualIPAddress=

[/Script/IOSRuntimeSettings.IOSRuntimeSettings]
bSupportsMetal=False
bSupportsMetalMRT=True
AdditionalPlistData=NSHandsTrackingUsageDescriptionHand UsageNSMicrophoneUsageDescriptionMic Needed NSWorldSensingUsageDescriptionWorld Sensing

[/Script/MacTargetPlatform.XcodeProjectSettings]
BundleIdentifier=com.pab.eras
CodeSigningPrefix=
CodeSigningTeam=YJEPDY547Z

[/Script/Engine.CollisionProfile]
-Profiles=(Name=“NoCollision”,CollisionEnabled=NoCollision,ObjectTypeName=“WorldStatic”,CustomResponses=((Channel=“Visibility”,Response=ECR_Ignore),(Channel=“Camera”,Response=ECR_Ignore)),HelpMessage=“No collision”,bCanModify=False)
-Profiles=(Name=“BlockAll”,CollisionEnabled=QueryAndPhysics,ObjectTypeName=“WorldStatic”,CustomResponses=,HelpMessage="WorldStatic object that blocks all actors by default. All new custom channels will use its own default response. ",bCanModify=False)
-Profiles=(Name=“OverlapAll”,CollisionEnabled=QueryOnly,ObjectTypeName=“WorldStatic”,CustomResponses=((Channel=“WorldStatic”,Response=ECR_Overlap),(Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Visibility”,Response=ECR_Overlap),(Channel=“WorldDynamic”,Response=ECR_Overlap),(Channel=“Camera”,Response=ECR_Overlap),(Channel=“PhysicsBody”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Destructible”,Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False)
-Profiles=(Name=“BlockAllDynamic”,CollisionEnabled=QueryAndPhysics,ObjectTypeName=“WorldDynamic”,CustomResponses=,HelpMessage="WorldDynamic object that blocks all actors by default. All new custom channels will use its own default response. ",bCanModify=False)
-Profiles=(Name=“OverlapAllDynamic”,CollisionEnabled=QueryOnly,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“WorldStatic”,Response=ECR_Overlap),(Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Visibility”,Response=ECR_Overlap),(Channel=“WorldDynamic”,Response=ECR_Overlap),(Channel=“Camera”,Response=ECR_Overlap),(Channel=“PhysicsBody”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Destructible”,Response=ECR_Overlap)),HelpMessage="WorldDynamic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False)
-Profiles=(Name=“IgnoreOnlyPawn”,CollisionEnabled=QueryOnly,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“Pawn”,Response=ECR_Ignore),(Channel=“Vehicle”,Response=ECR_Ignore)),HelpMessage=“WorldDynamic object that ignores Pawn and Vehicle. All other channels will be set to default.”,bCanModify=False)
-Profiles=(Name=“OverlapOnlyPawn”,CollisionEnabled=QueryOnly,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Camera”,Response=ECR_Ignore)),HelpMessage="WorldDynamic object that overlaps Pawn, Camera, and Vehicle. All other channels will be set to default. ",bCanModify=False)
-Profiles=(Name=“Pawn”,CollisionEnabled=QueryAndPhysics,ObjectTypeName=“Pawn”,CustomResponses=((Channel=“Visibility”,Response=ECR_Ignore)),HelpMessage="Pawn object. Can be used for capsule of any playerable character or AI. ",bCanModify=False)
-Profiles=(Name=“Spectator”,CollisionEnabled=QueryOnly,ObjectTypeName=“Pawn”,CustomResponses=((Channel=“WorldStatic”,Response=ECR_Block),(Channel=“Pawn”,Response=ECR_Ignore),(Channel=“Visibility”,Response=ECR_Ignore),(Channel=“WorldDynamic”,Response=ECR_Ignore),(Channel=“Camera”,Response=ECR_Ignore),(Channel=“PhysicsBody”,Response=ECR_Ignore),(Channel=“Vehicle”,Response=ECR_Ignore),(Channel=“Destructible”,Response=ECR_Ignore)),HelpMessage=“Pawn object that ignores all other actors except WorldStatic.”,bCanModify=False)
-Profiles=(Name=“CharacterMesh”,CollisionEnabled=QueryOnly,ObjectTypeName=“Pawn”,CustomResponses=((Channel=“Pawn”,Response=ECR_Ignore),(Channel=“Vehicle”,Response=ECR_Ignore),(Channel=“Visibility”,Response=ECR_Ignore)),HelpMessage=“Pawn object that is used for Character Mesh. All other channels will be set to default.”,bCanModify=False)
-Profiles=(Name=“PhysicsActor”,CollisionEnabled=QueryAndPhysics,ObjectTypeName=“PhysicsBody”,CustomResponses=,HelpMessage=“Simulating actors”,bCanModify=False)
-Profiles=(Name=“Destructible”,CollisionEnabled=QueryAndPhysics,ObjectTypeName=“Destructible”,CustomResponses=,HelpMessage=“Destructible actors”,bCanModify=False)
-Profiles=(Name=“InvisibleWall”,CollisionEnabled=QueryAndPhysics,ObjectTypeName=“WorldStatic”,CustomResponses=((Channel=“Visibility”,Response=ECR_Ignore)),HelpMessage=“WorldStatic object that is invisible.”,bCanModify=False)
-Profiles=(Name=“InvisibleWallDynamic”,CollisionEnabled=QueryAndPhysics,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“Visibility”,Response=ECR_Ignore)),HelpMessage=“WorldDynamic object that is invisible.”,bCanModify=False)
-Profiles=(Name=“Trigger”,CollisionEnabled=QueryOnly,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“WorldStatic”,Response=ECR_Overlap),(Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Visibility”,Response=ECR_Ignore),(Channel=“WorldDynamic”,Response=ECR_Overlap),(Channel=“Camera”,Response=ECR_Overlap),(Channel=“PhysicsBody”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Destructible”,Response=ECR_Overlap)),HelpMessage=“WorldDynamic object that is used for trigger. All other channels will be set to default.”,bCanModify=False)
-Profiles=(Name=“Ragdoll”,CollisionEnabled=QueryAndPhysics,ObjectTypeName=“PhysicsBody”,CustomResponses=((Channel=“Pawn”,Response=ECR_Ignore),(Channel=“Visibility”,Response=ECR_Ignore)),HelpMessage=“Simulating Skeletal Mesh Component. All other channels will be set to default.”,bCanModify=False)
-Profiles=(Name=“Vehicle”,CollisionEnabled=QueryAndPhysics,ObjectTypeName=“Vehicle”,CustomResponses=,HelpMessage=“Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.”,bCanModify=False)
-Profiles=(Name=“UI”,CollisionEnabled=QueryOnly,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“WorldStatic”,Response=ECR_Overlap),(Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Visibility”,Response=ECR_Block),(Channel=“WorldDynamic”,Response=ECR_Overlap),(Channel=“Camera”,Response=ECR_Overlap),(Channel=“PhysicsBody”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Destructible”,Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False)
+Profiles=(Name=“NoCollision”,CollisionEnabled=NoCollision,bCanModify=False,ObjectTypeName=“WorldStatic”,CustomResponses=((Channel=“Visibility”,Response=ECR_Ignore),(Channel=“Camera”,Response=ECR_Ignore)),HelpMessage=“No collision”)
+Profiles=(Name=“BlockAll”,CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName=“WorldStatic”,CustomResponses=,HelpMessage="WorldStatic object that blocks all actors by default. All new custom channels will use its own default response. ")
+Profiles=(Name=“OverlapAll”,CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName=“WorldStatic”,CustomResponses=((Channel=“WorldStatic”,Response=ECR_Overlap),(Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Visibility”,Response=ECR_Overlap),(Channel=“WorldDynamic”,Response=ECR_Overlap),(Channel=“Camera”,Response=ECR_Overlap),(Channel=“PhysicsBody”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Destructible”,Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ")
+Profiles=(Name=“BlockAllDynamic”,CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName=“WorldDynamic”,CustomResponses=,HelpMessage="WorldDynamic object that blocks all actors by default. All new custom channels will use its own default response. ")
+Profiles=(Name=“OverlapAllDynamic”,CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“WorldStatic”,Response=ECR_Overlap),(Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Visibility”,Response=ECR_Overlap),(Channel=“WorldDynamic”,Response=ECR_Overlap),(Channel=“Camera”,Response=ECR_Overlap),(Channel=“PhysicsBody”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Destructible”,Response=ECR_Overlap)),HelpMessage="WorldDynamic object that overlaps all actors by default. All new custom channels will use its own default response. ")
+Profiles=(Name=“IgnoreOnlyPawn”,CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“Pawn”,Response=ECR_Ignore),(Channel=“Vehicle”,Response=ECR_Ignore)),HelpMessage=“WorldDynamic object that ignores Pawn and Vehicle. All other channels will be set to default.”)
+Profiles=(Name=“OverlapOnlyPawn”,CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Camera”,Response=ECR_Ignore)),HelpMessage="WorldDynamic object that overlaps Pawn, Camera, and Vehicle. All other channels will be set to default. ")
+Profiles=(Name=“Pawn”,CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName=“Pawn”,CustomResponses=((Channel=“Visibility”,Response=ECR_Ignore)),HelpMessage="Pawn object. Can be used for capsule of any playerable character or AI. ")
+Profiles=(Name=“Spectator”,CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName=“Pawn”,CustomResponses=((Channel=“WorldStatic”),(Channel=“Pawn”,Response=ECR_Ignore),(Channel=“Visibility”,Response=ECR_Ignore),(Channel=“WorldDynamic”,Response=ECR_Ignore),(Channel=“Camera”,Response=ECR_Ignore),(Channel=“PhysicsBody”,Response=ECR_Ignore),(Channel=“Vehicle”,Response=ECR_Ignore),(Channel=“Destructible”,Response=ECR_Ignore)),HelpMessage=“Pawn object that ignores all other actors except WorldStatic.”)
+Profiles=(Name=“CharacterMesh”,CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName=“Pawn”,CustomResponses=((Channel=“Pawn”,Response=ECR_Ignore),(Channel=“Vehicle”,Response=ECR_Ignore),(Channel=“Visibility”,Response=ECR_Ignore)),HelpMessage=“Pawn object that is used for Character Mesh. All other channels will be set to default.”)
+Profiles=(Name=“PhysicsActor”,CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName=“PhysicsBody”,CustomResponses=,HelpMessage=“Simulating actors”)
+Profiles=(Name=“Destructible”,CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName=“Destructible”,CustomResponses=,HelpMessage=“Destructible actors”)
+Profiles=(Name=“InvisibleWall”,CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName=“WorldStatic”,CustomResponses=((Channel=“Visibility”,Response=ECR_Ignore)),HelpMessage=“WorldStatic object that is invisible.”)
+Profiles=(Name=“InvisibleWallDynamic”,CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“Visibility”,Response=ECR_Ignore)),HelpMessage=“WorldDynamic object that is invisible.”)
+Profiles=(Name=“Trigger”,CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“WorldStatic”,Response=ECR_Overlap),(Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Visibility”,Response=ECR_Ignore),(Channel=“WorldDynamic”,Response=ECR_Overlap),(Channel=“Camera”,Response=ECR_Overlap),(Channel=“PhysicsBody”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Destructible”,Response=ECR_Overlap)),HelpMessage=“WorldDynamic object that is used for trigger. All other channels will be set to default.”)
+Profiles=(Name=“Ragdoll”,CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName=“PhysicsBody”,CustomResponses=((Channel=“Pawn”,Response=ECR_Ignore),(Channel=“Visibility”,Response=ECR_Ignore)),HelpMessage=“Simulating Skeletal Mesh Component. All other channels will be set to default.”)
+Profiles=(Name=“Vehicle”,CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName=“Vehicle”,CustomResponses=,HelpMessage=“Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.”)
+Profiles=(Name=“UI”,CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName=“WorldDynamic”,CustomResponses=((Channel=“WorldStatic”,Response=ECR_Overlap),(Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Visibility”),(Channel=“WorldDynamic”,Response=ECR_Overlap),(Channel=“Camera”,Response=ECR_Overlap),(Channel=“PhysicsBody”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Destructible”,Response=ECR_Overlap)),HelpMessage=“WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. “)
+Profiles=(Name=“WaterBodyCollision”,CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName=””,CustomResponses=((Channel=“WorldDynamic”,Response=ECR_Overlap),(Channel=“Pawn”,Response=ECR_Overlap),(Channel=“Visibility”,Response=ECR_Ignore),(Channel=“Camera”,Response=ECR_Ignore),(Channel=“PhysicsBody”,Response=ECR_Overlap),(Channel=“Vehicle”,Response=ECR_Overlap),(Channel=“Destructible”,Response=ECR_Overlap)),HelpMessage=“Default Water Collision Profile (Created by Water Plugin)”)
+Profiles=(Name=“Pawn_RIG”,CollisionEnabled=QueryAndPhysics,bCanModify=True,ObjectTypeName=“Pawn_RIG”,CustomResponses=((Channel=“Visibility”,Response=ECR_Ignore),(Channel=“Camera”,Response=ECR_Ignore),(Channel=“PhysicsBody”,Response=ECR_Ignore),(Channel=“Pawn_RIG”,Response=ECR_Ignore)),HelpMessage=“Needs description”)
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=False,Name=“Pawn_RIG”)
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel2,Name=“Projectile”,DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=False)
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel3,Name=“Penetrator”,DefaultResponse=ECR_Overlap,bTraceType=False,bStaticObject=False)
-ProfileRedirects=(OldName=“BlockingVolume”,NewName=“InvisibleWall”)
-ProfileRedirects=(OldName=“InterpActor”,NewName=“IgnoreOnlyPawn”)
-ProfileRedirects=(OldName=“StaticMeshComponent”,NewName=“BlockAllDynamic”)
-ProfileRedirects=(OldName=“SkeletalMeshActor”,NewName=“PhysicsActor”)
-ProfileRedirects=(OldName=“InvisibleActor”,NewName=“InvisibleWallDynamic”)
+ProfileRedirects=(OldName=“BlockingVolume”,NewName=“InvisibleWall”)
+ProfileRedirects=(OldName=“InterpActor”,NewName=“IgnoreOnlyPawn”)
+ProfileRedirects=(OldName=“StaticMeshComponent”,NewName=“BlockAllDynamic”)
+ProfileRedirects=(OldName=“SkeletalMeshActor”,NewName=“PhysicsActor”)
+ProfileRedirects=(OldName=“InvisibleActor”,NewName=“InvisibleWallDynamic”)
-CollisionChannelRedirects=(OldName=“Static”,NewName=“WorldStatic”)
-CollisionChannelRedirects=(OldName=“Dynamic”,NewName=“WorldDynamic”)
-CollisionChannelRedirects=(OldName=“VehicleMovement”,NewName=“Vehicle”)
-CollisionChannelRedirects=(OldName=“PawnMovement”,NewName=“Pawn”)
+CollisionChannelRedirects=(OldName=“Static”,NewName=“WorldStatic”)
+CollisionChannelRedirects=(OldName=“Dynamic”,NewName=“WorldDynamic”)
+CollisionChannelRedirects=(OldName=“VehicleMovement”,NewName=“Vehicle”)
+CollisionChannelRedirects=(OldName=“PawnMovement”,NewName=“Pawn”)

[/Script/Engine.PhysicsSettings]
bTickPhysicsAsync=False
bSubstepping=True
+PhysicalSurfaces=(Type=SurfaceType1,Name=“Asphalt”)
+PhysicalSurfaces=(Type=SurfaceType2,Name=“Concrete”)
+PhysicalSurfaces=(Type=SurfaceType3,Name=“Dirt”)
+PhysicalSurfaces=(Type=SurfaceType4,Name=“Mud”)
+PhysicalSurfaces=(Type=SurfaceType5,Name=“Water”)
+PhysicalSurfaces=(Type=SurfaceType6,Name=“Wood”)
+PhysicalSurfaces=(Type=SurfaceType7,Name=“Glass”)
+PhysicalSurfaces=(Type=SurfaceType8,Name=“Flesh”)
+PhysicalSurfaces=(Type=SurfaceType9,Name=“Grass”)
+PhysicalSurfaces=(Type=SurfaceType10,Name=“Fabric”)
+PhysicalSurfaces=(Type=SurfaceType11,Name=“Plastic”)
+PhysicalSurfaces=(Type=SurfaceType12,Name=“Vegetation”)
+PhysicalSurfaces=(Type=SurfaceType13,Name=“Electrical”)
+PhysicalSurfaces=(Type=SurfaceType14,Name=“Rubber”)
+PhysicalSurfaces=(Type=SurfaceType15,Name=“MetalDull”)
+PhysicalSurfaces=(Type=SurfaceType16,Name=“Metal”)
+PhysicalSurfaces=(Type=SurfaceType17,Name=“Rock”)
+PhysicalSurfaces=(Type=SurfaceType18,Name=“Gravel”)
+PhysicalSurfaces=(Type=SurfaceType19,Name=“Ceramic”)
+PhysicalSurfaces=(Type=SurfaceType20,Name=“CarbonFibre”)
+PhysicalSurfaces=(Type=SurfaceType21,Name=“Paper”)
+PhysicalSurfaces=(Type=SurfaceType22,Name=“EnergyShield”)
+PhysicalSurfaces=(Type=SurfaceType23,Name=“Brick”)
+PhysicalSurfaces=(Type=SurfaceType24,Name=“Snow”)
+PhysicalSurfaces=(Type=SurfaceType25,Name=“Ice”)
+PhysicalSurfaces=(Type=SurfaceType26,Name=“Limestone”)
+PhysicalSurfaces=(Type=SurfaceType27,Name=“Powder”)
+PhysicalSurfaces=(Type=SurfaceType28,Name=“Sand”)
+PhysicalSurfaces=(Type=SurfaceType29,Name=“Soil”)
+PhysicalSurfaces=(Type=SurfaceType30,Name=“Oil”)
+PhysicalSurfaces=(Type=SurfaceType31,Name=“Lava”)
+PhysicalSurfaces=(Type=SurfaceType32,Name=“Polystyrene”)
+PhysicalSurfaces=(Type=SurfaceType33,Name=“Dirt2”)
+PhysicalSurfaces=(Type=SurfaceType34,Name=“Leather”)
+PhysicalSurfaces=(Type=SurfaceType35,Name=“Bark”)
+PhysicalSurfaces=(Type=SurfaceType36,Name=“Acid”)

[/Script/HardwareTargeting.HardwareTargetingSettings]
TargetedHardwareClass=Desktop
AppliedTargetedHardwareClass=Desktop
DefaultGraphicsPerformance=Scalable
AppliedDefaultGraphicsPerformance=Scalable

[SystemSettings]
vr.PixelDensity=1
r.SeparateTranslucency=0
r.HZBOcclusion=0
r.MotionBlurQuality=0
r.PostProcessAAQuality=3
r.BloomQuality=1
r.EyeAdaptationQuality=0
r.AmbientOcclusionLevels=0
r.SSR.Quality=1
r.DepthOfFieldQuality=0
r.SceneColorFormat=2
r.TranslucencyVolumeBlur=0
r.TranslucencyLightingVolumeDim=4
r.MaxAnisotropy=8
r.LensFlareQuality=0
r.SceneColorFringeQuality=0
r.FastBlurThreshold=0
r.SSR.MaxRoughness=0.1
r.rhicmdbypass=0
sg.EffectsQuality=2
sg.PostProcessQuality=0

DefaultGame.ini

[/Script/EngineSettings.GeneralProjectSettings]
ProjectID=19121DCC8D435C338573D8B789B468AE
bStartInVR=True

[/Script/UnrealEd.ProjectPackagingSettings]
Build=IfProjectHasCode
BuildConfiguration=PPBC_Development
BuildTarget=
FullRebuild=False
ForDistribution=False
IncludeDebugFiles=False
BlueprintNativizationMethod=Disabled
bIncludeNativizedAssetsInProjectGeneration=False
bExcludeMonolithicEngineHeadersInNativizedCode=False
UsePakFile=True
bUseIoStore=True
bUseZenStore=False
bMakeBinaryConfig=False
bGenerateChunks=False
bGenerateNoChunks=False
bChunkHardReferencesOnly=False
bForceOneChunkPerFile=False
MaxChunkSize=0
bBuildHttpChunkInstallData=False
HttpChunkInstallDataDirectory=(Path=“”)
WriteBackMetadataToAssetRegistry=Disabled
bWritePluginSizeSummaryJsons=False
bCompressed=True
PackageCompressionFormat=Oodle
bForceUseProjectCompressionFormatIgnoreHardwareOverride=False
PackageAdditionalCompressionOptions=
PackageCompressionMethod=Kraken
PackageCompressionLevel_DebugDevelopment=4
PackageCompressionLevel_TestShipping=4
PackageCompressionLevel_Distribution=7
PackageCompressionMinBytesSaved=1024
PackageCompressionMinPercentSaved=5
bPackageCompressionEnableDDC=False
PackageCompressionMinSizeToConsiderDDC=0
HttpChunkInstallDataVersion=
IncludePrerequisites=True
IncludeAppLocalPrerequisites=False
bShareMaterialShaderCode=True
bDeterministicShaderCodeOrder=False
bSharedMaterialNativeLibraries=True
ApplocalPrerequisitesDirectory=(Path=“”)
IncludeCrashReporter=False
InternationalizationPreset=English
-CulturesToStage=en
+CulturesToStage=en
LocalizationTargetCatchAllChunkId=0
bCookAll=False
bCookMapsOnly=True
bSkipEditorContent=False
bSkipMovies=False
-IniKeyDenylist=KeyStorePassword
-IniKeyDenylist=KeyPassword
-IniKeyDenylist=rsa.privateexp
-IniKeyDenylist=rsa.modulus
-IniKeyDenylist=rsa.publicexp
-IniKeyDenylist=aes.key
-IniKeyDenylist=SigningPublicExponent
-IniKeyDenylist=SigningModulus
-IniKeyDenylist=SigningPrivateExponent
-IniKeyDenylist=EncryptionKey
-IniKeyDenylist=DevCenterUsername
-IniKeyDenylist=DevCenterPassword
-IniKeyDenylist=IOSTeamID
-IniKeyDenylist=SigningCertificate
-IniKeyDenylist=MobileProvision
-IniKeyDenylist=IniKeyDenylist
-IniKeyDenylist=IniSectionDenylist
+IniKeyDenylist=KeyStorePassword
+IniKeyDenylist=KeyPassword
+IniKeyDenylist=rsa.privateexp
+IniKeyDenylist=rsa.modulus
+IniKeyDenylist=rsa.publicexp
+IniKeyDenylist=aes.key
+IniKeyDenylist=SigningPublicExponent
+IniKeyDenylist=SigningModulus
+IniKeyDenylist=SigningPrivateExponent
+IniKeyDenylist=EncryptionKey
+IniKeyDenylist=DevCenterUsername
+IniKeyDenylist=DevCenterPassword
+IniKeyDenylist=IOSTeamID
+IniKeyDenylist=SigningCertificate
+IniKeyDenylist=MobileProvision
+IniKeyDenylist=IniKeyDenylist
+IniKeyDenylist=IniSectionDenylist
-IniSectionDenylist=HordeStorageServers
-IniSectionDenylist=StorageServers
+IniSectionDenylist=HordeStorageServers
+IniSectionDenylist=StorageServers
+MapsToCook=(FilePath=“/Game/PhysicalWorld/Worlds/Map_PhysicalWorld”)
bRetainStagedDirectory=False
CustomStageCopyHandler=

You are welcome, another thing to see, is your Xcode project.

Navigate to YourProjectFolder/Intermediate/ProjectFiles → Open YourProject_VisionOS_VisionProto.xcworkspace

Then In your Xcode workspace go to your folder Game/Xcconfifs → YourProject and compare with mine

YourProject.xcconfig

include? “/Volumes/PABSSD/UnrealEngine-5.4/VisionProto/Intermediate/Build/Versions.xcconfig”

// Unreal project-wide variables

UE_XCODE_BUILD_MODE = Default

UE_PRODUCT_NAME = VisionProto

UE_PRODUCT_NAME_STRIPPED = VisionProto

UE_DISPLAY_NAME = $(UE_PRODUCT_NAME)

UE_SIGNING_PREFIX =

UE_PLATFORM_NAME = VisionOS

UE_TARGET_NAME = VisionProto

UE_TARGET_PLATFORM_NAME = VisionOS

UE_ENGINE_DIR = /Volumes/PABSSD/UnrealEngine-5.4/Engine

UE_BINARIES_DIR = /Volumes/PABSSD/UnrealEngine-5.4/VisionProto/Binaries/VisionOS

UE_STAGED_BINARIES_DIR_BASE = VisionProto

UE_PROJECT_DIR = /Volumes/PABSSD/UnrealEngine-5.4/VisionProto

// Constant settings (same for all platforms and targets)

INFOPLIST_OUTPUT_FORMAT = xml

COMBINE_HIDPI_IMAGES = YES

USE_HEADERMAP = NO

ONLY_ACTIVE_ARCH = YES

// Platform settings

SUPPORTED_PLATFORMS = xrsimulator xros

SDKROOT = xros

// These settings combined will tell Xcode to write to Binaries/VisionOS (instead of something like Binaries/Development-iphoneos)

SYMROOT = /Volumes/PABSSD/UnrealEngine-5.4/VisionProto/Binaries

CONFIGURATION =

EFFECTIVE_PLATFORM_NAME = VisionOS

// Misc settings

VALID_ARCHS = arm64

ARCHS = arm64

INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES

// Project settings

TARGETED_DEVICE_FAMILY = 7

PRODUCT_BUNDLE_IDENTIFIER = Yours

XROS_DEPLOYMENT_TARGET = 1.0

// Plist settings

INFOPLIST_FILE = …/…/Build/IOS/UBTGenerated/Info.Template.plist

GENERATE_INFOPLIST_FILE = YES

ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon

CURRENT_PROJECT_VERSION = $(UE_VISIONOS_BUILD_VERSION)

MARKETING_VERSION = 1.0

INFOPLIST_KEY_LSApplicationCategoryType = public.app-category.games

// Code-signing settings

CODE_SIGN_STYLE = Automatic

DEVELOPMENT_TEAM = Yours

I just hidden some critical infos with yours labels.

Hope that will help you.

  • I build from Xcode. The error is from its console. Not really sure how just “build” with Unreal, I am familiar with the environment yet.

  • Comparing those 2 files:
    I have tried to compare both, however they are highly different (even just following the steps at the tutorial). I am wondering if the reason might be you are using UE 5.4 and I use UE 5.4.1.

DefaultEngine.ini

[/Script/EngineSettings.GameMapsSettings]
GlobalDefaultGameMode=/Game/VRTemplate/Blueprints/VRGameMode.VRGameMode_C
EditorStartupMap=/Game/VRTemplate/Maps/VRTemplateMap.VRTemplateMap
GameDefaultMap=/Game/VRTemplate/Maps/VRTemplateMap.VRTemplateMap

[/Script/Engine.RendererSettings]
r.ForwardShading=True
r.MobileHDR=False
vr.MobileMultiView=True
vr.InstancedStereo=True
r.DefaultFeature.AutoExposure=False
r.DefaultFeature.AmbientOcclusion=False
r.DefaultFeature.AmbientOcclusionStaticFraction=False
r.DefaultFeature.MotionBlur=False
r.Mobile.UseHWsRGBEncoding=True

r.Shadow.Virtual.Enable=1

r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True

r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8
r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8
r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8

r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8

r.GenerateMeshDistanceFields=True

r.DynamicGlobalIlluminationMethod=1

r.ReflectionMethod=1
r.Mobile.AntiAliasing=0
r.AntiAliasingMethod=0

[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
bBuildForES31=False
ExtraApplicationSettings=
bPackageForMetaQuest=True

[/Script/WindowsTargetPlatform.WindowsTargetSettings]
DefaultGraphicsRHI=DefaultGraphicsRHI_Default
-D3D12TargetedShaderFormats=PCD3D_SM5
+D3D12TargetedShaderFormats=PCD3D_SM6
-D3D11TargetedShaderFormats=PCD3D_SM5
+D3D11TargetedShaderFormats=PCD3D_SM5
Compiler=Default
AudioSampleRate=48000
AudioCallbackBufferFrameSize=1024
AudioNumBuffersToEnqueue=1
AudioMaxChannels=0
AudioNumSourceWorkers=4
SpatializationPlugin=
SourceDataOverridePlugin=
ReverbPlugin=
OcclusionPlugin=
CompressionOverrides=(bOverrideCompressionTimes=False,DurationThreshold=5.000000,MaxNumRandomBranches=0,SoundCueQualityIndex=0)
CacheSizeKB=65536
MaxChunkSizeOverrideKB=0
bResampleForDevice=False
MaxSampleRate=48000.000000
HighSampleRate=32000.000000
MedSampleRate=24000.000000
LowSampleRate=12000.000000
MinSampleRate=8000.000000
CompressionQualityModifier=1.000000
AutoStreamingThreshold=0.000000
SoundCueCookQualityIndex=-1

[/Script/NavigationSystem.NavigationSystemV1]
bAllowClientSideNavigation=True

[/Script/LinuxTargetPlatform.LinuxTargetSettings]
-TargetedRHIs=SF_VULKAN_SM5
+TargetedRHIs=SF_VULKAN_SM6

[/Script/Engine.Engine]
+ActiveGameNameRedirects=(OldGameName=“TP_VirtualRealityBP”,NewGameName=“/Script/MyProject”)
+ActiveGameNameRedirects=(OldGameName=“/Script/TP_VirtualRealityBP”,NewGameName=“/Script/MyProject”)

[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
bEnablePlugin=True
bAllowNetworkConnection=True
SecurityToken=CE0F89951149CB1CBD7DA69A81F96234
bIncludeInShipping=False
bAllowExternalStartInShipping=False
bCompileAFSProject=False
bUseCompression=False
bLogFiles=False
bReportStats=False
ConnectionType=USBOnly
bUseManualIPAddress=False
ManualIPAddress=

[/Script/IOSRuntimeSettings.IOSRuntimeSettings]
bSupportsMetalMRT=True
bSupportsMetal=False
AdditionalPlistData=NSHandsTrackingUsageDescriptionHand UsageNSMicrophoneUsageDescriptionMic Needed NSWorldSensingUsageDescriptionWorld Sensing
bEnableSimulatorSupport=True
bSupportAppleA8=True

[/Script/MacTargetPlatform.XcodeProjectSettings]
CodeSigningPrefix=
BundleIdentifier=yourname
ApplicationDisplayName=My Vision App
CodeSigningTeam=H7856N8BHP

DefaultGame.ini

[/Script/EngineSettings.GeneralProjectSettings]
ProjectID=C038B212FA47E81C2DD5059A6E7A39C0
bStartInVR=True
ProjectName=MyProject Template

[StartupActions]
bAddPacks=True
InsertPack=(PackSource=“StarterContent.upack”,PackName=“StarterContent”)
[SectionsToSave]
+Section=StartupActions

  • Comparing YourProject.xcconfig:

I have exactly the same as yours. Over // Plist settings, I also have:

// Misc settings
VALID_ARCHS = arm64
ARCHS = arm64
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES

// Project settings
TARGETED_DEVICE_FAMILY = 7
PRODUCT_BUNDLE_IDENTIFIER = yours
XROS_DEPLOYMENT_TARGET = 1.0

I’m on UE5.4.1.

Ok so let try to Package from UE5.
Just select VisionOS then Package and select a folder where to build it.

IMG_7375

It’s just a photo from Epic Games. You will find VisionOS here.

It is good to hear that we are on the same UE version.

I did as you said (even if I did many times before). VisionOS → Package Project: Use Project Setting (Development) on my local. I selected the same MyProject folder inside UnrealEngine-5.4.1-release folder.

If I run EU5 (VisionOS) now from Xcode into the visionOS 1.2 (21O5565d), I get the commented issue. This time is seems that it has picked up properly the “Support for A8”. So a new error arise :smiley::

**[UE] [2024.05.24-12.56.05:321][ 0]LogGenericPlatformMisc: Warning: MessageBox: Shader Platform Unavailable : Shader platform: SF_METAL_SIM was not cooked! Please enable this shader platform in the project's target settings.**

**[UE] [2024.05.24-12.56.05:321][ 0]Message dialog closed, result: Ok, title: Shader Platform Unavailable, text: Shader platform: SF_METAL_SIM was not cooked! Please enable this shader platform in the project's target settings.**

**[UE] [2024.05.24-12.56.05:321][ 0]LogGenericPlatformMisc: FPlatformMisc::RequestExit(1, <NoCallSiteInfo>)**

Congratulations to ILM Immersive on the What If…? launch!

I just completed the experience and went back to finish the other option. Really enjoyed it, and am digging more of these immersive, narrative projects. Not everything needs to be a first person shooter. I also really enjoyed seeing the new, custom hand gestures.

I do hope we’ll get to see some behind-the-scenes on how this was pulled off with Unreal Engine, as there are quite a few of us in the community patiently waiting for these features to make it into the main engine build.

I know it’s a long shot, but it sure would be nice if both Tim’s could bury the hatchet and allow Apple to tout Unreal Engine’s involvement at WWDC2024.

1 Like

Seriously, it’s created on UE5 ?

1 Like

@stevetalkowski
I would like to see that too. I’m trying to develop in Unreal for AVP and I have found it quite burdensome. I wonder if they are working with the same builds as the rest of us…
I could only find this article with some more detail.

What If has some mixed reality parts, I wonder how those were made. Does Unreal support mixed reality with RealityKit? I thought only rendering through Metal is possible…

In Fact, you could integrate all VisionPro API into UE5 by yourself. I think it’s what they did.
I hope they will share their experience with Epic Games. Hoping so much for a full VisionOS support into the next maj … I’m on the starting blocks. I have some games ready for it. Just waiting after Epic :frowning:

I think the mixed reality parts are not Unreal but RealityKit (not sure how they made that part, maybe it is just native tools). Unreal does not support mixed unless they are using some special build. Everything in the mixed part can be done in RealityKit. Then when it switches to full immersion you get the dialog asking you to confirm.

I think this would be rather time consuming, and still would not fully explain how to get video pass through in the scene. If using Metal render it would need to allow for pass through which I’m not entirely sure if it is even possible.

Unreal Engine Support Passthrough.
I worked on Meta Presence Platform. And UE5 support passthrough just by adding the Meta Plugin. Not a custom engine source.

This is needed to include the shaders for the simulator (SF_METAL_SIM).

How do I include this?

Some positive announcements from #WWDC24 today! x.com

Video out tomorrow:

2 Likes

I know that in the past one had to compile prelease UE5.4 versions to develop for visionpro. It that still the case? If not, could someone respond to this thread when it is possible and what release version is needed to develop with.

Didn’t tried the last Launcher version but I think you need to go through source version. 5.4.
Be careful, VisionOS2 doesn’t working …