Changelog

All notable changes to the Conferbot iOS SDK are documented in this file. This is the only changelog for the SDK (the old copy in docs/ was merged in here).

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[2.0.0] - 2026-10-16

Everything since 1.0.0: the SDK now behaves like the Conferbot web widget, from the launcher to the AI agent, the handover and the help centre. docs/PARITY.md tracks each feature with its issue and its files.

The 1.0.0 tag does not compile (duplicate declarations, missing members, SwiftUI views marked iOS 14 that use iOS 15 APIs; #1). Apps that pinned 1.0.0 should move to the next release. The changes below are listed against 1.0.0's source.

Breaking changes & migration

  1. ChatViewController hosts the SwiftUI chat on iOS 15+. ChatViewController(), ConferBot.shared.present(from:) and pushing the controller are unchanged, and ChatViewController(enableKnowledgeBase: Bool? = nil) is new. On iOS 15 and later the controller is a UIHostingController child running ChatView, so UIKit apps get the home screen, help centre, "Your requests", step cards, wait cards and games, formatted replies and the chat menu (#96, #56, #81, #84).
    • The navigation bar is hidden while the chat is on screen (the chat draws the bot's own header with ✕) and put back as it was when the chat goes. The chat no longer sets your navigation bar's appearance or bar button items; customise it in the dashboard. The interactive swipe-back may not work while the bar is hidden; ✕ pops or dismisses.
    • The UITableView, MessageCell, TypingIndicatorCell and ChatInputView are no longer what is on screen on iOS 15+. MessageCell and ChatInputView stay public for custom layouts.
    • ChatViewController's UITableViewDataSource, UITableViewDelegate and ChatInputViewDelegate conformances (and their public tableView(_:...) / chatInputView(_:...) methods) are gone.
    • iOS 13 / 14 keep a UIKit-drawn chat (UIKitChatViewController, internal) in the navigation bar as before: plain-text bubbles, typing dots, the composer, the menu with Email me this chat and Sound on / off. Step cards, live chat cards, the help centre, home screen, wait cards and requests need iOS 15.
  2. The SwiftUI views need iOS 15 (@available(iOS 15.0, *); they were marked iOS 14 but use AsyncImage and .task) (#1).
  3. ChatView(enableKnowledgeBase: Bool? = nil) (was Bool = true). The owner's help centre setting in the dashboard decides: nil (the default) and true follow it, false hides the Help tab even when the owner turned it on. It can no longer turn the help centre on against the owner's setting (the server sends no articles then) (#33).
  4. Node handlers (only for apps that write their own):
    • NodeHandler.handle(node:state:) is @MainActor, and the protocol has handleResponse(_:node:state:) async -> NodeResult? (default nil: move on along the first edge) for the visitor's answer.
    • NodeResult has new cases: .port(String, fallback: String?) (leave by an exact handle), .invalid(String, uiState: NodeUIState?, inCard: Bool) (a refused answer; the step waits) and .end. NodeUIState has .rich(type:data:nodeId:). An exhaustive switch needs the new cases.
    • Removed: MissingNodeHandlers.swift and the guessed-key handler classes that duplicated the registry (for example SendMessageHandler, AskQuestionHandler, ButtonsNodeHandler, TextInputNodeHandler), DisplayHandlerRegistry, IntegrationHandlerRegistry, BaseIntegrationHandler, IntegrationNodeHandler, NodeState, NodeHandlerResult, and the device-side AI handlers (OpenAIHandler, ClaudeHandler, GeminiHandler, GroqHandler, PerplexityHandler, CustomLLMHandler, DialogflowHandler, GptNodeHandler). GPT, AI and integration steps run on Conferbot's server; the app holds no AI key (#26, #28, #45). NodeHandlerRegistry registers every step of the shared spec.
    • InputValidation in Utils/ValidationUtils.swift is now ValidationKind (it clashed with the node input validation type of the same name) (#1).
  5. The SwiftUI node views are gone (NodeComponents.swift: NodeRenderer, NodeRenderState, TextInputView, SingleChoiceView, ButtonsView, RatingView, CalendarPicker, PaymentView and the rest, with their ...State types and ChatTheme). The chat draws each waiting step itself (FlowStepView). A custom UI answers a step with ConferBot.shared.answerStep(_:forNodeId:) and FlowStepAnswer, reading the step from waitingStep(_:) (#45).
  6. identify(user: ConferBotUser?) takes an optional. identify(user: nil) signs the user out: their "Your requests" list goes at once, an answer still on its way for them is ignored, greet-by-name texts fall back, and the device's push token is unregistered from their conversation. Existing identify(user:) calls compile unchanged (#86, #97).
  7. Push. registerPushToken(_:) is deprecated (renamed setPushToken(_:type:)) and still works. New: setPushToken(_ deviceToken: Data), setPushToken(_:type:), unregisterPush(). handlePushNotification(_:open:) gained open (default true: a tap opens its conversation; false only counts it unread), is @discardableResult, and returns true only for a Conferbot push of this bot (1.0.0 took any type: "conferbot_message"). APIClient.registerPushToken(token:chatSessionId:) is deprecated for registerPushToken(_ body:) (#97).
  8. ChatState.resolveVariables(text:) fills {x}, ${x}, {{x}}, ${ANSWERS.x} and $${x} as the web does, from the answers, then the flow variables, then the visitor's details. An unknown, null or empty variable now shows nothing (1.0.0 left the placeholder in the text). resolveVariables(html:) escapes the values for owner HTML. resolveVariablesInDictionary was removed (#28, #67).
  9. endSession(clearStorage:) no longer sends end-chat (the server takes it only from an agent). While the visitor waits for a person it leaves the queue instead (#59).
  10. English wording. The SDK's own words come from the web widget's table, so some English texts changed, for example "Related Articles" is "Related articles" and "Searching..." is "Searching…". UI tests that match the old English need updating. What the owner wrote in the dashboard is shown as written (#89).

Added

Changed

Fixed

Security

1.0.0 - 2026-04-23

Added