Skip to main content

Genies iOS SDK v0.1.14

Updated: May 7, 2026

What's New

  • Public surface tightened.
    • NAFAvatarLoader and NAFAvatarBuilderBridge are now NS_REFINED_FOR_SWIFT — they appear to Swift consumers as __NAFAvatarLoader / __NAFAvatarBuilderBridge. Use NAFView / NAFAvatarSession instead.
    • NAFKitConfig.defaultShaderPresetURL and NAFKitConfig.textureSettingsURL are now internal (no public callers). Override via shaderPresetsDirectoryOverride / textureSettingsURLOverride.
  • NAFAvatarController.isBlinkEnabled. New Obj-C property gating the procedural blink node. Default YES. .staticPose loads now disable it automatically so a static avatar holds its eyes open instead of blinking.
  • Load API consolidated. loadAvatar, loadAvatarProgressive, and attachAnimation collapse into one loadAvatar(_:mode:lods:) method on both NAFView and NAFAvatarSession. The new NAFLoadMode enum picks the pipeline:
    • .staticPose — T-pose, no animation, no behavior, no silhouette. Caller manages visibility.
    • .animated(silhouette:) — Default idle from NAFDefaultAssets.idle. SDK gates first frame on idle bound. Avatar slug ignored.
    • .behavior(silhouette:) — Full smart-avatar pipeline. Default idle / talking / breathing + behavior graph keyed on avatar.slug. Default mode when mode: is omitted.
  • Custom idle / talking / breathing clips are configured once via NAFDefaultAssets.* static properties — no longer threaded through every load call.
  • NAFAvatarDefinitionNAFAvatar. Renamed throughout. JSON parser is now NAFAvatar.avatarFromJSON: (was NAFAvatarDefinition.definitionFromJSON:).
  • LOD removed from per-asset entries. NAFAssetEntry.lod and the "lod" field in each asset JSON are gone — LOD is supplied at the loader call (lods: [Int]). Strip "lod": "..." from existing definition JSONs.
  • Renamed every correlationID parameter / userInfo key to trackingID. Affects the optional trackingID: arg on loadAvatar / equip, plus the exported NAFErrorTrackingIDKey (was NAFErrorCorrelationIDKey).