@webspatial/platform-visionos 0.0.1 → 0.0.3-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/package.json +1 -1
  2. package/web-spatial/libs/EventEmitter.swift +0 -7
  3. package/web-spatial/libs/SpatialComponent.swift +0 -7
  4. package/web-spatial/libs/SpatialEntity.swift +0 -7
  5. package/web-spatial/libs/SpatialInputComponent.swift +0 -7
  6. package/web-spatial/libs/SpatialMeshResource.swift +0 -7
  7. package/web-spatial/libs/SpatialModelComponent.swift +0 -7
  8. package/web-spatial/libs/SpatialObject.swift +0 -7
  9. package/web-spatial/libs/SpatialViewComponent.swift +0 -7
  10. package/web-spatial/libs/SpatialWindowComponent.swift +0 -8
  11. package/web-spatial/libs/SpatialWindowContainer.swift +19 -7
  12. package/web-spatial/libs/Utils/CommandManager.swift +18 -13
  13. package/web-spatial/libs/Utils/Logger.swift +0 -7
  14. package/web-spatial/libs/Utils/SceneManager.swift +0 -7
  15. package/web-spatial/libs/Utils/WindowContainerMgr.swift +0 -14
  16. package/web-spatial/libs/json/JsonParser.swift +0 -7
  17. package/web-spatial/libs/uiKitDelegate/Window.swift +0 -7
  18. package/web-spatial/libs/webView/UpdateSystem.swift +0 -7
  19. package/web-spatial/libs/webView/backend/NativeWebView.swift +0 -7
  20. package/web-spatial/views/ImmersiveView.swift +0 -7
  21. package/web-spatial/views/LoadingView.swift +0 -7
  22. package/web-spatial/views/MaterialWithBorderCornerModifier.swift +0 -6
  23. package/web-spatial/views/OpenDismissHandlerUI.swift +0 -7
  24. package/web-spatial/views/PlainWindowContainerView.swift +0 -7
  25. package/web-spatial/views/SpatialModel3DView.swift +0 -6
  26. package/web-spatial/views/SpatialWebViewUI.swift +0 -7
  27. package/web-spatial/views/VolumetricWindowContainerView.swift +0 -8
  28. package/web-spatial/views/ui/NavView.swift +0 -7
  29. package/web-spatial/web_spatialApp.swift +20 -19
  30. package/web-spatial.xcodeproj/project.pbxproj +14 -26
  31. package/web-spatialTests/web_spatialTests.swift +0 -34
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webspatial/platform-visionos",
3
- "version": "0.0.1",
3
+ "version": "0.0.3-alpha.0",
4
4
  "description": "Used to publish WebSpatial projects to Apple Vision Pro",
5
5
  "type": "commonjs",
