Sample CodevisionOSReviewed 2026-07-21View on Apple Developer

Creating a 3D painting space

At a glance

Item Summary
Purpose Implement a painting canvas entity, and update its mesh to represent a stroke.
App architecture A Swift sample with the source-visible chain EntryPointMainViewClosureSystemRealityKit / SwiftUI APIs.
Main patterns Publisher-backed observable state
Project style 9 scanned source file(s) across Swift, organized around ranked entry, type, and file boundaries.
Execution model Source-visible boundaries: @MainActor, async declaration or closure, Task; none alone proves a background thread.
State/event model Source-visible mechanisms: ObservableObject, @Published, SwiftUI state property wrapper.
Key frameworks/packages RealityKit, SwiftUI, ARKit, simd; these are source dependencies, not architecture labels.

Project structure

Source bundle/
├── Painting/
│   ├── App/
│   │   └── EntryPoint.swift
│   ├── Components/
│   │   └── ClosureComponent.swift
│   ├── Views/
│   │   ├── MainView.swift
│   │   └── PaintingView.swift
│   ├── Canvas/
│   │   ├── PaintingCanvas.swift
│   │   └── Stroke.swift
│   ├── Trackers/
│   │   └── PaintingHandTracking.swift
│   └── Extensions/
│       ├── Entity.swift
│       └── Float.swift
├── Configuration/
│   └── SampleCode.xcconfig
└── Painting.xcodeproj/
    ├── .xcodesamplecode.plist
    └── project.pbxproj

Structure observations

  • Architecturally prominent files are ranked from entry points and role-named declarations; resource-only paths are omitted.
  • Primary languages: Swift.
  • The verified tree contains 4 project/configuration file(s) and 8 source declaration(s).

Overall architecture

Reference code

Painting/App/EntryPoint.swift:10 — architecture anchor

@main
struct EntryPoint: App {
    // ...
        WindowGroup {
            MainView()
        }
    // ...
}

Interpretation

The arrows summarize the source-visible entry, role-named types or folders, and framework direction; when nodes come from structural folders, the sequence is a high-level interpretation rather than proof that every adjacent node calls the next. Ownership is claimed only where the next section cites a stored property or assignment. The diagram is intentionally limited to the dominant path into visionOS.

Ownership and state

Ownership evidence

Painting/Components/ClosureComponent.swift:14 — stored dependency or nearest verified ownership anchor

struct ClosureComponent: Component {
    // ...
    let closure: (TimeInterval) -> Void
    // ...
}
Owner Object or state Relationship Mutation authority
ClosureComponent Callback (closure) stores a callback Initialized by the owner; the binding is immutable
ClosureSystem EntityQuery (query) creates and retains Initialized by the owner; the binding is immutable
PaintingView PaintingHandTracking (paintingHandTracking) creates and retains App/module collaborators
PaintingView PaintingCanvas (canvas) owns wrapper-managed state App/module collaborators

Composition arrows indicate a source-visible construction expression or locally owned value state; aggregation means the owner stores or receives a dependency without proving exclusive lifetime ownership.

Concurrency, scheduling, and thread safety

Evidence limit: actor isolation, async/await, or Task creation does not by itself prove background-thread execution; Sendable conformance alone does not prove thread-safe mutation.

Concern Source mechanism Verified placement or handoff Evidence
Main isolation @MainActor The cited annotation marks its attached declaration or closure as main-actor isolated. Painting/Trackers/PaintingHandTracking.swift:13
Suspension boundary async declaration or closure The source declares or crosses an asynchronous boundary; it does not by itself establish background execution. Painting/Trackers/PaintingHandTracking.swift:27
Task creation Task The source creates an unstructured task; surrounding context determines inherited actor isolation. Painting/Views/MainView.swift:19

@MainActor/MainActor.run, DispatchQueue.main, and RunLoop.main are reported as distinct isolation, queue, and event-loop mechanisms. A plain Task is kept separate from Task.detached; neither is labeled as a background thread.

Reference code

Painting/Trackers/PaintingHandTracking.swift:13 — representative execution boundary

@MainActor class PaintingHandTracking: ObservableObject {
    // ...
    let arSession = ARKitSession()
    // ...
}

State propagation, frameworks, and dependencies

Evidence limit: an import proves a source-level compilation dependency at the cited line; it does not prove runtime use, architectural adoption, or whether a Swift package is a direct application dependency.

Category Mechanism or module Verified role Evidence
State propagation ObservableObject ObservableObject supplies an observation contract. Painting/Trackers/PaintingHandTracking.swift:13
State propagation @Published A published property can emit owner-controlled changes. Painting/Trackers/PaintingHandTracking.swift:21
State propagation SwiftUI state property wrapper A SwiftUI property wrapper supplies or observes UI state. Painting/Views/MainView.swift:12
Source import RealityKit The cited file imports this module; runtime use and architectural role are not inferred. Painting/Canvas/PaintingCanvas.swift:9
Source import SwiftUI The cited file imports this module; runtime use and architectural role are not inferred. Painting/App/EntryPoint.swift:8
Source import ARKit The cited file imports this module; runtime use and architectural role are not inferred. Painting/Trackers/PaintingHandTracking.swift:9
Source import simd The cited file imports this module; runtime use and architectural role are not inferred. Painting/Extensions/Float.swift:9

