#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 6.2.3 effective-5.10 (swiftlang-6.2.3.3.21 clang-1700.6.3.2)
#ifndef CLARITY_SWIFT_H
#define CLARITY_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#if defined(__OBJC__)
#include <Foundation/Foundation.h>
#endif
#if defined(__cplusplus)
#include <cstdint>
#include <cstddef>
#include <cstdbool>
#include <cstring>
#include <stdlib.h>
#include <new>
#include <type_traits>
#else
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <string.h>
#endif
#if defined(__cplusplus)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnon-modular-include-in-framework-module"
#if defined(__arm64e__) && __has_include(<ptrauth.h>)
# include <ptrauth.h>
#else
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-macro-identifier"
# ifndef __ptrauth_swift_value_witness_function_pointer
#  define __ptrauth_swift_value_witness_function_pointer(x)
# endif
# ifndef __ptrauth_swift_class_method_pointer
#  define __ptrauth_swift_class_method_pointer(x)
# endif
#pragma clang diagnostic pop
#endif
#pragma clang diagnostic pop
#endif

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef unsigned char char8_t;
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...) 
# endif
#endif
#if !defined(SWIFT_RUNTIME_NAME)
# if __has_attribute(objc_runtime_name)
#  define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
# else
#  define SWIFT_RUNTIME_NAME(X) 
# endif
#endif
#if !defined(SWIFT_COMPILE_NAME)
# if __has_attribute(swift_name)
#  define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
# else
#  define SWIFT_COMPILE_NAME(X) 
# endif
#endif
#if !defined(SWIFT_METHOD_FAMILY)
# if __has_attribute(objc_method_family)
#  define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
# else
#  define SWIFT_METHOD_FAMILY(X) 
# endif
#endif
#if !defined(SWIFT_NOESCAPE)
# if __has_attribute(noescape)
#  define SWIFT_NOESCAPE __attribute__((noescape))
# else
#  define SWIFT_NOESCAPE 
# endif
#endif
#if !defined(SWIFT_RELEASES_ARGUMENT)
# if __has_attribute(ns_consumed)
#  define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
# else
#  define SWIFT_RELEASES_ARGUMENT 
# endif
#endif
#if !defined(SWIFT_WARN_UNUSED_RESULT)
# if __has_attribute(warn_unused_result)
#  define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
# else
#  define SWIFT_WARN_UNUSED_RESULT 
# endif
#endif
#if !defined(SWIFT_NORETURN)
# if __has_attribute(noreturn)
#  define SWIFT_NORETURN __attribute__((noreturn))
# else
#  define SWIFT_NORETURN 
# endif
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA 
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA 
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA 
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif
#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif
#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER 
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility) 
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if !defined(SWIFT_DEPRECATED_OBJC)
# if __has_feature(attribute_diagnose_if_objc)
#  define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
# else
#  define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
# endif
#endif
#if defined(__OBJC__)
#if !defined(IBSegueAction)
# define IBSegueAction 
#endif
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
#  define SWIFT_EXTERN extern "C"
# else
#  define SWIFT_EXTERN extern
# endif
#endif
#if !defined(SWIFT_CALL)
# define SWIFT_CALL __attribute__((swiftcall))
#endif
#if !defined(SWIFT_INDIRECT_RESULT)
# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
#endif
#if !defined(SWIFT_CONTEXT)
# define SWIFT_CONTEXT __attribute__((swift_context))
#endif
#if !defined(SWIFT_ERROR_RESULT)
# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
#endif
#if defined(__cplusplus)
# define SWIFT_NOEXCEPT noexcept
#else
# define SWIFT_NOEXCEPT 
#endif
#if !defined(SWIFT_C_INLINE_THUNK)
# if __has_attribute(always_inline)
# if __has_attribute(nodebug)
#  define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug))
# else
#  define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline))
# endif
# else
#  define SWIFT_C_INLINE_THUNK inline
# endif
#endif
#if defined(_WIN32)
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
#endif
#else
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL 
#endif
#endif
#if defined(__OBJC__)
#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Foundation;
@import ObjectiveC;
#endif

#endif
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="Clarity",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__OBJC__)

typedef SWIFT_ENUM(NSInteger, ClarityApplicationFramework, open) {
  ClarityApplicationFrameworkNative = 0,
  ClarityApplicationFrameworkCordova = 1,
  ClarityApplicationFrameworkReactNative = 2,
  ClarityApplicationFrameworkIonic = 3,
};

