Custom ✓ RCP

Custom Component

Swift field type support for custom components is determined by Reality Composer Pro's codegen and Xcode validation pipeline. Types are tested by compiling fixtures in RCP and inspecting which fields survive the build process.

52 types tested
28 supported
16 unsupported
8 untested

Type support matrix for custom component fields in Reality Composer Pro. Each Swift type was compiled in an RCP test fixture and inspected for field survival.

Primitive integer, floating-point, boolean, and string types.

Swift Type OpenUSD Type RCP Support
Bool bool ✓
Int int ✓
Int8 int ✓
Int16 int ✓
Int32 int ✓
Int64 int64 ✓
UInt uint ✓
UInt8 uchar ✓
UInt16 uint ✓
UInt32 uint ✓
UInt64 uint64 ✓
Float float ✓
Double double ✓
Float16 half ✗
String string ✓

SIMD vector types for positions, directions, and colors.

Swift Type OpenUSD Type RCP Support
SIMD2<Float> float2 ✓
SIMD3<Float> float3 ✓
SIMD4<Float> float4 ✓
SIMD2<Double> double2 ✓
SIMD3<Double> double3 ✓
SIMD4<Double> double4 ✓
SIMD2<Float16> half2 ✗
SIMD3<Float16> half3 ✗
SIMD4<Float16> half4 ✗
SIMD2<Int32> int2 ✗
SIMD3<Int32> int3 ✗
SIMD4<Int32> int4 ✗

Rotation representations used in transforms.

Swift Type OpenUSD Type RCP Support
simd_quatf quatf ✓
simd_quatd quatd ✓
simd_quath quath ✗

Collections of scalar or vector values.

Swift Type OpenUSD Type RCP Support
[Bool] bool[] ✗
[Int] int[] ✗
[Float] float[] ✗
[Double] double[] ✗
[String] string[] ✗
[SIMD3<Float>] float3[] ✗

String-based and Int-based raw value enums.

Swift Type OpenUSD Type RCP Support
String enum (RawRepresentable) token ✓
Int enum (RawRepresentable) int ✓

Nullable wrappers — partial support, needs confirmation.

Swift Type OpenUSD Type RCP Support
Bool? bool ✗ needs confirmation
Int? int ✓ needs confirmation
Float? float ✓ needs confirmation
Double? double ✗ needs confirmation
String? string ✓ needs confirmation
SIMD3<Float>? float3 ✓ needs confirmation

Types that exist in OpenUSD but have not been empirically tested in RCP.

Swift Type OpenUSD Type RCP Support
simd_double2x2 matrix2d ?
simd_double3x3 matrix3d ?
simd_double4x4 matrix4d ?
URL? asset ?
UUID? — ?
Date? — ?
Data? — ?
nested Codable struct — ?
USDA
def RealityKitCustomComponent "ModuleName_ComponentName" (
    active = true
)
{
    uniform token info:id = "ModuleName.ComponentName"
}

A custom component with an Int field produces this USDA — zero field attributes beyond info:id. The field data is serialized elsewhere in the build pipeline.

  • Custom component field data does not appear as USD attributes

    The USDA file only contains the component scaffold with info:id. Field data is serialized in the Swift/Xcode build pipeline, not the USD authoring layer.

  • The complete set of supported custom component field types is bounded by OpenUSD's finite type system, not Swift's infinite one.

    OpenUSD has a closed, enumerable set of SdfValueTypeNames. Swift's type system is open-ended and Turing-complete. RCP cannot support all Swift types — it supports the USD-serializable subset: Swift types that map directly to SdfValueTypeNames, plus special cases like enums, arrays, and optionals.

    details →
  • Custom components support only 'simpler data' types — scalars, strings, SIMD values, and enums — with Xcode build-time errors for unsupported types.

    Apple's WWDC 2023 session 'Work with Reality Composer Pro content in Xcode' explicitly defines custom component type constraints. The session demonstrates PointOfInterestComponent with String, custom enum, and Optional<String> fields, and warns that Xcode produces errors for types RCP cannot serialize.

    details →