receive(on:) describes downstream delivery scheduling, while subscribe(on:) describes upstream subscription/request/cancel scheduling. An import Combine alone establishes neither behavior nor a Store, reducer, Redux, or other application architecture.

Class and protocol design

Painting/Components/ClosureComponent.swift:12 — representative type boundary

struct ClosureComponent: Component {
    // ...
    let closure: (TimeInterval) -> Void
    // ...
}
Type Responsibility Depends on or conforms to
ClosureComponent Stores entity-component data or behavior Component
ClosureSystem Runs entity-component-system update logic System
MainView User-interface presentation and input forwarding View
PaintingView User-interface presentation and input forwarding View
EntryPoint Represents a feature value or composable behavior App
PaintingCanvas Owns feature behavior and collaborator lifecycle Concrete collaborators/imported frameworks
Stroke Represents a feature value or composable behavior Concrete collaborators/imported frameworks
PaintingHandTracking Owns feature behavior and collaborator lifecycle ObservableObject

No local protocol conformance is claimed as protocol-oriented design; external framework conformances are listed only as dependencies.

Access control

Symbol Access Verified effect Likely rationale
addBox (Painting/Canvas/PaintingCanvas.swift:36) private Use is restricted to the lexical declaration and same-file extensions allowed by Swift. Inference: hide an implementation step that is not part of the collaboration surface.
generateMeshData (Painting/Canvas/Stroke.swift:78) private Use is restricted to the lexical declaration and same-file extensions allowed by Swift. Inference: hide an implementation step that is not part of the collaboration surface.
calculateRadiusAndDirection (Painting/Canvas/Stroke.swift:118) private Use is restricted to the lexical declaration and same-file extensions allowed by Swift. Inference: hide an implementation step that is not part of the collaboration surface.
calculateAxes (Painting/Canvas/Stroke.swift:135) private Use is restricted to the lexical declaration and same-file extensions allowed by Swift. Inference: hide an implementation step that is not part of the collaboration surface.

Reference code

Painting/Canvas/PaintingCanvas.swift:36 — representative boundary

    private func addBox(size: SIMD3<Float>, position: SIMD3<Float>) -> Entity {
        // ...
        let box = Entity()
        // ...
    }

Swift declarations without a modifier are internal; explicit private, fileprivate, private(set), public, or open entries above are interpreted by language semantics. Objective-C/C samples instead rely on header and implementation boundaries, which are not equivalent to Swift lexical privacy.

Logic ownership and placement

Logic Owning type or file Placement rationale
Stores entity-component data or behavior ClosureComponent The source’s Component suffix makes this role explicit.
Runs entity-component-system update logic ClosureSystem The source’s System suffix makes this role explicit.
User-interface presentation and input forwarding MainView, PaintingView The source’s View suffix makes this role explicit.

Design patterns

Pattern Source evidence Purpose or tradeoff
Publisher-backed observable state Painting/Trackers/PaintingHandTracking.swift:21 Published properties notify observers while mutation remains with the state object.

Naming conventions

  • Types: Component: ClosureComponent; System: ClosureSystem; View: MainView, PaintingView.
  • Protocols: no local protocol declaration in the scanned source.
  • Methods: update, addBox, addPoint, finishStroke, updateMesh, generateMeshData, calculateRadiusAndDirection, calculateAxes.
  • Files: Painting/App/EntryPoint.swift, Painting/Components/ClosureComponent.swift, Painting/Views/MainView.swift, Painting/Views/PaintingView.swift, Painting/Canvas/PaintingCanvas.swift, Painting/Canvas/Stroke.swift.

Architecture takeaways

  • EntryPoint is the main source-visible entry or composition anchor for this sample.
  • Framework work reaches RealityKit, SwiftUI, ARKit, simd through a deliberately small high-level chain; the detailed API graph remains inside the cited implementation files.
  • Stored-property evidence identifies lifecycle collaboration; it does not by itself prove exclusive object ownership.
  • Access-control conclusions separate verified language visibility from the likely design rationale.
  • The source does not justify labeling the design protocol-oriented.

Source map

Source file Relevant symbols
Painting/App/EntryPoint.swift Cited implementation, SwiftUI, EntryPoint
Painting/Components/ClosureComponent.swift Cited implementation, ClosureComponent, ClosureSystem
Painting/Canvas/PaintingCanvas.swift Cited implementation, RealityKit, PaintingCanvas
Painting/Canvas/Stroke.swift Cited implementation, Stroke
Painting/Trackers/PaintingHandTracking.swift Cited implementation, @MainActor, async declaration or closure, ObservableObject, @Published, ARKit, PaintingHandTracking
Painting/Views/MainView.swift Task, SwiftUI state property wrapper, MainView
Painting/Extensions/Float.swift simd, Feature implementation
Painting/Views/PaintingView.swift PaintingView
Painting/Extensions/Entity.swift Feature implementation