@class NSString;
enum ClarityLogLevel : NSInteger;
/// A class that allows you to configure the Clarity SDK behavior.
SWIFT_CLASS("_TtC7Clarity13ClarityConfig")
@interface ClarityConfig : NSObject
/// Initializes a new instance of the ClarityConfig class.
/// \param projectId the unique identifier assigned to your Clarity project. You can find it on the <em>Settings</em> page of Clarity dashboard. This ID is essential for routing data to the correct Clarity project.
///
- (nonnull instancetype)initWithProjectId:(NSString * _Nonnull)projectId;
/// The unique identifier associated with the application user. This ID persists across multiple sessions on the same device.
/// note:
///
/// <ul>
///   <li>
///     <em>Deprecated</em>: This property is deprecated and would be removed in a future major version. Use <code>ClaritySDK/setCustomUserId(_:)</code> instead.
///   </li>
///   <li>
///     If <code>userId</code> isn’t provided, a random one is generated automatically.
///   </li>
///   <li>
///     Must be a base-36 string smaller than <code>1z141z4</code> and without any uppercase letters.
///   </li>
///   <li>
///     If an invalid <code>userId</code> is supplied:
///     <ul>
///       <li>
///         If <code>customUserId</code> isn’t specified, <code>userId</code> acts as the <code>customUserId</code>, and a new random <code>userId</code> is assigned.
///       </li>
///       <li>
///         If <code>customUserId</code> is specified, the invalid <code>userId</code> is ignored.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// For more flexibility in user identification, consider using the <code>ClaritySDK/setCustomUserId(_:)</code> API. However, keep in mind that <code>customUserId</code> length must be between 1 and 255 characters.
@property (nonatomic, copy) NSString * _Nullable userId SWIFT_DEPRECATED_MSG("This property is deprecated and would be removed in a future major version. Use `ClaritySDK.setCustomUserId(_:)` instead.");
/// The level of logging to show in the device’s or Xcode’s console while debugging. By default, the SDK logs nothing.
@property (nonatomic) enum ClarityLogLevel logLevel;
/// Signals to the SDK which framework is being used to develop the current application. This parameter is internal to the SDK and shouldn’t be set manually.
@property (nonatomic) enum ClarityApplicationFramework applicationFramework;
@property (nonatomic, copy) void (^ _Nullable customSignalsCallback)(NSString * _Nonnull, NSString * _Nullable);
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

typedef SWIFT_ENUM(NSInteger, ClarityLogLevel, open) {
  ClarityLogLevelVerbose = 0,
  ClarityLogLevelDebug = 1,
  ClarityLogLevelInfo = 2,
  ClarityLogLevelWarning = 3,
  ClarityLogLevelError = 4,
  ClarityLogLevelNone = 5,
};