6
6
  "engines": {
@@ -1,10 +1,3 @@
1
- //
2
- // EventEmitter.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 9/10/24.
6
- //
7
-
8
1
  class EventEmitter {
9
2
  private var listeners: [String: [(_ object: Any, _ data: Any) -> Void]] = [:]
10
3
 
@@ -1,10 +1,3 @@
1
- //
2
- // SpatialComponent.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 9/10/24.
6
- //
7
-
8
1
  import Foundation
9
2
 
10
3
  class SpatialComponent: SpatialObject {
@@ -1,10 +1,3 @@
1
- //
2
- // SpatialEntity.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 9/10/24.
6
- //
7
-
8
1
  import Combine
9
2
  import Foundation
10
3
  import RealityKit
@@ -1,10 +1,3 @@
1
- //
2
- // SpatialInputComponent.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 9/10/24.
6
- //
7
-
8
1
  import Combine
9
2
  import Foundation
10
3
  import RealityKit
@@ -1,10 +1,3 @@
1
- //
2
- // SpatialMeshResource.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 9/10/24.
6
- //
7
-
8
1
  import Foundation
9
2
  import RealityKit
10
3
 
@@ -1,10 +1,3 @@
1
- //
2
- // SpatialModelComponent.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 9/10/24.
6
- //
7
-
8
1
  import Combine
9
2
  import Foundation
10
3
  import RealityKit
@@ -1,10 +1,3 @@
1
- //
2
- // SpatialObject.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 9/10/24.
6
- //
7
-
8
1
  import Foundation
9
2
 
10
3
  struct SpatialObjectInfo: Codable {
@@ -1,10 +1,3 @@
1
- //
2
- // SpatialViewComponent.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 9/10/24.
6
- //
7
-
8
1
  import Foundation
9
2
 
10
3
  @Observable
@@ -1,11 +1,3 @@
1
-
2
- //
3
- // SpatialWindowComponent.swift
4
- // web-spatial
5
- //
6
- // Created by ByteDance on 5/9/24.
7
- //
8
-
9
1
  import Combine
10
2
  import Foundation
11
3
  import RealityKit
@@ -1,10 +1,3 @@
1
- //
2
- // SpatialWindowContainer.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 9/10/24.
6
- //
7
-
8
1
  import Combine
9
2
  import Foundation
10
3
  import RealityKit
@@ -21,6 +14,25 @@ class SpatialWindowContainer: SpatialObject {
21
14
 
22
15
  // Resources that will be destroyed when this window group is removed
23
16
  private var childResources = [String: SpatialObject]()
17
+ public func addChildResource(_ spatialObject: SpatialObject) {
18
+ childResources[spatialObject.id] = spatialObject
19
+ spatialObject
20
+ .on(
21
+ event: SpatialObject.Events.BeforeDestroyed.rawValue,
22
+ listener: onSptatialObjectDestroyed
23
+ )
24
+ }
25
+
26
+ private func onSptatialObjectDestroyed(_ object: Any, _ data: Any) {
27
+ let spatialObject = object as! SpatialObject
28
+ spatialObject
29
+ .off(
30
+ event: SpatialObject.Events.BeforeDestroyed.rawValue,
31
+ listener: onSptatialObjectDestroyed
32
+ )
33
+ childResources.removeValue(forKey: spatialObject.id)
34
+ }
35
+
24
36
  public var childContainers = [String: SpatialWindowContainer]()
25
37
 
26
38
  var wgd: WindowContainerData
@@ -1,9 +1,3 @@
1
- //
2
- // CommandManager.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 2024/10/15.
6
- //
7
1
  import Foundation
8
2
  import RealityKit
9
3
  import SwiftUI
@@ -134,8 +128,8 @@ class CommandManager {
134
128
  }
135
129
 
136
130
  private func setComponent(target: SpatialWindowComponent, info: CommandInfo) {
137
- if let component = target.getChildSpatialObject(name: info.resourceID) as? SpatialComponent,
138
- let entity = target.getChildSpatialObject(name: info.entityID) as? SpatialEntity
131
+ if let component = SpatialObject.get(info.resourceID) as? SpatialComponent,
132
+ let entity = SpatialObject.get(info.entityID) as? SpatialEntity
139
133
  {
140
134
  entity.addComponent(component)
141
135
  } else {
@@ -153,6 +147,15 @@ class CommandManager {
153
147
  }
154
148
  }
155
149
 
150
+ private static func setParentResourceDependencies(object: SpatialObject, info: CommandInfo) {
151
+ if let parentWindowComponent = SpatialObject.get(info.resourceID) as? SpatialWindowComponent {
152
+ parentWindowComponent.addChildSpatialObject(object)
153
+ }
154
+ if let parentWindowContainer = SpatialWindowContainer.getSpatialWindowContainer(info.windowContainerID) {
155
+ parentWindowContainer.addChildResource(object)
156
+ }
157
+ }
158
+
156
159
  private func createResource(target: SpatialWindowComponent, info: CommandInfo) {
157
160
  let data = info.cmd.data!
158
161
  if let type = data.type {
@@ -171,9 +174,11 @@ class CommandManager {
171
174
  case "PhysicallyBasedMaterial":
172
175
  sr = SpatialPhysicallyBasedMaterial(PhysicallyBasedMaterial())
173
176
  case "SpatialWebView":
174
- sr = SpatialWindowComponent(parentWindowContainerID: target.readWindowContainerID(id: info.windowContainerID))
175
- let spatialWindowComponent = sr as! SpatialWindowComponent
176
- spatialWindowComponent.parentWebviewID = target.id
177
+ if let parentWindowContainer = SpatialWindowContainer.getSpatialWindowContainer(info.windowContainerID) {
178
+ sr = SpatialWindowComponent(parentWindowContainerID: parentWindowContainer.id)
179
+ let spatialWindowComponent = sr as! SpatialWindowComponent
180
+ spatialWindowComponent.parentWebviewID = target.id
181
+ }
177
182
  case "SpatialView":
178
183
  sr = SpatialViewComponent()
179
184
  case "Model3DComponent":
@@ -212,8 +217,8 @@ class CommandManager {
212
217
 
213
218
  Task.detached { @MainActor in
214
219
  // Update state on main thread
220
+ CommandManager.setParentResourceDependencies(object: spatialModelComponent, info: info)
215
221
  target.completeEvent(requestID: info.requestID, data: "{createdID: '" + spatialModelComponent.id + "'}")
216
- target.addChildSpatialObject(spatialModelComponent)
217
222
  logger.debug("Model load success!")
218
223
  }
219
224
  } catch {
@@ -230,8 +235,8 @@ class CommandManager {
230
235
  default: logger.warning("failed to create sr of type \(type)")
231
236
  }
232
237
  if let srObject = sr {
238
+ CommandManager.setParentResourceDependencies(object: srObject, info: info)
233
239
  target.completeEvent(requestID: info.requestID, data: "{createdID: '" + srObject.id + "'}")
234
- target.addChildSpatialObject(srObject)
235
240
  } else {
236
241
  logger.warning("failed to create sr of type: \(type)")
237
242
  }
@@ -1,10 +1,3 @@
1
- //
2
- // Logger.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 7/18/24.
6
- //
7
-
8
1
  import Foundation
9
2
 
10
3
  class Logger {
@@ -1,10 +1,3 @@
1
- //
2
- // SceneManager.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 2025/2/6.
6
- //
7
-
8
1
  import Foundation
9
2
 
10
3
  class SceneManager {
@@ -1,17 +1,3 @@
1
- //
2
- // WindowContainerMgr.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 2024/12/13.
6
- //
7
-
8
- //
9
- // WindowContainerModel.swift
10
- // web-spatial
11
- //
12
- // Created by ByteDance on 2024/11/25.
13
- //
14
-
15
1
  import Combine
16
2
  import SwiftUI
17
3
  import UIKit
@@ -1,10 +1,3 @@
1
- //
2
- // JsonParser.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 5/9/24.
6
- //
7
-
8
1
  import Foundation
9
2
 
10
3
  class JsonParser {
@@ -1,10 +1,3 @@
1
- //
2
- // Window.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 7/3/24.
6
- //
7
-
8
1
  import Foundation
9
2
  import SwiftUI
10
3
 
@@ -1,10 +1,3 @@
1
- //
2
- // UpdateSystem.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 5/21/24.
6
- //
7
-
8
1
  import Foundation
9
2
  import RealityKit
10
3
 
@@ -1,10 +1,3 @@
1
- //
2
- // NativeWebView.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 5/9/24.
6
- //
7
-
8
1
  import Combine
9
2
  import Foundation
10
3
  import RealityKit
@@ -1,10 +1,3 @@
1
- //
2
- // ImmersiveView.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 5/8/24.
6
- //
7
-
8
1
  import RealityKit
9
2
  import RealityKitContent
10
3
  import SwiftUI
@@ -1,10 +1,3 @@
1
- //
2
- // LoadingView.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 2025/1/24.
6
- //
7
-
8
1
  import SwiftUI
9
2
  import SwiftUICore
10
3
 
@@ -1,9 +1,3 @@
1
- //
2
- // MaterialWithBorderCornerModifier.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 12/4/24.
6
- //
7
1
  import SwiftUI
8
2
 
9
3
  enum BackgroundMaterial: String, Codable {
@@ -1,10 +1,3 @@
1
- //
2
- // OpenDismissHandlerUI.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 8/20/24.
6
- //
7
-
8
1
  import SwiftUI
9
2
 
10
3
  struct OpenDismissHandlerUI: View {
@@ -1,10 +1,3 @@
1
- //
2
- // PlainWindowContainerView.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 5/9/24.
6
- //
7
-
8
1
  import RealityKit
9
2
  import SwiftUI
10
3
 
@@ -1,9 +1,3 @@
1
- //
2
- // SpatialModel3DView.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 1/21/25.
6
- //
7
1
  import RealityKit
8
2
  import SwiftUI
9
3
 
@@ -1,10 +1,3 @@
1
- //
2
- // SpatialWebViewUI.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 5/9/24.
6
- //
7
-
8
1
  import RealityKit
9
2
  import SwiftUI
10
3
 
@@ -1,11 +1,3 @@
1
-
2
- //
3
- // VolumetricWindowContainerView.swift
4
- // web-spatial
5
- //
6
- // Created by ByteDance on 5/9/24.
7
- //
8
-
9
1
  import typealias RealityKit.Attachment
10
2
  import typealias RealityKit.Entity
11
3
  import typealias RealityKit.MeshResource
@@ -1,10 +1,3 @@
1
- //
2
- // NavView.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 2025/1/8.
6
- //
7
-
8
1
  import SwiftUI
9
2
  import WebKit
10
3
 
@@ -1,10 +1,3 @@
1
- //
2
- // web_spatialApp.swift
3
- // web-spatial
4
- //
5
- // Created by ByteDance on 5/8/24.
6
- //
7
-
8
1
  import typealias RealityKit.Attachment
9
2
  import typealias RealityKit.Entity
10
3
  import typealias RealityKit.MeshResource
@@ -18,15 +11,19 @@ let logger = Logger()
18
11
 
19
12
  // To load a local path, remove http:// eg. "static-web/"
20
13
  let nativeAPIVersion = "0.0.1"
14
+ // start URL
15
+ let startURL = pwaManager.start_url
21
16
 
22
17
  // detect when app properties like defaultSize change so we can avoid race condition of setting default values and then opening window container
23
18
  var sceneStateChangedCB: ((Any) -> Void) = { _ in
24
19
  }
25
20
 
21
+ // TODO: we need to get rid of rootWGD and rootWC to cleanup memory and better handle close/reopen
22
+ weak var rootWC: SpatialWindowComponent?
23
+
26
24
  @main
27
25
  struct web_spatialApp: App {
28
26
  @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
29
- @State var root: SpatialWindowComponent? = nil
30
27
  @State var rootWGD: SpatialWindowContainer
31
28
  @State var initialLaunch = true
32
29
 
@@ -35,7 +32,7 @@ struct web_spatialApp: App {
35
32
  @Environment(\.scenePhase) private var scenePhase
36
33
 
37
34
  init() {
38
- logger.debug("WebSpatial App Started --------")
35
+ logger.debug("WebSpatial App Started -------- rootURL: " + startURL)
39
36
 
40
37
  // init global logger
41
38
  Logger.initLogger()
@@ -55,7 +52,7 @@ struct web_spatialApp: App {
55
52
  // There seems to be a bug in WKWebView where it needs to be initialized after the app has loaded so we do this here instead of init()
56
53
  // https://forums.developer.apple.com/forums/thread/61432
57
54
  func initAppOnViewMount() {
58
- if root == nil {
55
+ if rootWC == nil {
59
56
  let fileUrl = getFileUrl()
60
57
 
61
58
  // Create a default entity with webview resource
@@ -65,7 +62,9 @@ struct web_spatialApp: App {
65
62
  rootEntity.addComponent(windowComponent)
66
63
  rootEntity.setParentWindowContainer(wg: rootWGD)
67
64
 
68
- root = windowComponent
65
+ rootWGD.addChildResource(windowComponent)
66
+ rootWGD.addChildResource(rootEntity)
67
+ rootWC = windowComponent
69
68
  }
70
69
  }
71
70
 
@@ -79,14 +78,16 @@ struct web_spatialApp: App {
79
78
  if windowData.windowContainerID == SpatialWindowContainer.getRootID() {
80
79
  VStack {}.onAppear { initAppOnViewMount() }
81
80
 
82
- PlainWindowContainerView().environment(rootWGD).background(Color.clear.opacity(0)).onOpenURL { myURL in
83
- initAppOnViewMount()
84
- let urlToLoad = pwaManager.checkInDeeplink(url: myURL.absoluteString)
85
-
86
- if let url = URL(string: urlToLoad) {
87
- root!.navigateToURL(url: url)
88
- }
89
- }
81
+ PlainWindowContainerView().environment(rootWGD).background(Color.clear.opacity(0))
82
+ // TODO: Universal link is currently broken
83
+ // .onOpenURL { myURL in
84
+ // initAppOnViewMount()
85
+ // let urlToLoad = pwaManager.checkInDeeplink(url: myURL.absoluteString)
86
+ //
87
+ // if let url = URL(string: urlToLoad) {
88
+ // // root!.navigateToURL(url: url)
89
+ // }
90
+ // }
90
91
  } else {
91
92
  let wg = SpatialWindowContainer.getOrCreateSpatialWindowContainer(
92
93
  windowData.windowContainerID, windowData
@@ -15,7 +15,6 @@
15
15
  2B2F1D6F2BEBFAAA006897EE /* ImmersiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B2F1D6E2BEBFAAA006897EE /* ImmersiveView.swift */; };
16
16
  2B2F1D712BEBFAAC006897EE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2B2F1D702BEBFAAC006897EE /* Assets.xcassets */; };
17
17
  2B2F1D742BEBFAAC006897EE /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2B2F1D732BEBFAAC006897EE /* Preview Assets.xcassets */; };
18
- 2B2F1D7F2BEBFAAD006897EE /* web_spatialTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B2F1D7E2BEBFAAD006897EE /* web_spatialTests.swift */; };
19
18
  2B2F1D8F2BED4D7A006897EE /* JsonParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B2F1D8E2BED4D7A006897EE /* JsonParser.swift */; };
20
19
  2B2F1D912BED61A8006897EE /* NativeWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B2F1D902BED61A8006897EE /* NativeWebView.swift */; };
21
20
  2B2F1D992BEDA8EF006897EE /* VolumetricWindowContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B2F1D982BEDA8EF006897EE /* VolumetricWindowContainerView.swift */; };
@@ -61,15 +60,14 @@
61
60
  2B0B1C0F2C494E5400E644F9 /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
62
61
  2B0B43092CBE21540003CEF3 /* CommandManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandManager.swift; sourceTree = "<group>"; };
63
62
  2B23CB3E2D0BEE6900E70D95 /* WindowContainerMgr.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowContainerMgr.swift; sourceTree = "<group>"; };
64
- 2B2F1D632BEBFAAA006897EE /* web-spatial.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "web-spatial.app"; sourceTree = BUILT_PRODUCTS_DIR; };
63
+ 2B2F1D632BEBFAAA006897EE /* WebSpatial.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WebSpatial.app; sourceTree = BUILT_PRODUCTS_DIR; };
65
64
  2B2F1D672BEBFAAA006897EE /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = "<group>"; };
66
65
  2B2F1D6A2BEBFAAA006897EE /* web_spatialApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = web_spatialApp.swift; sourceTree = "<group>"; };
67
66
  2B2F1D6E2BEBFAAA006897EE /* ImmersiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImmersiveView.swift; sourceTree = "<group>"; };
68
67
  2B2F1D702BEBFAAC006897EE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
69
68
  2B2F1D732BEBFAAC006897EE /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
70
69
  2B2F1D752BEBFAAC006897EE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
71
- 2B2F1D7A2BEBFAAD006897EE /* web-spatialTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "web-spatialTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
72
- 2B2F1D7E2BEBFAAD006897EE /* web_spatialTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = web_spatialTests.swift; sourceTree = "<group>"; };
70
+ 2B2F1D7A2BEBFAAD006897EE /* WebSpatial.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebSpatial.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
73
71
  2B2F1D8E2BED4D7A006897EE /* JsonParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JsonParser.swift; sourceTree = "<group>"; };
74
72
  2B2F1D902BED61A8006897EE /* NativeWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeWebView.swift; sourceTree = "<group>"; };
75
73
  2B2F1D982BEDA8EF006897EE /* VolumetricWindowContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VolumetricWindowContainerView.swift; sourceTree = "<group>"; };
@@ -136,7 +134,6 @@
136
134
  children = (
137
135
  2B2F1D652BEBFAAA006897EE /* web-spatial */,
138
136
  2B2F1D662BEBFAAA006897EE /* Packages */,
139
- 2B2F1D7D2BEBFAAD006897EE /* web-spatialTests */,
140
137
  2B2F1D642BEBFAAA006897EE /* Products */,
141
138
  );
142
139
  sourceTree = "<group>";
@@ -144,8 +141,8 @@
144
141
  2B2F1D642BEBFAAA006897EE /* Products */ = {
145
142
  isa = PBXGroup;
146
143
  children = (
147
- 2B2F1D632BEBFAAA006897EE /* web-spatial.app */,
148
- 2B2F1D7A2BEBFAAD006897EE /* web-spatialTests.xctest */,
144
+ 2B2F1D632BEBFAAA006897EE /* WebSpatial.app */,
145
+ 2B2F1D7A2BEBFAAD006897EE /* WebSpatial.xctest */,
149
146
  );
150
147
  name = Products;
151
148
  sourceTree = "<group>";
@@ -180,14 +177,6 @@
180
177
  path = "Preview Content";
181
178
  sourceTree = "<group>";
182
179
  };
183
- 2B2F1D7D2BEBFAAD006897EE /* web-spatialTests */ = {
184
- isa = PBXGroup;
185
- children = (
186
- 2B2F1D7E2BEBFAAD006897EE /* web_spatialTests.swift */,
187
- );
188
- path = "web-spatialTests";
189
- sourceTree = "<group>";
190
- };
191
180
  2B2F1D8A2BED4CD0006897EE /* libs */ = {
192
181
  isa = PBXGroup;
193
182
  children = (
@@ -291,7 +280,7 @@
291
280
  2B2F1D682BEBFAAA006897EE /* RealityKitContent */,
292
281
  );
293
282
  productName = "web-spatial";
294
- productReference = 2B2F1D632BEBFAAA006897EE /* web-spatial.app */;
283
+ productReference = 2B2F1D632BEBFAAA006897EE /* WebSpatial.app */;
295
284
  productType = "com.apple.product-type.application";
296
285
  };
297
286
  2B2F1D792BEBFAAD006897EE /* web-spatialTests */ = {
@@ -309,7 +298,7 @@
309
298
  );
310
299
  name = "web-spatialTests";
311
300
  productName = "web-spatialTests";
312
- productReference = 2B2F1D7A2BEBFAAD006897EE /* web-spatialTests.xctest */;
301
+ productReference = 2B2F1D7A2BEBFAAD006897EE /* WebSpatial.xctest */;
313
302
  productType = "com.apple.product-type.bundle.unit-test";
314
303
  };
315
304
  /* End PBXNativeTarget section */
@@ -417,7 +406,6 @@
417
406
  isa = PBXSourcesBuildPhase;
418
407
  buildActionMask = 2147483647;
419
408
  files = (
420
- 2B2F1D7F2BEBFAAD006897EE /* web_spatialTests.swift in Sources */,
421
409
  );
422
410
  runOnlyForDeploymentPostprocessing = 0;
423
411
  };
@@ -568,8 +556,8 @@
568
556
  "@executable_path/Frameworks",
569
557
  );
570
558
  MARKETING_VERSION = 1.0;
571
- PRODUCT_BUNDLE_IDENTIFIER = "com.webspatial.test";
572
- PRODUCT_NAME = "WebSpatial";
559
+ PRODUCT_BUNDLE_IDENTIFIER = com.webspatial.test;
560
+ PRODUCT_NAME = WebSpatial;
573
561
  SUPPORTED_PLATFORMS = "xros xrsimulator";
574
562
  SWIFT_EMIT_LOC_STRINGS = YES;
575
563
  SWIFT_VERSION = 5.0;
@@ -595,8 +583,8 @@
595
583
  "@executable_path/Frameworks",
596
584
  );
597
585
  MARKETING_VERSION = 1.0;
598
- PRODUCT_BUNDLE_IDENTIFIER = "com.webspatial.test";
599
- PRODUCT_NAME = "WebSpatial";
586
+ PRODUCT_BUNDLE_IDENTIFIER = com.webspatial.test;
587
+ PRODUCT_NAME = WebSpatial;
600
588
  SUPPORTED_PLATFORMS = "xros xrsimulator";
601
589
  SWIFT_EMIT_LOC_STRINGS = YES;
602
590
  SWIFT_VERSION = 5.0;
@@ -613,8 +601,8 @@
613
601
  CURRENT_PROJECT_VERSION = 1;
614
602
  GENERATE_INFOPLIST_FILE = YES;
615
603
  MARKETING_VERSION = 1.0;
616
- PRODUCT_BUNDLE_IDENTIFIER = "com.webspatial.test";
617
- PRODUCT_NAME = "WebSpatial";
604
+ PRODUCT_BUNDLE_IDENTIFIER = com.webspatial.test;
605
+ PRODUCT_NAME = WebSpatial;
618
606
  SUPPORTED_PLATFORMS = "xros xrsimulator";
619
607
  SWIFT_EMIT_LOC_STRINGS = NO;
620
608
  SWIFT_VERSION = 5.0;
@@ -632,8 +620,8 @@
632
620
  CURRENT_PROJECT_VERSION = 1;
633
621
  GENERATE_INFOPLIST_FILE = YES;
634
622
  MARKETING_VERSION = 1.0;
635
- PRODUCT_BUNDLE_IDENTIFIER = "com.webspatial.test";
636
- PRODUCT_NAME = "WebSpatial";
623
+ PRODUCT_BUNDLE_IDENTIFIER = com.webspatial.test;
624
+ PRODUCT_NAME = WebSpatial;
637
625
  SUPPORTED_PLATFORMS = "xros xrsimulator";
638
626
  SWIFT_EMIT_LOC_STRINGS = NO;
639
627
  SWIFT_VERSION = 5.0;
@@ -1,34 +0,0 @@
1
- //
2
- // web_spatialTests.swift
3
- // web-spatialTests
4
- //
5
- // Created by ByteDance on 5/8/24.
6
- //
7
-
8
- @testable import web_spatial
9
- import XCTest
10
-
11
- class web_spatialTests: XCTestCase {
12
- override func setUpWithError() throws {
13
- // Put setup code here. This method is called before the invocation of each test method in the class.
14
- }
15
-
16
- override func tearDownWithError() throws {
17
- // Put teardown code here. This method is called after the invocation of each test method in the class.
18
- }
19
-
20
- func testExample() throws {
21
- // This is an example of a functional test case.
22
- // Use XCTAssert and related functions to verify your tests produce the correct results.
23
- // Any test you write for XCTest can be annotated as throws and async.
24
- // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
25
- // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
26
- }
27
-
28
- func testPerformanceExample() throws {
29
- // This is an example of a performance test case.
30
- measure {
31
- // Put the code you want to measure the time of here.
32
- }
33
- }
34
- }