Xcode plugins can now extend Reality Composer Pro 3 by registering custom ECS components, systems, animation actions, and Script Graph nodes so artists can iterate on 3D content directly inside the editor without rebuilding the app.
⢠Artists and designers can tweak custom component properties (like water level or vortex speed) in real time inside the editor, dramatically reducing iteration cycles
⢠Custom EntityAction animations can be placed on the sequencer timeline giving non-engineers expressive control over gameplay logic
⢠The same Swift component/system code is shared between the RCP plugin target and the final app target, eliminating duplication
Demonstrates a minimal Reality Composer Pro 3 plugin that registers a custom ECS component and system so artists can drag a waterLevel slider in the editor and see the cauldron surface move in real time.
import RealityKit
import RealityComposerPro
// MARK: - Custom Component
public struct CauldronComponent: Component, Codable {
/// Normalized water level: 0 = empty, 1 = full
public var waterLevel: Float = 0.5
/// Speed of the vortex rotation in radians/sec
public var rotationSpeed: Float = 0.0
/// How deep the vortex funnel becomes (0 = flat)
public var vortexCoefficient: Float = 0.0
public init() {}
}
// MARK: - Custom System
public class CauldronSystem: System {
private static let query = EntityQuery(
where: .has(CauldronComponent.self)
)
public required init(scene: Scene) {}
public func update(context: SceneUpdateContext) {
for entity in context.entities(matching: Self.query,
updatingSystemWhen: .rendering) {
guard let cauldron = entity.components[CauldronComponent.self],
let waterMesh = entity.findEntity(named: "WaterSurface")
else { continue }
// Lift the water plane based on the normalized level
let baseY: Float = -0.15
let range: Float = 0.30
waterMesh.position.y = baseY + cauldron.waterLevel * range
// Push shader graph parameters when a ModelComponent is present
if var model = waterMesh.components[ModelComponent.self] {
if var param = model.materials.first as? ShaderGraphMaterial {
try? param.setParameter(
name: "RotationSpeed",
value: .float(cauldron.rotationSpeed)
)
try? param.setParameter(
name: "VortexCoefficient",
value: .float(cauldron.vortexCoefficient)
)
model.materials = [param]
waterMesh.components.set(model)
}
}
}
}
}
// MARK: - Plugin Entry Point
public class CauldronPlugin: RealityComposerProPlugin {
public required init() {}
public func setup(context: RealityComposerProPluginContext) {
context.registerComponent(CauldronComponent.self)
context.registerSystem(CauldronSystem.self)
}
}
@_cdecl("createRealityComposerProPlugin")
public func createRealityComposerProPlugin() -> UnsafeMutableRawPointer {
return Unmanaged.passRetained(CauldronPlugin()).toOpaque()
}Liquid Glass is Apple's new material and visual design language introduced in iOS 27, bringing translucent, refractive glass-like surfaces to system and custom UI elements. It replaces the frosted vibrancy aesthetic with a more dynamic, depth-aware material that responds to content beneath it.
PaperKit is Apple's full-featured canvas framework ā previously internal-only ā now publicly available in iOS/macOS/visionOS 27. It powers the drawing and markup experience in Notes, Preview, and Freeform, giving developers access to a complete pencil, shapes, images, and text canvas with a rich data model.
Xcode 27 introduces a fully customizable toolbar and theme system, untitled scratch projects, coding agent integration directly in the editor, and the new Device Hub for evaluating apps across simulators and physical devices side-by-side.
In-depth guide
RealityKit & USDKit in iOS 27 āReality Composer Pro will prompt users to trust each plugin on first load; every rebuild of the plugin requires restarting the editor; the createRealityComposerProPlugin() entry point must be exported as a C symbol; EntityAction must be Codable to serialize into a Reality File; RealityComposerPro Swift package is added automatically only when you use 'Run With Xcode' in the simulation toolbar
Requires Apple Silicon Mac to build and run Reality Composer Pro 3; plugin framework must be built as a dynamic library compatible with the host editor process
iOS 27 introduces new SwiftUI drag and drop APIs including reorderable, reorderContainer, dragContainer, and configuration modifiers that enable reordering within and across collections, multi-item drag, and fine-grained control over how data is transferred during drag and drop operations.