@class UIView;
SWIFT_CLASS("_TtC7Clarity10ClaritySDK")
@interface ClaritySDK : NSObject
/// Initializes Clarity to start capturing the current session data.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         The initialization function is asynchronous and returns before Clarity is fully initialized.
///       </li>
///       <li>
///         For actions that require Clarity to be fully initialized, it’s recommended to use the <code>setOnSessionStartedCallback(_:)</code> function.
///       </li>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param config configuration of Clarity that tunes the SDK behavior (for example, which project to send to, which log level to use, and so on).
///
///
/// returns:
/// <code>true</code> if Clarity initialization is possible; otherwise <code>false</code>.
+ (BOOL)initializeWithConfig:(ClarityConfig * _Nonnull)config;
/// Pauses the Clarity session capturing until a call to the <code>resume()</code> function is made.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
+ (void)pause;
/// Resumes the Clarity session capturing only if it was previously paused by a call to the <code>pause()</code> function.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
+ (void)resume;
/// Checks if Clarity session capturing is currently paused based on an earlier call to the <code>pause()</code> function.
///
/// returns:
/// <code>true</code> if Clarity session capturing is currently in the paused state based on an earlier call to the <code>pause()</code> function; otherwise <code>false</code>.
+ (BOOL)isPaused SWIFT_WARN_UNUSED_RESULT;
/// Forces Clarity to start a new session asynchronously.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         This function is asynchronous and returns before the new session is started.
///       </li>
///       <li>
///         Use the <code>callback</code> parameter to execute logic that needs to run after the new session begins.
///       </li>
///       <li>
///         Events that occur before invoking the callback are associated with the previous session.
///       </li>
///       <li>
///         To ensure proper association of custom tags, user ID, or session ID with the new session, set them within the callback.
///       </li>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param callback a callback that is invoked when the new session starts. The callback receives the new session ID as a string parameter.
///
///
/// returns:
/// <code>true</code> if a new session can start asynchronously; otherwise <code>false</code>.
+ (BOOL)startNewSessionWithCallback:(void (^ _Nullable)(NSString * _Nonnull))callback;
/// Masks a specific <code>UIView</code> to prevent Clarity from capturing its content (text or images). Masked content is replaced with placeholders.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param view the <code>UIView</code> instance to mask its content.
///
+ (void)maskView:(UIView * _Nonnull)view;
/// Unmasks a specific <code>UIView</code> to allow Clarity to capture its content, even if it’s a child of a masked view or within a masked screen.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param view the <code>UIView</code> instance to unmask its content.
///
+ (void)unmaskView:(UIView * _Nonnull)view;
/// Sets a custom user ID for the current session. This ID can be used to filter sessions on the Clarity dashboard.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         To ensure that the custom user ID is associated with the correct session, it’s recommended to call this function within the callbacks of <code>setOnSessionStartedCallback(_:)</code> or <code>startNewSession(callback:)</code>.
///       </li>
///       <li>
///         Unlike the <code>userID</code>, the <code>customUserId</code> value has fewer restrictions.
///       </li>
///       <li>
///         We recommend <em>not</em> to set any Personally Identifiable Information (PII) values inside this field.
///       </li>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param customUserId the custom user ID to associate with the current session. The value must be a nonempty string, with a maximum length of 255 characters, and can’t consist only of whitespace.
///
///
/// returns:
/// <code>true</code> if the custom user ID was set successfully; otherwise <code>false</code>.
+ (BOOL)setCustomUserId:(NSString * _Nonnull)customUserId;
/// Sets a custom session ID for the current session. This ID can be used to filter sessions on the Clarity dashboard.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         To ensure that the custom session ID is associated with the correct session, it’s recommended to call this function within the callbacks of <code>setOnSessionStartedCallback(_:)</code> or <code>startNewSession(callback:)</code>.
///       </li>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param customSessionId the custom session ID to associate with the current session. The value must be a nonempty string, with a maximum length of 255 characters, and can’t consist only of whitespace.
///
///
/// returns:
/// <code>true</code> if the custom session ID was set successfully; otherwise <code>false</code>.
+ (BOOL)setCustomSessionId:(NSString * _Nonnull)customSessionId;
/// Returns the ID of the currently active Clarity session if a session has already started; otherwise <code>nil</code>.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         <em>Deprecated:</em> This API is deprecated and will be removed in a future major version. Please use <code>getCurrentSessionUrl()</code> instead.
///       </li>
///       <li>
///         The session ID can be used to correlate Clarity sessions with other telemetry services.
///       </li>
///       <li>
///         Initially, this function might return <code>nil</code> until a Clarity session begins.
///       </li>
///       <li>
///         To ensure a valid session ID, use this method within the callbacks of <code>setOnSessionStartedCallback(_:)</code> or <code>startNewSession(callback:)</code>.
///       </li>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
///
/// returns:
/// a string representing the ID of the currently active Clarity session if a session has already started; otherwise <code>nil</code>.
+ (NSString * _Nullable)getCurrentSessionId SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_MSG("This function is deprecated and will be removed in a future major version. Please use `ClaritySDK.getCurrentSessionUrl()` instead.");
/// Returns the URL of the current Clarity session recording on the Clarity dashboard if a session has already started; otherwise <code>nil</code>.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         Initially, this function might return <code>nil</code> until a Clarity session begins.
///       </li>
///       <li>
///         To ensure a valid session URL, use this method within the callbacks of <code>setOnSessionStartedCallback(_:)</code> or <code>startNewSession(callback:)</code>.
///       </li>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
///
/// returns:
/// a string representing the URL of the current Clarity session recording on the Clarity dashboard if a session has already started; otherwise <code>nil</code>.
+ (NSString * _Nullable)getCurrentSessionUrl SWIFT_WARN_UNUSED_RESULT;
/// Sets a custom tag for the current session. This tag can be used to filter sessions on the Clarity dashboard.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         To ensure that the custom tag is associated with the correct session, it’s recommended to call this function within the callbacks of <code>setOnSessionStartedCallback(_:)</code> or <code>startNewSession(callback:)</code>.
///       </li>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param key the key for the custom tag. The value must be a nonempty string, with a maximum length of 255 characters, and can’t consist only of whitespace.
///
/// \param value the value for the custom tag. The value must be a nonempty string, with a maximum length of 255 characters, and can’t consist only of whitespace.
///
///
/// returns:
/// <code>true</code> if the custom tag was set successfully; otherwise <code>false</code>.
+ (BOOL)setCustomTagWithKey:(NSString * _Nonnull)key value:(NSString * _Nonnull)value;
/// Sets a custom tag for the current session. This tag can be used to filter sessions on the Clarity dashboard.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         To ensure that the custom tag is associated with the correct session, it’s recommended to call this function within the callbacks of <code>setOnSessionStartedCallback(_:)</code> or <code>startNewSession(callback:)</code>.
///       </li>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param key the key for the custom tag. The value must be a nonempty string, with a maximum length of 255 characters, and can’t consist only of whitespace.
///
/// \param values the set of values for the custom tag. Each value must be a nonempty string, with a maximum length of 255 characters, and can’t consist only of whitespace.
///
///
/// returns:
/// <code>true</code> if the custom tag was set successfully; otherwise <code>false</code>.
+ (BOOL)setCustomTagWithKey:(NSString * _Nonnull)key values:(NSSet<NSString *> * _Nonnull)values;
/// Sends a custom event to the current Clarity session. These custom events can be used to track specific user interactions or actions that Clarity’s built-in event tracking doesn’t capture.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         This API can be called multiple times per page to track various user actions.
///       </li>
///       <li>
///         Each custom event is logged individually and can be filtered, viewed, and analyzed on the Clarity dashboard.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param value the name of the custom event. The value must be a nonempty string, with a maximum length of 254 characters, and can’t consist only of whitespace.
///
///
/// returns:
/// <code>true</code> if the custom event was sent successfully; otherwise <code>false</code>.
+ (BOOL)sendCustomEventWithValue:(NSString * _Nonnull)value;
/// This function allows you to provide a custom screen name that replaces the default screen name. The default name is automatically generated based on the currently presented view controller’s title or type.
/// <ul>
///   <li>
///     Example:
///     <ul>
///       <li>
///         If the presented view controller is a <code>TabBarController</code> with the title property set to “Main Tab Bar”, and <code>setCurrentScreenName("Settings")</code> is called, the screen name is tracked as “Settings”.
///       </li>
///       <li>
///         If <code>setCurrentScreenName(nil)</code> is called on the same view controller, the screen name is tracked as “Main Tab Bar” (or “TabBarController” in the next major release).
///       </li>
///     </ul>
///   </li>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         Clarity starts a new page whenever the screen name changes.
///       </li>
///       <li>
///         To mask or disallow a screen, specify the view controller’s type that is displayed as “ViewController” custom tag of the page visit on the Clarity dashboard’s recordings. For example, to mask the view controller in the previous example, mask the “&TabBarController” screen instead of “&Settings”.
///       </li>
///       <li>
///         The custom screen name is set globally and persists across all subsequent view controllers until explicitly reset.
///       </li>
///       <li>
///         For accurate tracking, call this function immediately after adding the relevant views to the view controller’s view hierarchy, and within the same CATransaction (for example, inside <code>viewIsAppearing</code>).
///       </li>
///       <li>
///         The view controller’s title will no longer be used to generate the default screen name in the next major release.
///       </li>
///       <li>
///         This function should only be called on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param name the desired screen name. The value must be a nonempty string, with a maximum length of 255 characters, and can’t consist only of whitespace. Set to <code>nil</code> to reset.
///
///
/// returns:
/// <code>true</code> if the specified screen name was set successfully; otherwise <code>false</code>.
+ (BOOL)setCurrentScreenName:(NSString * _Nullable)name;
/// Sets a callback function that’s invoked whenever a new Clarity session starts or an existing session is resumed at app startup.
/// <ul>
///   <li>
///     Notes:
///     <ul>
///       <li>
///         If the callback is set after a session has already started, the callback is invoked right away with the current session ID.
///       </li>
///       <li>
///         The specified callback is guaranteed to run on the main thread.
///       </li>
///     </ul>
///   </li>
/// </ul>
/// \param callback the callback to be invoked whenever a Clarity session starts. The callback receives the new or resumed session ID as a string parameter.
///
///
/// returns:
/// <code>true</code> if the callback was set successfully; otherwise <code>false</code>.
+ (BOOL)setOnSessionStartedCallback:(void (^ _Nonnull)(NSString * _Nonnull))callback;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

#endif
#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#if defined(__cplusplus)
#endif
#pragma clang diagnostic pop
#endif

#else
#error unsupported Swift architecture
#endif
