Skip to main content

Integration

Integrate AvatarKit.xcframework into your Xcode project manually.
1

Download AvatarKit.xcframework

Download the latest version of AvatarKit.xcframework
2

Add AvatarKit.xcframework

  • Copy AvatarKit.xcframework into your project directory
  • In the navigator, select your project -> your target -> General
  • Scroll to Frameworks, Libraries, and Embedded Content
  • Drag AvatarKit.xcframework into item list
  • Ensure AvatarKit.xcframework is set to Do Not Embed
3

Configure Build Settings

  • In the navigator, select your project -> your target -> Build Settings
  • Add the following to Other Linker Flags: -lz & -lc++
4

Add Run Script Phase

  • In the navigator, select your project -> your target -> Build Phases
  • Click the + button and select New Run Script Phase
  • Add the following script:
XCFRAMEWORK_PATH="${PROJECT_DIR}/AvatarKit.xcframework"

if [ "${PLATFORM_NAME}" = "iphonesimulator" ]; then
  ARCH_DIR="ios-arm64-simulator"
else
  ARCH_DIR="ios-arm64"
fi

RESOURCE_BUNDLE="${XCFRAMEWORK_PATH}/${ARCH_DIR}/AvatarKit.framework/AvatarKitResources.bundle"

if [ -d "${RESOURCE_BUNDLE}" ]; then
  cp -R "${RESOURCE_BUNDLE}" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/"
  echo "Copied AvatarKitResources.bundle to ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/"
else
  echo "Error: AvatarKitResources.bundle not found at ${RESOURCE_BUNDLE}"
fi

Usage

Obtain app ID and temporary session token from Open Platform
1

Initialize SDK

AvatarSDK.initialize(
    appID: "your_app_id",
    configuration: Configuration(
        environment: .intl,
        audioFormat: AudioFormat(sampleRate: 16000),
        drivingServiceMode: .sdk,
        logLevel: .off
    )
)
2

Provide Session Token

AvatarSDK.sessionToken = "your_session_token"
3

Load Avatar

Task {
    do {
        let avatar = try await AvatarManager.shared.load(id: "your_avatar_id") { progress in }
    } catch {
        // handle error
    }
}
4

Create Avatar View

let avatarView = AvatarView(avatar: avatar)
5

Register Callbacks

let avatarController = avatarView.controller
avatarController.onFirstRendering = {}
avatarController.onConnectionState = { connectionState in }
avatarController.onConversationState = { conversationState in }
avatarController.onError = { error in }
6

Drive Avatar

// Start avatar service connection
avatarController.start()

// Trigger new conversation by sending audio data stream
avatarController.send(audioData1, end: false)
avatarController.send(audioData2, end: true)

// Interrupt current conversation
avatarController.interrupt()

// Close avatar service connection
avatarController.close()

Next Steps