#if 0
#elif defined(__arm64e__) && __arm64e__
// Generated by Apple Swift version 6.1.2 effective-5.10 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)
#ifndef SENTRY_SWIFT_H
#define SENTRY_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 AppKit;
@import CoreFoundation;
@import Dispatch;
@import Foundation;
@import ObjectiveC;
#endif

#import <Sentry/Sentry.h>

#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="Sentry",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__OBJC__)

@class NSHTTPURLResponse;
/// Parses HTTP responses from the Sentry server for rate limits.
/// When a rate limit is reached, the SDK should stop data transmission
/// until the rate limit has expired.
SWIFT_PROTOCOL_NAMED("RateLimits")
@protocol SentryRateLimits <NSObject>
/// Check if a data category has reached a rate limit.
/// \param category the type e.g. event, error, session, transaction, etc.
///
///
/// returns:
/// <code>true</code> if limit is reached, <code>false</code> otherwise.
- (BOOL)isRateLimitActive:(NSUInteger)category SWIFT_WARN_UNUSED_RESULT;
/// Should be called for each HTTP response of the Sentry server. It checks the response for any
/// communicated rate limits.
/// \param response The response from the server
///
- (void)update:(NSHTTPURLResponse * _Nonnull)response;
@end

@class SentryRetryAfterHeaderParser;
@class SentryRateLimitParser;
@protocol SentryCurrentDateProvider;
/// Parses HTTP responses from the Sentry server for rate limits and stores them
/// in memory. The server can communicate a rate limit either through the 429
/// status code with a “Retry-After” header or through any response with a custom
/// “X-Sentry-Rate-Limits” header. This class is thread safe.
SWIFT_CLASS_NAMED("DefaultRateLimits")
@interface SentryDefaultRateLimits : NSObject <SentryRateLimits>
- (nonnull instancetype)initWithRetryAfterHeaderParser:(SentryRetryAfterHeaderParser * _Nonnull)retryAfterHeaderParser andRateLimitParser:(SentryRateLimitParser * _Nonnull)rateLimitParser currentDateProvider:(id <SentryCurrentDateProvider> _Nonnull)currentDateProvider OBJC_DESIGNATED_INITIALIZER;
/// <code>category: UInt</code> is the unsigned integer representation for SentryDataCategory since we cannot expose
/// functions written in Swift.
- (BOOL)isRateLimitActive:(NSUInteger)category SWIFT_WARN_UNUSED_RESULT;
- (void)update:(NSHTTPURLResponse * _Nonnull)response;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol SentryRandomProtocol;
@class SentryThreadWrapper;
@protocol SentryProcessInfoSource;
@class SentryDispatchQueueWrapper;
@protocol SentryNSNotificationCenterWrapper;
@class SentryBinaryImageCache;
@class SentryDebugImageProvider;
@class SentrySysctl;
@class SentryDefaultCurrentDateProvider;
SWIFT_CLASS_NAMED("Dependencies")
@interface SentryDependencies : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentryRandomProtocol> _Nonnull random;)
+ (id <SentryRandomProtocol> _Nonnull)random SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryThreadWrapper * _Nonnull threadWrapper;)
+ (SentryThreadWrapper * _Nonnull)threadWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;)
+ (id <SentryProcessInfoSource> _Nonnull)processInfoWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryDispatchQueueWrapper * _Nonnull dispatchQueueWrapper;)
+ (SentryDispatchQueueWrapper * _Nonnull)dispatchQueueWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentryNSNotificationCenterWrapper> _Nonnull notificationCenterWrapper;)
+ (id <SentryNSNotificationCenterWrapper> _Nonnull)notificationCenterWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryBinaryImageCache * _Nonnull binaryImageCache;)
+ (SentryBinaryImageCache * _Nonnull)binaryImageCache SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryDebugImageProvider * _Nonnull debugImageProvider;)
+ (SentryDebugImageProvider * _Nonnull)debugImageProvider SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentrySysctl * _Nonnull sysctlWrapper;)
+ (SentrySysctl * _Nonnull)sysctlWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryDefaultCurrentDateProvider * _Nonnull dateProvider;)
+ (SentryDefaultCurrentDateProvider * _Nonnull)dateProvider SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@interface SentryEvent (SWIFT_EXTENSION(Sentry))
- (BOOL)isMetricKitEvent SWIFT_WARN_UNUSED_RESULT;
@end

@class NSString;
SWIFT_CLASS("_TtC6Sentry19HTTPHeaderSanitizer")
@interface HTTPHeaderSanitizer : NSObject
+ (NSDictionary<NSString *, NSString *> * _Nonnull)sanitizeHeaders:(NSDictionary<NSString *, NSString *> * _Nonnull)headers SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSDate;
/// Parses a string in the format of http date to NSDate. For more details see:
/// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date.
/// SentryHttpDateParser is thread safe.
SWIFT_CLASS_NAMED("HttpDateParser")
@interface SentryHttpDateParser : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (NSDate * _Nullable)dateFromString:(NSString * _Nonnull)string SWIFT_WARN_UNUSED_RESULT;
@end

@class NSNumber;
@protocol SentryObjCRuntimeWrapper;
SWIFT_CLASS("_TtC6Sentry13LoadValidator")
@interface LoadValidator : NSObject
+ (void)checkForDuplicatedSDKWithImageName:(NSString * _Nonnull)imageName imageAddress:(NSNumber * _Nonnull)imageAddress imageSize:(NSNumber * _Nonnull)imageSize objcRuntimeWrapper:(id <SentryObjCRuntimeWrapper> _Nonnull)objcRuntimeWrapper dispatchQueueWrapper:(SentryDispatchQueueWrapper * _Nonnull)dispatchQueueWrapper;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry17SentryApplication_")
@protocol SentryApplication
@property (nonatomic, readonly) BOOL mainThread_isActive;
@end

@interface NSApplication (SWIFT_EXTENSION(Sentry)) <SentryApplication>
@property (nonatomic, readonly) BOOL mainThread_isActive;
@end

@class NSOperationQueue;
@class NSNotification;
SWIFT_PROTOCOL("_TtP6Sentry33SentryNSNotificationCenterWrapper_")
@protocol SentryNSNotificationCenterWrapper
- (void)addObserver:(id _Nonnull)observer selector:(SEL _Nonnull)aSelector name:(NSNotificationName _Nullable)aName object:(id _Nullable)anObject;
- (id <NSObject> _Nonnull)addObserverForName:(NSNotificationName _Nullable)name object:(id _Nullable)obj queue:(NSOperationQueue * _Nullable)queue usingBlock:(void (^ _Nonnull)(NSNotification * _Nonnull))block SWIFT_WARN_UNUSED_RESULT;
- (void)removeObserver:(id _Nonnull)observer name:(NSNotificationName _Nullable)aName object:(id _Nullable)anObject;
- (void)postNotification:(NSNotification * _Nonnull)notification;
@end

@interface NSNotificationCenter (SWIFT_EXTENSION(Sentry)) <SentryNSNotificationCenterWrapper>
@end

@class SentryDsn;
@class SentryLog;
enum SentryLastRunStatus : NSInteger;
@class SentryScope;
@protocol NSURLSessionDelegate;
@class NSURLSession;
@class SentryProfileOptions;
@class SentryHttpStatusCodeRange;
@class SentryExperimentalOptions;
/// Configuration options for the Sentry SDK.
SWIFT_CLASS_NAMED("Options")
@interface SentryOptions : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// The DSN tells the SDK where to send the events to. If this value is not provided, the SDK will
/// not send any events.
@property (nonatomic, copy) NSString * _Nullable dsn;
/// The parsed internal DSN.
@property (nonatomic, strong) SentryDsn * _Nullable parsedDsn;
/// Turns debug mode on or off. If debug is enabled SDK will attempt to print out useful debugging
/// information if something goes wrong.
/// @note Default is @c false.
@property (nonatomic) BOOL debug;
/// Minimum LogLevel to be used if debug is enabled.
/// @note Default is kSentryLevelDebug.
@property (nonatomic) SentryLevel diagnosticLevel;
/// This property will be filled before the event is sent.
@property (nonatomic, copy) NSString * _Nullable releaseName;
/// The distribution of the application.
/// @discussion Distributions are used to disambiguate build or deployment variants of the same
/// release of an application. For example, the dist can be the build number of an Xcode build.
@property (nonatomic, copy) NSString * _Nullable dist;
/// The environment used for events if no environment is set on the current scope.
/// @note Default value is “production”.
@property (nonatomic, copy) NSString * _Nonnull environment;
/// Specifies whether this SDK should send events to Sentry. If set to @c false events will be
/// dropped in the client and not sent to Sentry. Default is @c true.
@property (nonatomic) BOOL enabled;
/// Controls the flush duration when calling SentrySDK/close.
@property (nonatomic) NSTimeInterval shutdownTimeInterval;
/// When enabled, the SDK sends crashes to Sentry.
/// @note Disabling this feature disables the SentryWatchdogTerminationTrackingIntegration,
/// because SentryWatchdogTerminationTrackingIntegration would falsely report every crash as watchdog
/// termination.
/// @note Default value is @c true.
/// @note Crash reporting is automatically disabled if a debugger is attached.
@property (nonatomic) BOOL enableCrashHandler;
/// When enabled, the SDK captures uncaught NSExceptions. As this feature uses swizzling, disabling
/// enableSwizzling also disables this feature.
/// @discussion This option registers the <code>NSApplicationCrashOnExceptions</code> UserDefault,
/// so your macOS application crashes when an uncaught exception occurs. As the Cocoa Frameworks are
/// generally not exception-safe on macOS, we recommend this approach because the application could
/// otherwise end up in a corrupted state.
/// @warning Don’t use this in combination with <code>SentryCrashExceptionApplication</code>. Either enable this
/// feature or use the <code>SentryCrashExceptionApplication</code>. Having both enabled can lead to duplicated
/// reports.
/// @note Default value is @c false.
@property (nonatomic) BOOL enableUncaughtNSExceptionReporting;
/// When enabled, the SDK reports SIGTERM signals to Sentry.
/// It’s crucial for developers to understand that the OS sends a SIGTERM to their app as a prelude
/// to a graceful shutdown, before resorting to a SIGKILL. This SIGKILL, which your app can’t catch
/// or ignore, is a direct order to terminate your app’s process immediately. Developers should be
/// aware that their app can receive a SIGTERM in various scenarios, such as CPU or disk overuse,
/// watchdog terminations, or when the OS updates your app.
/// @note The default value is @c false.
@property (nonatomic) BOOL enableSigtermReporting;
/// How many breadcrumbs do you want to keep in memory?
/// @note Default is 100.
@property (nonatomic) NSUInteger maxBreadcrumbs;
/// When enabled, the SDK adds breadcrumbs for each network request. As this feature uses swizzling,
/// disabling enableSwizzling also disables this feature.
/// @discussion If you want to enable or disable network tracking for performance monitoring, please
/// use enableNetworkTracking instead.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableNetworkBreadcrumbs;
/// The maximum number of envelopes to keep in cache.
/// @note Default is 30.
@property (nonatomic) NSUInteger maxCacheItems;
/// This block can be used to modify the event before it will be serialized and sent.
@property (nonatomic, copy) SentryBeforeSendEventCallback _Nullable beforeSend;
/// Use this callback to drop or modify a span before the SDK sends it to Sentry. Return nil to
/// drop the span.
@property (nonatomic, copy) SentryBeforeSendSpanCallback _Nullable beforeSendSpan;
/// When enabled, the SDK sends logs to Sentry. Logs can be captured using the SentrySDK.logger
/// API, which provides structured logging with attributes.
/// @note Default value is @c false.
@property (nonatomic) BOOL enableLogs;
/// Use this callback to drop or modify a log before the SDK sends it to Sentry. Return nil to
/// drop the log.
@property (nonatomic, copy) SentryLog * _Nullable (^ _Nullable beforeSendLog)(SentryLog * _Nonnull);
/// This block can be used to modify the breadcrumb before it will be serialized and sent.
@property (nonatomic, copy) SentryBeforeBreadcrumbCallback _Nullable beforeBreadcrumb;
/// You can use this callback to decide if the SDK should capture a screenshot or not. Return @c true
/// if the SDK should capture a screenshot, return @c false if not. This callback doesn’t work for
/// crashes.
@property (nonatomic, copy) SentryBeforeCaptureScreenshotCallback _Nullable beforeCaptureScreenshot;
/// You can use this callback to decide if the SDK should capture a view hierarchy or not. Return
/// @c true if the SDK should capture a view hierarchy, return @c false if not. This callback doesn’t
/// work for crashes.
@property (nonatomic, copy) SentryBeforeCaptureScreenshotCallback _Nullable beforeCaptureViewHierarchy;
/// A block called shortly after the initialization of the SDK when the last program execution
/// terminated with a crash.
/// @discussion This callback is only executed once during the entire run of the program to avoid
/// multiple callbacks if there are multiple crash events to send. This can happen when the program
/// terminates with a crash before the SDK can send the crash event. You can look into beforeSend
/// if you prefer a callback for every event.
/// @warning It is not guaranteed that this is called on the main thread.
/// @note Crash reporting is automatically disabled if a debugger is attached.
@property (nonatomic, copy) SentryOnCrashedLastRunCallback _Nullable onCrashedLastRun SWIFT_DEPRECATED_MSG("Use onLastRunStatusDetermined instead, which is called regardless of whether the app crashed.");
/// A block called shortly after the initialization of the SDK when the crash status of the
/// last program execution has been determined.
/// This callback is invoked regardless of whether the app crashed or not:
/// <ul>
///   <li>
///     If the last run ended with a crash, <code>status</code> is <code>SentryLastRunStatus/didCrash</code> and
///     <code>crashEvent</code> contains the crash event.
///   </li>
///   <li>
///     If the last run did <em>not</em> end with a crash, <code>status</code> is
///     <code>SentryLastRunStatus/didNotCrash</code> and <code>crashEvent</code> is <code>nil</code>.
///   </li>
/// </ul>
/// This callback is only executed once per <code>SentrySDK/start(configureOptions:)</code> lifecycle.
/// warning:
/// It is not guaranteed that this is called on the main thread.
/// note:
/// Crashes that occur while a debugger is attached are not recorded.
/// In that case, the callback reports <code>SentryLastRunStatus/didNotCrash</code>
/// even though the app did crash.
@property (nonatomic, copy) void (^ _Nullable onLastRunStatusDetermined)(enum SentryLastRunStatus, SentryEvent * _Nullable);
/// Indicates the percentage of events being sent to Sentry.
/// @discussion Specifying 0 discards all events, 1.0 or nil sends all events, 0.01 collects 1% of
/// all events.
/// @note The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets
/// it to the default of 1.0.
/// @note The default is 1.
@property (nonatomic, strong) NSNumber * _Nullable sampleRate;
/// Whether to enable automatic session tracking or not.
/// @note Default is @c true.
@property (nonatomic) BOOL enableAutoSessionTracking;
/// Whether to attach the top level <code>operationName</code> node of HTTP json requests to HTTP breadcrumbs
/// @note Default is @c false.
@property (nonatomic) BOOL enableGraphQLOperationTracking;
/// Whether to enable Watchdog Termination tracking or not.
/// @note This feature requires the SentryCrashIntegration being enabled, otherwise it would
/// falsely report every crash as watchdog termination.
/// @note Default is @c true.
@property (nonatomic) BOOL enableWatchdogTerminationTracking;
/// The interval to end a session after the App goes to the background.
/// @note The default is 30 seconds.
@property (nonatomic) NSUInteger sessionTrackingIntervalMillis;
/// When enabled, stack traces are automatically attached to all messages logged. Stack traces are
/// always attached to exceptions but when this is set stack traces are also sent with messages.
/// Stack traces are only attached for the current thread.
/// @note This feature is enabled by default.
@property (nonatomic) BOOL attachStacktrace;
/// When enabled, all threads are attached with full stack traces to all captured events.
/// This requires suspending all threads briefly to collect their stack traces.
/// When disabled (the default), only the current thread gets a stack trace.
/// @note <code>attachStacktrace</code> must also be enabled for this to have any effect.
/// @note Default is <code>false</code>.
@property (nonatomic) BOOL attachAllThreads;
/// The maximum size for each attachment in bytes.
/// @note Default is 200 MiB (200 ✕ 1024 ✕ 1024 bytes).
/// @note Please also check the maximum attachment size of relay to make sure your attachments don’t
/// get discarded there:
/// https://docs.sentry.io/product/relay/options/
@property (nonatomic) NSUInteger maxAttachmentSize;
/// When enabled, the SDK sends personal identifiable along with events.
/// @note The default is @c false.
/// @discussion When the user of an event doesn’t contain an IP address, and this flag is @c true, the
/// SDK sets sdk.settings.infer_ip to auto to instruct the server to use the connection IP address as
/// the user address. Due to backward compatibility concerns, Sentry sets sdk.settings.infer_ip to
/// auto out of the box for Cocoa. If you want to stop Sentry from using the connections IP address,
/// you have to enable Prevent Storing of IP Addresses in your project settings in Sentry.
@property (nonatomic) BOOL sendDefaultPii;
/// When enabled, the SDK tracks performance for UIViewController subclasses and HTTP requests
/// automatically. It also measures the app start and slow and frozen frames.
/// @note The default is @c true.
/// @note Performance Monitoring must be enabled for this flag to take effect. See:
/// https://docs.sentry.io/platforms/apple/performance/
@property (nonatomic) BOOL enableAutoPerformanceTracing;
/// WARNING: This is an experimental feature and may still have bugs.
/// When enabled, the SDK finishes the ongoing transaction bound to the scope and links them to the
/// crash event when your app crashes. The SDK skips adding profiles to increase the chance of
/// keeping the transaction.
/// @note The default is @c false.
@property (nonatomic) BOOL enablePersistingTracesWhenCrashing;
/// A block that configures the initial scope when starting the SDK.
/// @discussion The block receives a suggested default scope. You can either configure and return
/// this, or create your own scope instead.
/// @note The default simply returns the passed in scope.
@property (nonatomic, copy) SentryScope * _Nonnull (^ _Nonnull initialScope)(SentryScope * _Nonnull);
/// When enabled, the SDK tracks performance for HTTP requests if auto performance tracking and
/// @c enableSwizzling are enabled.
/// @note The default is @c true.
/// @discussion If you want to enable or disable network breadcrumbs, please use
/// @c enableNetworkBreadcrumbs instead.
@property (nonatomic) BOOL enableNetworkTracking;
/// When enabled, the SDK tracks performance for file IO reads and writes with NSData if auto
/// performance tracking and enableSwizzling are enabled.
/// @note The default is @c true.
@property (nonatomic) BOOL enableFileIOTracing;
/// When enabled, the SDK tracks performance for file IO reads and writes with NSData if auto
/// performance tracking and enableSwizzling are enabled.
/// @note The default is @c true.
@property (nonatomic) BOOL enableDataSwizzling;
/// When enabled, the SDK tracks performance for file IO operations with NSFileManager if auto
/// performance tracking and enableSwizzling are enabled.
/// @note The default is @c false.
@property (nonatomic) BOOL enableFileManagerSwizzling;
/// Indicates the percentage of the tracing data that is collected.
/// @discussion Specifying @c 0 or @c nil discards all trace data, @c 1.0 collects all trace data,
/// @c 0.01 collects 1% of all trace data.
/// @note The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets it
/// to the default.
/// @note The default is @c 0 .
@property (nonatomic, strong) NSNumber * _Nullable tracesSampleRate;
/// A callback to a user defined traces sampler function.
/// @discussion Specifying @c 0 or @c nil discards all trace data, @c 1.0 collects all trace data,
/// @c 0.01 collects 1% of all trace data.
/// @note The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets it
/// to the default of @c 0 .
@property (nonatomic, copy) SentryTracesSamplerCallback _Nullable tracesSampler;
/// If tracing is enabled or not.
/// @discussion @c true if @c tracesSampleRate is > @c 0 and <= @c 1
/// or a @c tracesSampler is set, otherwise @c false.
@property (nonatomic, readonly) BOOL isTracingEnabled;
/// A list of string prefixes of framework names that belong to the app.
/// @note By default, this contains @c CFBundleExecutable to mark it as “in-app”.
@property (nonatomic, readonly, copy) NSArray<NSString *> * _Nonnull inAppIncludes;
/// Adds an item to the list of inAppIncludes.
/// \param inAppInclude The prefix of the framework name.
///
- (void)addInAppInclude:(NSString * _Nonnull)inAppInclude;
/// Set as delegate on the URLSession used for all network data-transfer tasks performed by Sentry.
/// The SDK ignores this option when using urlSession.
@property (nonatomic, weak) id <NSURLSessionDelegate> _Nullable urlSessionDelegate;
/// Use this property so the transport uses this URLSession with your configuration for
/// sending requests to Sentry. If not set, the SDK will create a new URLSession with
/// URLSessionConfiguration.ephemeral.
@property (nonatomic, strong) NSURLSession * _Nullable urlSession;
/// Whether the SDK should use swizzling or not.
/// When turned off the following features are disabled: breadcrumbs for touch events and
/// navigation with UIViewControllers, automatic instrumentation for UIViewControllers,
/// automatic instrumentation for HTTP requests, automatic instrumentation for file IO with
/// NSData, and automatically added sentry-trace header to HTTP requests for distributed tracing.
/// Default is @c true.
@property (nonatomic) BOOL enableSwizzling;
/// A set of class names to ignore for swizzling.
/// The SDK checks if a class name of a class to swizzle contains a class name of this array.
/// For example, if you add MyUIViewController to this list, the SDK excludes the following classes
/// from swizzling: YourApp.MyUIViewController, YourApp.MyUIViewControllerA, MyApp.MyUIViewController.
/// Default is an empty set.
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull swizzleClassNameExcludes;
/// When enabled, the SDK tracks the performance of Core Data operations. It requires enabling
/// performance monitoring. The default is @c true.
/// See: https://docs.sentry.io/platforms/apple/performance/
@property (nonatomic) BOOL enableCoreDataTracing;
/// Configuration for the Sentry profiler.
/// @warning: Continuous profiling is an experimental feature and may still contain bugs.
/// @warning: Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic, copy) void (^ _Nullable configureProfiling)(SentryProfileOptions * _Nonnull);
@property (nonatomic, strong) SentryProfileOptions * _Nullable profiling;
- (BOOL)isContinuousProfilingEnabled SWIFT_WARN_UNUSED_RESULT;
- (BOOL)isProfilingCorrelatedToTraces SWIFT_WARN_UNUSED_RESULT;
/// Whether to send client reports, which contain statistics about discarded events.
/// @note The default is @c true.
/// @see <a href="https://develop.sentry.dev/sdk/client-reports/">https://develop.sentry.dev/sdk/client-reports/</a>
@property (nonatomic) BOOL sendClientReports;
/// When enabled, the SDK tracks when the application stops responding for a specific amount of
/// time defined by the @c appHangTimeoutInterval option.
/// On iOS, tvOS and visionOS, the SDK can differentiate between fully-blocking and non-fully
/// blocking app hangs. Important: this feature can’t differentiate between fully-blocking and
/// non-fully-blocking app hangs on macOS.
/// A fully-blocking app hang is when the main thread is stuck completely, and the app can’t render a
/// single frame. A non-fully-blocking app hang is when the app appears stuck to the user but can still
/// render a few frames. Fully-blocking app hangs are more actionable because the stacktrace shows the
/// exact blocking location on the main thread. As the main thread isn’t completely blocked,
/// non-fully-blocking app hangs can have a stacktrace that doesn’t highlight the exact blocking
/// location.
/// You can use @c enableReportNonFullyBlockingAppHangs to ignore non-fully-blocking app hangs.
/// @note The default is @c true.
/// @note App Hang tracking is automatically disabled if a debugger is attached.
@property (nonatomic) BOOL enableAppHangTracking;
/// The minimum amount of time an app should be unresponsive to be classified as an App Hanging.
/// @note The actual amount may be a little longer.
/// @note Avoid using values lower than 100ms, which may cause a lot of app hangs events being
/// transmitted.
/// @note The default value is 2 seconds.
@property (nonatomic) NSTimeInterval appHangTimeoutInterval;
/// When enabled, the SDK adds breadcrumbs for various system events.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableAutoBreadcrumbTracking;
/// When enabled, the SDK propagates the W3C Trace Context HTTP header traceparent on outgoing HTTP
/// requests.
/// @discussion This is useful when the receiving services only support OTel/W3C propagation. The
/// traceparent header is only sent when this option is @c true and the request matches @c
/// tracePropagationTargets.
/// @note Default value is @c false.
@property (nonatomic) BOOL enablePropagateTraceparent;
/// An array of hosts or regexes that determines if outgoing HTTP requests will get
/// extra @c trace_id and @c baggage headers added.
/// @discussion This array can contain instances of @c NSString which should match the URL (using
/// @c contains ), and instances of @c NSRegularExpression, which will be used to check the whole
/// URL.
/// @note The default value adds the header to all outgoing requests.
/// @see https://docs.sentry.io/platforms/apple/configuration/options/#trace-propagation-targets
@property (nonatomic, copy) NSArray * _Nonnull tracePropagationTargets;
/// When enabled, the SDK captures HTTP Client errors.
/// @note This feature requires @c enableSwizzling enabled as well.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableCaptureFailedRequests;
/// The SDK will only capture HTTP Client errors if the HTTP Response status code is within the
/// defined range.
/// @note Defaults to 500 - 599.
/// SentryHttpStatusCodeRange *defaultHttpStatusCodeRange =
@property (nonatomic, copy) NSArray<SentryHttpStatusCodeRange *> * _Nonnull failedRequestStatusCodes;
/// An array of hosts or regexes that determines if HTTP Client errors will be automatically
/// captured.
/// @discussion This array can contain instances of @c NSString which should match the URL (using
/// @c contains ), and instances of @c NSRegularExpression, which will be used to check the whole
/// URL.
/// @note The default value automatically captures HTTP Client errors of all outgoing requests.
@property (nonatomic, copy) NSArray * _Nonnull failedRequestTargets;
/// Use this feature to enable the Sentry MetricKit integration.
/// @brief When enabled, the SDK sends @c MXDiskWriteExceptionDiagnostic, @c MXCPUExceptionDiagnostic
/// and
/// @c MXHangDiagnostic to Sentry. The SDK supports this feature from iOS 15 and later and macOS 12
/// and later because, on these versions, @c MetricKit delivers diagnostic reports immediately, which
/// allows the Sentry SDK to apply the current data from the scope.
/// @note This feature is disabled by default.
@property (nonatomic) BOOL enableMetricKit;
/// When enabled, the SDK adds the raw MXDiagnosticPayloads as an attachment to the converted
/// SentryEvent. You need to enable @c enableMetricKit for this flag to work.
/// @note Default value is @c false.
@property (nonatomic) BOOL enableMetricKitRawPayload;
/// @warning This is an experimental feature and may still have bugs.
/// @brief By enabling this, every UIViewController tracing transaction will wait
/// for a call to @c SentrySDK.reportFullyDisplayed().
/// @discussion Use this in conjunction with @c enableUIViewControllerTracing.
/// If @c SentrySDK.reportFullyDisplayed() is not called, the transaction will finish
/// automatically after 30 seconds and the <code>Time to full display</code> Span will be
/// finished with @c DeadlineExceeded status.
/// @note Default value is <code>false</code>.
@property (nonatomic) BOOL enableTimeToFullDisplayTracing;
/// This feature is only available from Xcode 13 and from macOS 12.0, iOS 15.0, tvOS 15.0,
/// watchOS 8.0.
/// @warning This is an experimental feature and may still have bugs.
/// @brief Stitches the call to Swift Async functions in one consecutive stack trace.
/// @note Default value is @c false.
@property (nonatomic) BOOL swiftAsyncStacktraces;
/// The path to store SDK data, like events, transactions, profiles, raw crash data, etc. We
/// recommend only changing this when the default, e.g., in security environments, can’t be accessed.
/// @note The default is <code>NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, true)</code>.
@property (nonatomic, copy) NSString * _Nonnull cacheDirectoryPath;
/// Whether to enable Spotlight for local development. For more information see
/// https://spotlightjs.com/.
/// @note Only set this option to @c true while developing, not in production!
@property (nonatomic) BOOL enableSpotlight;
/// The Spotlight URL. Defaults to http://localhost:8969/stream. For more information see
/// https://spotlightjs.com/
@property (nonatomic, copy) NSString * _Nonnull spotlightUrl;
/// If set to <code>true</code>, the SDK will only continue a trace if the organization ID of the incoming
/// trace found in the baggage header matches the organization ID of the current Sentry client.
/// The client’s organization ID is extracted from the DSN or can be set with the <code>orgId</code> option.
/// If the organization IDs do not match, the SDK will start a new trace instead of continuing
/// the incoming one. This is useful to prevent traces of unknown third-party services from being
/// continued in your application.
/// @note Default value is @c false.
@property (nonatomic) BOOL strictTraceContinuation;
/// The organization ID for your Sentry project.
/// The SDK will try to extract the organization ID from the DSN. If it cannot be found, or if
/// you need to override it, you can provide the ID with this option. The organization ID is used
/// for trace propagation and for features like <code>strictTraceContinuation</code>.
@property (nonatomic, copy) NSString * _Nullable orgId;
/// Returns the effective organization ID, preferring the explicit <code>orgId</code> option over the
/// DSN-extracted value.
@property (nonatomic, readonly, copy) NSString * _Nullable effectiveOrgId;
/// Options for experimental features that are subject to change.
@property (nonatomic, strong) SentryExperimentalOptions * _Nonnull experimental;
+ (BOOL)isValidSampleRate:(NSNumber * _Nonnull)rate SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull defaultEnvironment;)
+ (NSString * _Nonnull)defaultEnvironment SWIFT_WARN_UNUSED_RESULT;
/// When enabled, the SDK sends metrics to Sentry. Metrics can be captured using the <code>SentrySDK/metrics</code>
/// API, which allows you to send, view and query counters, gauges and measurements.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableMetrics;
@end

SWIFT_CLASS("_TtC6Sentry27PlaceholderProcessInfoClass")
@interface PlaceholderProcessInfoClass : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry28PlaceholderSentryApplication")
@interface PlaceholderSentryApplication : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry23SentryProcessInfoSource_")
@protocol SentryProcessInfoSource
@property (nonatomic, readonly, copy) NSString * _Nonnull processDirectoryPath;
@property (nonatomic, readonly, copy) NSString * _Nullable processPath;
@property (nonatomic, readonly) NSInteger processorCount;
@property (nonatomic, readonly) NSProcessInfoThermalState thermalState;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, NSString *> * _Nonnull environment;
@property (nonatomic, readonly) BOOL isiOSAppOnMac SWIFT_AVAILABILITY(macos,introduced=12.0);
@property (nonatomic, readonly) BOOL isMacCatalystApp SWIFT_AVAILABILITY(macos,introduced=12.0);
@property (nonatomic, readonly) BOOL isiOSAppOnVisionOS;
@property (nonatomic, readonly) BOOL isLowPowerModeEnabled SWIFT_AVAILABILITY(macos,introduced=12.0);
@end

@interface NSProcessInfo (SWIFT_EXTENSION(Sentry)) <SentryProcessInfoSource>
@property (nonatomic, readonly, copy) NSString * _Nonnull processDirectoryPath;
@property (nonatomic, readonly, copy) NSString * _Nullable processPath;
@property (nonatomic, readonly) BOOL isiOSAppOnVisionOS;
@end

/// Parses the custom X-Sentry-Rate-Limits header.
/// This header exists of a multiple quotaLimits separated by “,”.
/// Each quotaLimit exists of retry_after:categories:scope.
/// retry_after: seconds until the rate limit expires.
/// categories: semicolon separated list of categories. If empty, this limit
/// applies to all categories. scope: This can be ignored by SDKs.
SWIFT_CLASS_NAMED("RateLimitParser")
@interface SentryRateLimitParser : NSObject
- (nonnull instancetype)initWithCurrentDateProvider:(id <SentryCurrentDateProvider> _Nonnull)currentDateProvider OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSNumber *, NSDate *> * _Nonnull)parse:(NSString * _Nonnull)header SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Parses value of HTTP header “Retry-After” which in most cases is sent in
/// combination with HTTP status 429 Too Many Requests.
/// For more details see: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.37
SWIFT_CLASS_NAMED("RetryAfterHeaderParser")
@interface SentryRetryAfterHeaderParser : NSObject
/// Parses the HTTP header into a NSDate.
/// \param retryAfterHeader The header value.
///
///
/// returns:
/// NSDate representation of Retry-After. If the date can’t be parsed nil is returned.
- (NSDate * _Nullable)parse:(NSString * _Nullable)retryAfterHeader SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry22SentryANRStoppedResult")
@interface SentryANRStoppedResult : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol SentryANRTrackerDelegate;
SWIFT_CLASS("_TtC6Sentry16SentryANRTracker")
@interface SentryANRTracker : NSObject
- (void)addListener:(id <SentryANRTrackerDelegate> _Nonnull)listener;
- (void)removeListener:(id <SentryANRTrackerDelegate> _Nonnull)listener;
- (void)clear;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

enum SentryANRType : NSInteger;
/// The  methods are called from a  background thread.
SWIFT_PROTOCOL("_TtP6Sentry24SentryANRTrackerDelegate_")
@protocol SentryANRTrackerDelegate
- (void)anrDetectedWithType:(enum SentryANRType)type;
- (void)anrStoppedWithResult:(SentryANRStoppedResult * _Nullable)result;
@end

typedef SWIFT_ENUM(NSInteger, SentryANRType, open) {
  SentryANRTypeFatalFullyBlocking = 0,
  SentryANRTypeFatalNonFullyBlocking = 1,
  SentryANRTypeFullyBlocking = 2,
  SentryANRTypeNonFullyBlocking = 3,
  SentryANRTypeUnknown = 4,
};

SWIFT_CLASS("_TtC6Sentry23SentryAppHangTypeMapper")
@interface SentryAppHangTypeMapper : NSObject
+ (NSString * _Nonnull)getExceptionTypeWithAnrType:(enum SentryANRType)anrType SWIFT_WARN_UNUSED_RESULT;
+ (NSString * _Nonnull)getFatalExceptionTypeWithNonFatalErrorType:(NSString * _Nonnull)nonFatalErrorType SWIFT_WARN_UNUSED_RESULT;
+ (BOOL)isExceptionTypeAppHangWithExceptionType:(NSString * _Nonnull)exceptionType SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry14SentryAppState")
@interface SentryAppState : NSObject <SentrySerializable>
@property (nonatomic, readonly, copy) NSString * _Nullable releaseName;
@property (nonatomic, readonly, copy) NSString * _Nonnull osVersion;
@property (nonatomic, readonly, copy) NSString * _Nullable vendorId;
@property (nonatomic, readonly) BOOL isDebugging;
/// The boot time of the system rounded down to seconds. As the precision of the serialization is
/// only milliseconds and a precision of seconds is enough we round down to seconds. With this we
/// avoid getting different dates before and after serialization.
/// warning:
/// We must not send this information off device because Apple forbids that.
/// We are allowed send the amount of time that has elapsed between events that occurred within the
/// app though. For more information see
/// https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api#4278394.
@property (nonatomic, readonly, copy) NSDate * _Nonnull systemBootTimestamp;
@property (nonatomic) BOOL isActive;
@property (nonatomic) BOOL wasTerminated;
@property (nonatomic) BOOL isANROngoing;
@property (nonatomic) BOOL isSDKRunning;
- (nonnull instancetype)initWithReleaseName:(NSString * _Nullable)releaseName osVersion:(NSString * _Nonnull)osVersion vendorId:(NSString * _Nullable)vendorId isDebugging:(BOOL)isDebugging systemBootTimestamp:(NSDate * _Nonnull)systemBootTimestamp OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithJSONObject:(NSDictionary<NSString *, id> * _Nonnull)jsonObject OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry21SentryAppStateManager")
@interface SentryAppStateManager : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// A typed attribute that can be attached to structured item entries used by Logs & Metrics
/// <code>Attribute</code> provides a type-safe way to store structured data alongside item messages.
/// Supports String, Bool, Int, and Double types.
/// This class exists primarily for Objective-C compatibility, inheriting from <code>NSObject</code> and
/// using <code>@objcMembers</code> to ensure it can be used from Objective-C code. For Swift code, prefer
/// using the <code>SentryAttributeValue</code> protocol instead, which provides a more idiomatic Swift API
/// and allows you to pass native Swift types (String, Bool, Int, Double, Float, and their arrays)
/// directly without wrapping them in a class instance. This Objective-C-compatible class will be
/// removed in a future major version release.
SWIFT_CLASS("_TtC6Sentry15SentryAttribute")
@interface SentryAttribute : NSObject
/// The type identifier for this attribute
/// Can be any of the following:
/// <ul>
///   <li>
///     <code>string</code>
///   </li>
///   <li>
///     <code>boolean</code>
///   </li>
///   <li>
///     <code>integer</code>
///   </li>
///   <li>
///     <code>double</code>
///   </li>
///   <li>
///     <code>string[]</code>
///   </li>
///   <li>
///     <code>boolean[]</code>
///   </li>
///   <li>
///     <code>integer[]</code>
///   </li>
///   <li>
///     <code>double[]</code>
///   </li>
/// </ul>
@property (nonatomic, readonly, copy) NSString * _Nonnull type;
/// The actual value stored in this attribute
@property (nonatomic, readonly) id _Nonnull value;
/// Creates a string attribute with the specified value.
/// \param value The string value to store in the attribute.
///
- (nonnull instancetype)initWithString:(NSString * _Nonnull)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a boolean attribute with the specified value.
/// \param value The boolean value to store in the attribute.
///
- (nonnull instancetype)initWithBoolean:(BOOL)value OBJC_DESIGNATED_INITIALIZER;
/// Creates an integer attribute with the specified value.
/// \param value The integer value to store in the attribute.
///
- (nonnull instancetype)initWithInteger:(NSInteger)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a double attribute with the specified value.
/// \param value The double value to store in the attribute.
///
- (nonnull instancetype)initWithDouble:(double)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a double attribute from a float value
/// \param value The float value to store in the attribute.
///
- (nonnull instancetype)initWithFloat:(float)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a string array attribute with the specified values.
/// \param values The array of string values to store in the attribute.
///
- (nonnull instancetype)initWithStringArray:(NSArray<NSString *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates a boolean array attribute with the specified values.
/// \param values The array of boolean values to store in the attribute.
///
- (nonnull instancetype)initWithBooleanArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates an integer array attribute with the specified values.
/// \param values The array of integer values to store in the attribute.
///
- (nonnull instancetype)initWithIntegerArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates a double array attribute with the specified values.
/// \param values The array of double values to store in the attribute.
///
- (nonnull instancetype)initWithDoubleArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates a double attribute from a float value
/// \param values The array of float values to store in the attribute.
///
- (nonnull instancetype)initWithFloatArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry26SentryBaggageSerialization")
@interface SentryBaggageSerialization : NSObject
+ (NSString * _Nonnull)encodeDictionary:(NSDictionary<NSString *, NSString *> * _Nonnull)dictionary SWIFT_WARN_UNUSED_RESULT;
+ (NSDictionary<NSString *, NSString *> * _Nonnull)decode:(NSString * _Nonnull)baggage SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryBinaryImageInfo;
/// This class listens to <code>SentryCrashBinaryImageCache</code> to keep a copy of the loaded binaries
/// information in a sorted collection that will be used to symbolicate frames with better
/// performance.
SWIFT_CLASS_NAMED("SentryBinaryImageCache")
@interface SentryBinaryImageCache : NSObject
@property (nonatomic, readonly, copy) NSArray<SentryBinaryImageInfo *> * _Nullable cache;
- (void)start:(BOOL)isDebug;
- (void)stop;
- (void)binaryImageAdded:(char const * _Nullable)imageName vmAddress:(uint64_t)vmAddress address:(uint64_t)address size:(uint64_t)size uuid:(uint8_t const * _Nullable)uuid;
- (SentryBinaryImageInfo * _Nullable)imageByAddress:(uint64_t)address SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS_NAMED("SentryBinaryImageInfo")
@interface SentryBinaryImageInfo : NSObject
@property (nonatomic, copy) NSString * _Nonnull name;
@property (nonatomic, copy) NSString * _Nullable uuid;
@property (nonatomic) uint64_t vmAddress;
@property (nonatomic) uint64_t address;
@property (nonatomic) uint64_t size;
- (nonnull instancetype)initWithName:(NSString * _Nonnull)name uuid:(NSString * _Nullable)uuid vmAddress:(uint64_t)vmAddress address:(uint64_t)address size:(uint64_t)size OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryBreadcrumb;
SWIFT_PROTOCOL("_TtP6Sentry24SentryBreadcrumbDelegate_")
@protocol SentryBreadcrumbDelegate <NSObject>
- (void)addBreadcrumb:(SentryBreadcrumb * _Nonnull)crumb;
@end

SWIFT_CLASS("_TtC6Sentry23SentryBreadcrumbTracker")
@interface SentryBreadcrumbTracker : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry26SentryReachabilityObserver_")
@protocol SentryReachabilityObserver <NSObject>
- (void)connectivityChanged:(BOOL)connected typeDescription:(NSString * _Nonnull)typeDescription;
@end

@interface SentryBreadcrumbTracker (SWIFT_EXTENSION(Sentry)) <SentryReachabilityObserver>
- (void)connectivityChanged:(BOOL)connected typeDescription:(NSString * _Nonnull)typeDescription;
@end

/// A custom byte count formatter that provides locale-independent formatting.
/// We need to have a standard description for byte counts but NSByteCountFormatter
/// does not allow choosing a locale, and the result changes according to the device
/// configuration. With our own formatter we can control the result.
SWIFT_CLASS("_TtC6Sentry24SentryByteCountFormatter")
@interface SentryByteCountFormatter : NSObject
/// Returns a human-readable string representation of the given byte count.
/// \param bytes The number of bytes to format.
///
///
/// returns:
/// A formatted string like “1,024 KB” or “512 MB”.
+ (NSString * _Nonnull)bytesCountDescription:(NSUInteger)bytes SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryId;
@class NSException;
@class SentryFeedback;
/// The Sentry client is responsible for capturing events and sending them to Sentry.
SWIFT_CLASS("_TtC6Sentry12SentryClient")
@interface SentryClient : NSObject
/// Initializes a <code>SentryClient</code>. Pass in a dictionary of options.
/// \param options Options dictionary
///
///
/// returns:
/// An initialized <code>SentryClient</code> or <code>nil</code> if an error occurred.
- (nullable instancetype)initWithOptions:(SentryOptions * _Nonnull)options OBJC_DESIGNATED_INITIALIZER;
/// Indicates whether the client is enabled and will send events to Sentry.
@property (nonatomic, readonly) BOOL isEnabled;
/// The options used to configure this client.
@property (nonatomic, strong) SentryOptions * _Nonnull options;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScope:(SentryScope * _Nonnull)scope;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScope:(SentryScope * _Nonnull)scope;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScope:(SentryScope * _Nonnull)scope;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScope:(SentryScope * _Nonnull)scope;
/// Captures a new-style user feedback and sends it to Sentry.
/// \param feedback The user feedback to send to Sentry.
///
/// \param scope The current scope from which to gather contextual information.
///
- (void)captureFeedback:(SentryFeedback * _Nonnull)feedback withScope:(SentryScope * _Nonnull)scope;
/// Captures a log entry and sends it to Sentry.
/// \param log The log entry to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
- (void)captureLog:(SentryLog * _Nonnull)log withScope:(SentryScope * _Nonnull)scope;
/// Waits synchronously for the SDK to flush out all queued and cached items for up to the specified timeout in seconds.
/// If there is no internet connection, the function returns immediately. The SDK doesn’t dispose the client or the hub.
/// \param timeout The time to wait for the SDK to complete the flush.
///
- (void)flush:(NSTimeInterval)timeout;
/// Disables the client and calls flush with <code>SentryOptions.shutdownTimeInterval</code>.
- (void)close;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryDiscardedEvent;
SWIFT_CLASS("_TtC6Sentry18SentryClientReport")
@interface SentryClientReport : NSObject <SentrySerializable>
- (nonnull instancetype)initWithDiscardedEvents:(NSArray<SentryDiscardedEvent *> * _Nonnull)discardedEvents dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryCrashSwift;
/// Facade that bridges the Sentry SDK layer to the SentryCrash subsystem.
/// <code>SentryCrashBridge</code> is the single entry point through which SentryCrash
/// accesses SDK services. It replaces direct <code>SentryDependencyContainer</code>
/// look-ups inside the crash reporter, keeping the dependency direction
/// one-way: <em>Sentry → SentryCrash</em>, never the reverse.
/// <h2>Isolation boundary</h2>
/// This bridge is the first step toward fully isolating SentryCrash from the
/// SDK. Today the two layers still share a handful of model types (e.g.
/// <code>SentryCrashSwift</code>, notification-center wrappers). Future work will replace
/// those shared types with protocol abstractions so that SentryCrash can be
/// built and tested independently.
/// <h2>Exposed services</h2>
/// | Service                        | Used by SentryCrash for                                 |
/// |––––––––––––––––|———————————————————|
/// | <code>notificationCenterWrapper</code>    | Observing app-lifecycle events (foreground, background)  |
/// | <code>dateProvider</code>                 | Timestamping crash reports and session boundaries        |
/// | <code>crashReporter</code>                | Reading system info, crash state, and launch metadata    |
/// | <code>uncaughtExceptionHandler</code>     | Installing / reading the NSException handler             |
/// | <code>activeScreenSize()</code> (UIKit)   | Recording screen dimensions in device context            |
/// <h2>Threading</h2>
/// The bridge is created once during <code>SentryCrashIntegration.install(with:)</code> and
/// is safe to read from any thread after initialization. The
/// <code>uncaughtExceptionHandler</code> property may be written from the SentryCrash
/// installation path and read from the crash-time exception handler.
/// <h2>Usage</h2>
/// The bridge is created by the integration layer and passed down:
/// \code
/// let bridge = SentryCrashBridge(
///     notificationCenterWrapper: notificationCenter,
///     dateProvider: dateProvider,
///     crashReporter: crashReporter
/// )
/// // Passed to SentryCrashWrapper, SentryCrashIntegrationSessionHandler,
/// // and the underlying SentryCrash / SentryCrashInstallation instances.
///
/// \endcode
SWIFT_CLASS("_TtC6Sentry17SentryCrashBridge")
@interface SentryCrashBridge : NSObject
/// Wrapper around <code>NSNotificationCenter</code> used by SentryCrash to observe
/// app-lifecycle transitions (e.g. <code>UIApplicationDidBecomeActiveNotification</code>).
@property (nonatomic, readonly, strong) id <SentryNSNotificationCenterWrapper> _Nonnull notificationCenterWrapper;
/// Provides the current date/time. Used for timestamping crash reports and
/// computing session durations.
@property (nonatomic, readonly, strong) id <SentryCurrentDateProvider> _Nonnull dateProvider;
/// The crash reporter instance that owns system info, crash state, and the
/// on-disk report store. This is the main object SentryCrash interacts with.
@property (nonatomic, readonly, strong) SentryCrashSwift * _Nonnull crashReporter;
/// The C-convention uncaught-exception handler installed by SentryCrash.
/// This is a convenience proxy for <code>crashReporter.uncaughtExceptionHandler</code>.
/// The NSException monitor (<code>SentryCrashMonitor_NSException</code>) writes this
/// during installation so it can be restored if monitoring is later disabled.
@property (nonatomic) void (* _Nullable uncaughtExceptionHandler)(NSException * _Nonnull);
/// Creates a bridge with the SDK services that SentryCrash requires.
/// \param notificationCenterWrapper Wrapper for subscribing to app-lifecycle
/// notifications.
///
/// \param dateProvider Provider for current timestamps.
///
/// \param crashReporter The crash reporter that manages on-disk reports and
/// system info.
///
- (nonnull instancetype)initWithNotificationCenterWrapper:(id <SentryNSNotificationCenterWrapper> _Nonnull)notificationCenterWrapper dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider crashReporter:(SentryCrashSwift * _Nonnull)crashReporter OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry28SentryCrashReportFilterSwift")
@interface SentryCrashReportFilterSwift : NSObject
- (nonnull instancetype)initWithFilterReports:(void (^ _Nonnull)(NSArray * _Nonnull, void (^ _Nonnull)(NSArray * _Nullable, BOOL, NSError * _Nullable)))filter OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry19SentryCrashReporter_")
@protocol SentryCrashReporter <NSObject>
@property (nonatomic, readonly) BOOL crashedLastLaunch;
@property (nonatomic, readonly) NSTimeInterval durationFromCrashStateInitToLastCrash;
@property (nonatomic, readonly) NSTimeInterval activeDurationSinceLastCrash;
@property (nonatomic, readonly) BOOL isBeingTraced;
@property (nonatomic, readonly) BOOL isSimulatorBuild;
@property (nonatomic, readonly) BOOL isApplicationInForeground;
@property (nonatomic, readonly) uint64_t freeMemorySize;
@property (nonatomic, readonly) uint64_t appMemorySize;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nonnull systemInfo;
@property (nonatomic, readonly, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;
- (void)startBinaryImageCache;
- (void)stopBinaryImageCache;
- (void)enrichScope:(SentryScope * _Nonnull)scope;
@end

SWIFT_CLASS("_TtC6Sentry16SentryCrashSwift")
@interface SentryCrashSwift : NSObject
@property (nonatomic, readonly) BOOL crashedLastLaunch;
@property (nonatomic, readonly) NSTimeInterval activeDurationSinceLastCrash;
- (void)setSink:(SentryCrashReportFilterSwift * _Nullable)newValue;
- (void)setupOnCrash;
- (void)removeOnCrash;
@property (nonatomic) void (* _Nullable uncaughtExceptionHandler)(NSException * _Nonnull);
- (void)setBridge:(SentryCrashBridge * _Nonnull)bridge;
@property (nonatomic, copy) NSString * _Nonnull basePath;
- (void)install;
- (void)uninstall;
@property (nonatomic, readonly, copy) NSDictionary * _Nullable systemInfo;
@property (nonatomic, copy) NSDictionary * _Nonnull userInfo;
- (void)sendAllReportsWithCompletion:(void (^ _Nonnull)(NSArray * _Nullable, BOOL, NSError * _Nullable))completion;
@property (nonatomic, readonly) uint32_t monitoring;
- (BOOL)hasOnCrash SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// We need a protocol to expose SentryCurrentDateProvider to tests.
/// Mocking the previous private class from <code>SentryTestUtils</code> stopped working in Xcode 16.
SWIFT_PROTOCOL("_TtP6Sentry25SentryCurrentDateProvider_")
@protocol SentryCurrentDateProvider
- (NSDate * _Nonnull)date SWIFT_WARN_UNUSED_RESULT;
- (NSInteger)timezoneOffset SWIFT_WARN_UNUSED_RESULT;
- (uint64_t)systemTime SWIFT_WARN_UNUSED_RESULT;
- (NSTimeInterval)systemUptime SWIFT_WARN_UNUSED_RESULT;
- (uint64_t)getAbsoluteTime SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry14SentryDateUtil")
@interface SentryDateUtil : NSObject
- (nonnull instancetype)initWithCurrentDateProvider:(id <SentryCurrentDateProvider> _Nonnull)currentDateProvider OBJC_DESIGNATED_INITIALIZER;
- (BOOL)isInFuture:(NSDate * _Nullable)date SWIFT_WARN_UNUSED_RESULT;
+ (NSDate * _Nullable)getMaximumDate:(NSDate * _Nullable)first andOther:(NSDate * _Nullable)second SWIFT_WARN_UNUSED_RESULT;
+ (NSInteger)millisecondsSince1970:(NSDate * _Nonnull)date SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryFrame;
@class SentryDebugMeta;
@class SentryThread;
SWIFT_CLASS("_TtC6Sentry24SentryDebugImageProvider")
@interface SentryDebugImageProvider : NSObject
/// Returns a list of debug images that are being referenced by the given frames.
/// This function uses the @c SentryBinaryImageCache which is significantly faster than @c
/// SentryCrashDefaultBinaryImageProvider for retrieving binary image information.
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesFromCacheForFrames:(NSArray<SentryFrame *> * _Nonnull)frames SWIFT_WARN_UNUSED_RESULT;
/// Returns a list of debug images that are being referenced in the given threads.
/// This function uses the @c SentryBinaryImageCache which is significantly faster than @c
/// SentryCrashDefaultBinaryImageProvider for retrieving binary image information.
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesFromCacheForThreads:(NSArray<SentryThread *> * _Nonnull)threads SWIFT_WARN_UNUSED_RESULT;
/// Returns a list of debug images that are being referenced in the given image addresses.
/// This function uses the @c SentryBinaryImageCache which is significantly faster than @c
/// SentryCrashDefaultBinaryImageProvider for retrieving binary image information.
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesForImageAddressesFromCache:(NSSet<NSString *> * _Nonnull)imageAddresses SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesFromCache SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry26SentryDefaultCrashReporter")
@interface SentryDefaultCrashReporter : NSObject <SentryCrashReporter>
@property (nonatomic, readonly, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nonnull systemInfo;
- (nonnull instancetype)initWithProcessInfoWrapper:(id <SentryProcessInfoSource> _Nonnull)processInfoWrapper bridge:(SentryCrashBridge * _Nonnull)bridge OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@interface SentryDefaultCrashReporter (SWIFT_EXTENSION(Sentry))
- (void)startBinaryImageCache;
- (void)stopBinaryImageCache;
@property (nonatomic, readonly) BOOL crashedLastLaunch;
@property (nonatomic, readonly) NSTimeInterval durationFromCrashStateInitToLastCrash;
@property (nonatomic, readonly) NSTimeInterval activeDurationSinceLastCrash;
@property (nonatomic, readonly) BOOL isBeingTraced;
@property (nonatomic, readonly) BOOL isSimulatorBuild;
@property (nonatomic, readonly) BOOL isApplicationInForeground;
@property (nonatomic, readonly) uint64_t freeMemorySize;
@property (nonatomic, readonly) uint64_t appMemorySize;
- (void)enrichScope:(SentryScope * _Nonnull)scope;
@end

SWIFT_CLASS("_TtC6Sentry32SentryDefaultCurrentDateProvider")
@interface SentryDefaultCurrentDateProvider : NSObject <SentryCurrentDateProvider>
- (NSDate * _Nonnull)date SWIFT_WARN_UNUSED_RESULT;
- (NSInteger)timezoneOffset SWIFT_WARN_UNUSED_RESULT;
/// Returns the absolute timestamp, which has no defined reference point or unit
/// as it is platform dependent.
- (uint64_t)systemTime SWIFT_WARN_UNUSED_RESULT;
- (NSTimeInterval)systemUptime SWIFT_WARN_UNUSED_RESULT;
- (uint64_t)getAbsoluteTime SWIFT_WARN_UNUSED_RESULT;
+ (uint64_t)getAbsoluteTime SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Required because we need to call this from Objective-C. It’s just a wrapper around the TelemetryScopeApplier protocol for Objective-C.
SWIFT_PROTOCOL("_TtP6Sentry21SentryLogScopeApplier_")
@protocol SentryLogScopeApplier
- (SentryLog * _Nonnull)applyScope:(SentryScope * _Nonnull)scope toLog:(SentryLog * _Nonnull)log SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry28SentryDefaultLogScopeApplier")
@interface SentryDefaultLogScopeApplier : NSObject <SentryLogScopeApplier>
- (nonnull instancetype)initWithEnvironment:(NSString * _Nonnull)environment releaseName:(NSString * _Nullable)releaseName cacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath sendDefaultPii:(BOOL)sendDefaultPii OBJC_DESIGNATED_INITIALIZER;
- (SentryLog * _Nonnull)applyScope:(SentryScope * _Nonnull)scope toLog:(SentryLog * _Nonnull)log SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry24SentryObjCRuntimeWrapper_")
@protocol SentryObjCRuntimeWrapper
- (char const * _Nonnull * _Nullable)copyClassNamesForImage:(char const * _Nonnull)image amount:(uint32_t * _Nullable)outCount SWIFT_WARN_UNUSED_RESULT;
- (char const * _Nullable)class_getImageName:(Class _Nonnull)cls SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry31SentryDefaultObjCRuntimeWrapper")
@interface SentryDefaultObjCRuntimeWrapper : NSObject <SentryObjCRuntimeWrapper>
- (char const * _Nonnull * _Nullable)copyClassNamesForImage:(char const * _Nonnull)image amount:(uint32_t * _Nullable)outCount SWIFT_WARN_UNUSED_RESULT;
- (char const * _Nullable)class_getImageName:(Class _Nonnull)cls SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryDispatchFactory;
@class SentryNSTimerFactory;
@class SentryFileIOTracker;
@class SentryThreadInspector;
@class SentryReachability;
@class SentryExtraContextProvider;
@protocol SentryEventContextEnricher;
@class SentryFileManager;
@class SentryScopePersistentStore;
@class SentryGlobalEventProcessor;
SWIFT_CLASS("_TtC6Sentry25SentryDependencyContainer")
@interface SentryDependencyContainer : NSObject
@property (nonatomic, strong) SentryOptions * _Nullable startOptions;
+ (SentryDependencyContainer * _Nonnull)sharedInstance SWIFT_WARN_UNUSED_RESULT;
/// Resets all dependencies.
+ (void)reset;
- (id <SentryApplication> _Nullable)application SWIFT_WARN_UNUSED_RESULT;
@property (nonatomic, strong) SentryDispatchQueueWrapper * _Nonnull dispatchQueueWrapper;
@property (nonatomic, strong) id <SentryRandomProtocol> _Nonnull random;
@property (nonatomic, strong) SentryThreadWrapper * _Nonnull threadWrapper;
@property (nonatomic, strong) SentryBinaryImageCache * _Nonnull binaryImageCache;
@property (nonatomic, strong) id <SentryCurrentDateProvider> _Nonnull dateProvider;
@property (nonatomic, strong) id <SentryNSNotificationCenterWrapper> _Nonnull notificationCenterWrapper;
@property (nonatomic, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;
@property (nonatomic, strong) id <SentryCrashReporter> _Nonnull crashWrapper;
@property (nonatomic, strong) SentryDispatchFactory * _Nonnull dispatchFactory;
@property (nonatomic, strong) SentryNSTimerFactory * _Nonnull timerFactory;
@property (nonatomic, strong) SentryFileIOTracker * _Nonnull fileIOTracker;
@property (nonatomic, strong) SentryThreadInspector * _Nonnull threadInspector;
@property (nonatomic, strong) id <SentryRateLimits> _Nonnull rateLimits;
@property (nonatomic, strong) SentryReachability * _Nonnull reachability;
@property (nonatomic, strong) SentrySysctl * _Nonnull sysctlWrapper;
@property (nonatomic, strong) SentryDebugImageProvider * _Nonnull debugImageProvider;
@property (nonatomic, strong) id <SentryObjCRuntimeWrapper> _Nonnull objcRuntimeWrapper;
@property (nonatomic, strong) SentryExtraContextProvider * _Nonnull extraContextProvider;
@property (nonatomic, readonly, strong) id <SentryEventContextEnricher> _Nonnull eventContextEnricher;
@property (nonatomic, strong) SentryFileManager * _Nullable fileManager;
@property (nonatomic, strong) SentryScopePersistentStore * _Nullable scopePersistentStore;
@property (nonatomic, strong) SentryGlobalEventProcessor * _Nonnull globalEventProcessor;
@property (nonatomic, strong) SentryAppStateManager * _Nonnull appStateManager;
@property (nonatomic, strong) SentryCrashSwift * _Nonnull crashReporter;
- (SentryANRTracker * _Nonnull)getANRTracker:(NSTimeInterval)timeout SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry20SentryDiscardedEvent")
@interface SentryDiscardedEvent : NSObject <SentrySerializable>
@property (nonatomic, readonly) NSUInteger quantity;
- (nonnull instancetype)initWithReason:(NSString * _Nonnull)reason category:(NSString * _Nonnull)category quantity:(NSUInteger)quantity OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryDispatchSourceWrapper;
SWIFT_CLASS("_TtC6Sentry21SentryDispatchFactory")
@interface SentryDispatchFactory : NSObject
/// Generate a new @c SentryDispatchQueueWrapper .
- (SentryDispatchQueueWrapper * _Nonnull)queueWithName:(char const * _Nonnull)name attributes:(dispatch_queue_attr_t _Nonnull)attributes SWIFT_WARN_UNUSED_RESULT;
/// Creates a utility QoS queue with the given name and relative priority, wrapped in a @c
/// SentryDispatchQueueWrapper.
/// @note This method is only a factory method and does not keep a reference to the created queue.
/// @param name The name of the queue.
/// @param relativePriority A negative offset from the maximum supported scheduler priority for the
/// given quality-of-service class. This value must be less than 0 and greater than or equal to @c
/// QOS_MIN_RELATIVE_PRIORITY, otherwise throws an assertion and returns an unspecified
/// quality-of-service.
/// @return Unretained reference to the created queue.
- (SentryDispatchQueueWrapper * _Nonnull)createUtilityQueue:(char const * _Nonnull)name relativePriority:(int32_t)relativePriority SWIFT_WARN_UNUSED_RESULT;
/// Generate a @c dispatch_source_t by internally vending the required @c SentryDispatchQueueWrapper.
- (SentryDispatchSourceWrapper * _Nonnull)sourceWithInterval:(NSInteger)interval leeway:(NSInteger)leeway queueName:(char const * _Nonnull)queueName attributes:(dispatch_queue_attr_t _Nonnull)attributes eventHandler:(void (^ _Nonnull)(void))eventHandler SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry26SentryDispatchQueueWrapper")
@interface SentryDispatchQueueWrapper : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithName:(char const * _Nonnull)name OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithName:(char const * _Nonnull)name relativePriority:(int32_t)relativePriority OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithName:(char const * _Nonnull)name attributes:(dispatch_queue_attr_t _Nullable)attributes OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithHighPriority:(char const * _Nonnull)name OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, strong) dispatch_queue_t _Nonnull queue;
- (void)dispatchAsyncWithBlock:(void (^ _Nonnull)(void))block;
- (void)dispatchAsyncOnMainQueueIfNotMainThread:(void (^ _Nonnull)(void))block;
- (void)dispatchSyncOnMainQueue:(void (^ _Nonnull)(void))block;
- (void)dispatchSyncOnMainQueue:(void (^ _Nonnull)(void))block timeout:(double)timeout;
- (void)dispatchAfter:(NSTimeInterval)interval block:(void (^ _Nonnull)(void))block;
- (void)dispatchOnce:(long * _Nonnull)predicate block:(void (^ _Nonnull)(void))block;
@property (nonatomic, readonly) BOOL shouldDispatchCancel;
@property (nonatomic, readonly) BOOL shouldCreateDispatchBlock;
@end

/// A wrapper around a dispatch timer source that can be subclassed for mocking in tests.
SWIFT_CLASS("_TtC6Sentry27SentryDispatchSourceWrapper")
@interface SentryDispatchSourceWrapper : NSObject
- (nonnull instancetype)initWithInterval:(NSInteger)interval leeway:(NSInteger)leeway queue:(SentryDispatchQueueWrapper * _Nonnull)queueWrapper eventHandler:(void (^ _Nonnull)(void))eventHandler OBJC_DESIGNATED_INITIALIZER;
- (void)cancel;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSURL;
@class NSError;
/// Represents a Sentry Data Source Name (DSN) which identifies a Sentry project.
SWIFT_CLASS_NAMED("SentryDsn")
@interface SentryDsn : NSObject
/// The parsed URL from the DSN string.
@property (nonatomic, readonly, copy) NSURL * _Nonnull url;
/// Initializes a SentryDsn from a DSN string.
/// \param dsnString The DSN string to parse.
///
/// \param error An optional error pointer that will be set if the DSN is invalid.
///
///
/// returns:
/// A new SentryDsn instance, or nil if the DSN string is invalid.
- (nullable instancetype)initWithString:(NSString * _Nullable)dsnString didFailWithError:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Generates a SHA1 hash of the DSN URL.
/// note:
/// This is internal SDK API, not for public use.
///
/// returns:
/// A hexadecimal string representation of the hash.
- (NSString * _Nonnull)getHash SWIFT_WARN_UNUSED_RESULT;
/// Returns the envelope endpoint URL for this DSN.
///
/// returns:
/// The envelope endpoint URL.
- (NSURL * _Nonnull)getEnvelopeEndpoint SWIFT_WARN_UNUSED_RESULT;
/// Extracts the organization ID from the DSN host.
/// For example, given a DSN with host <code>o123.ingest.sentry.io</code>, this returns <code>"123"</code>.
/// Returns <code>nil</code> if the host does not match the expected pattern.
@property (nonatomic, readonly, copy) NSString * _Nullable orgId;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry28SentryEnabledFeaturesBuilder")
@interface SentryEnabledFeaturesBuilder : NSObject
+ (NSArray<NSString *> * _Nonnull)getEnabledFeaturesWithOptions:(SentryOptions * _Nullable)options SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryEnvelopeItem;
@class SentryEnvelopeHeader;
SWIFT_CLASS("_TtC6Sentry14SentryEnvelope")
@interface SentryEnvelope : NSObject
- (nonnull instancetype)initWithId:(SentryId * _Nullable)id singleItem:(SentryEnvelopeItem * _Nonnull)item;
- (nonnull instancetype)initWithHeader:(SentryEnvelopeHeader * _Nonnull)header singleItem:(SentryEnvelopeItem * _Nonnull)item;
- (nonnull instancetype)initWithId:(SentryId * _Nullable)id items:(NSArray<SentryEnvelopeItem *> * _Nonnull)items;
- (nonnull instancetype)initWithHeader:(SentryEnvelopeHeader * _Nonnull)header items:(NSArray<SentryEnvelopeItem *> * _Nonnull)items OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, strong) SentryEnvelopeHeader * _Nonnull header;
@property (nonatomic, readonly, copy) NSArray<SentryEnvelopeItem *> * _Nonnull items;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryTraceContext;
SWIFT_CLASS("_TtC6Sentry20SentryEnvelopeHeader")
@interface SentryEnvelopeHeader : NSObject
/// Initializes a @c SentryEnvelopeHeader object with the specified @c eventId and @c traceContext.
/// @param eventId The identifier of the event. Can be @c nil if no event in the envelope or
/// attachment related to event.
/// @param traceContext Current trace state.
- (nonnull instancetype)initWithId:(SentryId * _Nullable)eventId traceContext:(SentryTraceContext * _Nullable)traceContext;
- (nonnull instancetype)initWithId:(SentryId * _Nullable)eventId sdkInfo:(NSDictionary * _Nullable)sdkInfo;
+ (nonnull instancetype)empty SWIFT_WARN_UNUSED_RESULT;
/// The event identifier, if available.
/// An event id exist if the envelope contains an event of items within it are related. i.e
/// Attachments
@property (nonatomic, readonly, strong) SentryId * _Nullable eventId;
@property (nonatomic, readonly, strong) SentryTraceContext * _Nullable traceContext;
/// The timestamp when the event was sent from the SDK as string in RFC 3339 format. Used
/// for clock drift correction of the event timestamp. The time zone must be UTC.
/// The timestamp should be generated as close as possible to the transmision of the event,
/// so that the delay between sending the envelope and receiving it on the server-side is
/// minimized.
@property (nonatomic, copy) NSDate * _Nullable sentAt;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSData;
@class SentrySession;
@class SentryAttachment;
@class SentryReplayEvent;
@class SentryReplayRecording;
SWIFT_CLASS("_TtC6Sentry18SentryEnvelopeItem")
@interface SentryEnvelopeItem : NSObject
/// The envelope payload.
@property (nonatomic, readonly, copy) NSData * _Nullable data;
- (nonnull instancetype)initWithType:(NSString * _Nonnull)type data:(NSData * _Nullable)data contentType:(NSString * _Nonnull)contentType itemCount:(NSNumber * _Nonnull)itemCount;
- (nonnull instancetype)initWithType:(NSString * _Nonnull)type data:(NSData * _Nullable)data addPlatform:(BOOL)addPlatform;
/// Initializes an envelope item with an event.
- (nonnull instancetype)initWithEvent:(SentryEvent * _Nonnull)event;
/// Initializes an envelope item with a session.
- (nonnull instancetype)initWithSession:(SentrySession * _Nonnull)session;
/// Initializes an envelope item with an attachment.
/// @param attachment The attachment to create the envelope item from.
/// @param maxAttachmentSize The maximum allowed size for the attachment.
/// @return The envelope item or nil if the attachment is too large or cannot be processed.
- (nullable instancetype)initWithAttachment:(SentryAttachment * _Nonnull)attachment maxAttachmentSize:(NSUInteger)maxAttachmentSize;
/// Initializes an envelope item with a client report.
- (nonnull instancetype)initWithClientReport:(SentryClientReport * _Nonnull)clientReport;
/// Initializes an envelope item with replay event and recording data.
- (nullable instancetype)initWithReplayEvent:(SentryReplayEvent * _Nonnull)replayEvent replayRecording:(SentryReplayRecording * _Nonnull)replayRecording video:(NSURL * _Nonnull)video;
- (NSString * _Nonnull)type SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Each item type must have a data category name mapped to it; see SentryDataCategoryMapper
/// While these envelope item types might look similar to the data categories,
/// they are not identical, and have slight differences.
SWIFT_CLASS("_TtC6Sentry23SentryEnvelopeItemTypes")
@interface SentryEnvelopeItemTypes : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull event;)
+ (NSString * _Nonnull)event SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull session;)
+ (NSString * _Nonnull)session SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull feedback;)
+ (NSString * _Nonnull)feedback SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull transaction;)
+ (NSString * _Nonnull)transaction SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull attachment;)
+ (NSString * _Nonnull)attachment SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull clientReport;)
+ (NSString * _Nonnull)clientReport SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull profile;)
+ (NSString * _Nonnull)profile SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull replayVideo;)
+ (NSString * _Nonnull)replayVideo SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull statsd;)
+ (NSString * _Nonnull)statsd SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull profileChunk;)
+ (NSString * _Nonnull)profileChunk SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull log;)
+ (NSString * _Nonnull)log SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull traceMetric;)
+ (NSString * _Nonnull)traceMetric SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Enriches the event context by adding app state information.
SWIFT_PROTOCOL("_TtP6Sentry26SentryEventContextEnricher_")
@protocol SentryEventContextEnricher
/// Enriches the event context dictionary with app state fields (in_foreground and is_active).
/// \param context The current event context dictionary.
///
///
/// returns:
/// The enriched context dictionary with app state information added.
- (NSDictionary<NSString *, id> * _Nonnull)enrichWithAppState:(NSDictionary<NSString *, id> * _Nonnull)context SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry18SentryEventDecoder")
@interface SentryEventDecoder : NSObject
+ (SentryEvent * _Nullable)decodeEventWithJsonData:(NSData * _Nonnull)jsonData SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Options for experimental features that are subject to change or may be removed in future versions.
SWIFT_CLASS("_TtC6Sentry25SentryExperimentalOptions")
@interface SentryExperimentalOptions : NSObject
/// A more reliable way to report unhandled C++ exceptions.
/// This approach hooks into all instances of the <code>__cxa_throw</code> function, which provides a more comprehensive and consistent exception handling across an app’s runtime, regardless of the number of C++ modules or how they’re linked. It helps in obtaining accurate stack traces.
/// note:
/// The mechanism of hooking into <code>__cxa_throw</code> could cause issues with symbolication on iOS due to caching of symbol references.
/// experiment:
/// This is an experimental feature and is therefore disabled by default. We’ll enable it by default in a future major release.
@property (nonatomic) BOOL enableUnhandledCPPExceptionsV2;
/// When enabled, the SDK uses a more efficient mechanism for detecting watchdog terminations.
@property (nonatomic) BOOL enableWatchdogTerminationsV2;
/// Enables network detail capture for Session Replay.
/// When enabled, the SDK can capture request and response headers and bodies for network
/// requests during session replay. You must also configure
/// <code>options.sessionReplay.networkDetailAllowUrls</code> with URL patterns to specify which
/// requests should be captured.
@property (nonatomic) BOOL enableReplayNetworkDetailsCapturing;
/// When enabled, the SDK sends a standalone app start transaction instead of attaching app
/// start data to the first UIViewController transaction.
@property (nonatomic) BOOL enableStandaloneAppStartTracing;
- (void)validateOptions:(NSDictionary<NSString *, id> * _Nullable)options;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Extension point identifiers for common iOS extension types
typedef SWIFT_ENUM(NSInteger, SentryExtensionType, open) {
/// WidgetKit extensions (includes Widgets and Live Activities)
  SentryExtensionTypeWidget = 0,
/// Intents extensions
  SentryExtensionTypeIntent = 1,
/// Action extensions (share, today, etc.)
  SentryExtensionTypeAction = 2,
/// Share extensions
  SentryExtensionTypeShare = 3,
/// Notification Service extensions
  SentryExtensionTypeNotificationService = 4,
};

SWIFT_CLASS("_TtC6Sentry26SentryExtraContextProvider")
@interface SentryExtraContextProvider : NSObject
- (NSDictionary<NSString *, id> * _Nonnull)getExtraContext SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry19SentryExtraPackages")
@interface SentryExtraPackages : NSObject
+ (void)addPackageName:(NSString * _Nullable)name version:(NSString * _Nullable)version;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS_NAMED("SentryFeatureFlagBufferWrapper")
@interface SentryFeatureFlagBufferWrapper : NSObject
+ (SentryFeatureFlagBufferWrapper * _Nonnull)scopeBuffer SWIFT_WARN_UNUSED_RESULT;
+ (SentryFeatureFlagBufferWrapper * _Nonnull)spanBuffer SWIFT_WARN_UNUSED_RESULT;
- (void)removeAll;
- (SentryFeatureFlagBufferWrapper * _Nonnull)copyBuffer SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, id> * _Nullable)serializeForContext SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, id> * _Nonnull)serializeForSpanData SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

enum SentryFeedbackSource : NSInteger;
SWIFT_CLASS("_TtC6Sentry14SentryFeedback")
@interface SentryFeedback : NSObject
@property (nonatomic, readonly, strong) SentryId * _Nonnull eventId;
/// \param associatedEventId The ID for an event you’d like associated with the feedback. 
///
/// \param attachments Attachment objects for any files to include with the feedback. 
///
- (nonnull instancetype)initWithMessage:(NSString * _Nonnull)message name:(NSString * _Nullable)name email:(NSString * _Nullable)email source:(enum SentryFeedbackSource)source associatedEventId:(SentryId * _Nullable)associatedEventId attachments:(NSArray<SentryAttachment *> * _Nullable)attachments OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

typedef SWIFT_ENUM(NSInteger, SentryFeedbackSource, open) {
  SentryFeedbackSourceWidget = 0,
  SentryFeedbackSourceCustom = 1,
};

@interface SentryFeedback (SWIFT_EXTENSION(Sentry)) <SentrySerializable>
@end

@interface SentryFeedback (SWIFT_EXTENSION(Sentry))
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
@end

@interface SentryFeedback (SWIFT_EXTENSION(Sentry))
/// Returns all attachments for inclusion in the feedback envelope.
- (NSArray<SentryAttachment *> * _Nonnull)attachmentsForEnvelope SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry18SentryFileContents")
@interface SentryFileContents : NSObject
@property (nonatomic, readonly, copy) NSString * _Nonnull path;
@property (nonatomic, readonly, copy) NSData * _Nonnull contents;
- (nonnull instancetype)initWithPath:(NSString * _Nonnull)path contents:(NSData * _Nonnull)contents OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry19SentryFileIOTracker")
@interface SentryFileIOTracker : NSObject
- (nonnull instancetype)initWithThreadInspector:(SentryThreadInspector * _Nonnull)threadInspector processInfoWrapper:(id <SentryProcessInfoSource> _Nonnull)processInfoWrapper OBJC_DESIGNATED_INITIALIZER;
- (void)enable;
- (void)disable;
- (BOOL)measureNSData:(NSData * _Nonnull)data writeToFile:(NSString * _Nonnull)path atomically:(BOOL)atomically origin:(NSString * _Nonnull)origin method:(BOOL (^ _Nonnull)(NSString * _Nonnull, BOOL))method;
- (BOOL)measureNSData:(NSData * _Nonnull)data writeToFile:(NSString * _Nonnull)path options:(NSDataWritingOptions)writeOptionsMask origin:(NSString * _Nonnull)origin error:(NSError * _Nullable * _Nullable)error method:(BOOL (^ _Nonnull)(NSString * _Nonnull, NSDataWritingOptions, NSError * _Nullable * _Nullable))method;
- (NSData * _Nullable)measureNSDataFromFile:(NSString * _Nonnull)path origin:(NSString * _Nonnull)origin method:(NSData * _Nullable (^ _Nonnull)(NSString * _Nonnull))method SWIFT_WARN_UNUSED_RESULT;
- (NSData * _Nullable)measureNSDataFromFile:(NSString * _Nonnull)path options:(NSDataReadingOptions)readOptionsMask origin:(NSString * _Nonnull)origin error:(NSError * _Nullable * _Nullable)error method:(NSData * _Nullable (^ _Nonnull)(NSString * _Nonnull, NSDataReadingOptions, NSError * _Nullable * _Nullable))method SWIFT_WARN_UNUSED_RESULT;
- (NSData * _Nullable)measureNSDataFromURL:(NSURL * _Nonnull)url options:(NSDataReadingOptions)readOptionsMask origin:(NSString * _Nonnull)origin error:(NSError * _Nullable * _Nullable)error method:(NSData * _Nullable (^ _Nonnull)(NSURL * _Nonnull, NSDataReadingOptions, NSError * _Nullable * _Nullable))method SWIFT_WARN_UNUSED_RESULT;
- (BOOL)measureNSFileManagerCreateFileAtPath:(NSString * _Nonnull)path data:(NSData * _Nonnull)data attributes:(NSDictionary<NSFileAttributeKey, id> * _Nonnull)attributes origin:(NSString * _Nonnull)origin method:(BOOL (^ _Nonnull)(NSString * _Nonnull, NSData * _Nonnull, NSDictionary<NSFileAttributeKey, id> * _Nonnull))method;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry17SentryFileManager")
@interface SentryFileManager : NSObject
@property (nonatomic, copy) void (^ _Nullable envelopeDeletedCallback)(SentryEnvelopeItem * _Nonnull, NSUInteger);
@property (nonatomic, readonly, copy) NSString * _Nonnull basePath;
@property (nonatomic, readonly, copy) NSString * _Nonnull sentryPath;
@property (nonatomic, readonly, copy) NSString * _Nonnull breadcrumbsFilePathOne;
@property (nonatomic, readonly, copy) NSString * _Nonnull breadcrumbsFilePathTwo;
@property (nonatomic, readonly, copy) NSString * _Nonnull previousBreadcrumbsFilePathOne;
@property (nonatomic, readonly, copy) NSString * _Nonnull previousBreadcrumbsFilePathTwo;
- (nullable instancetype)initWithOptions:(SentryOptions * _Nullable)options dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider dispatchQueueWrapper:(SentryDispatchQueueWrapper * _Nonnull)dispatchQueueWrapper error:(NSError * _Nullable * _Nullable)error;
- (NSString * _Nullable)storeEnvelope:(SentryEnvelope * _Nonnull)envelope;
- (NSString * _Nullable)getEnvelopesPath:(NSString * _Nonnull)filePath SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryFileContents *> * _Nonnull)getAllEnvelopes SWIFT_WARN_UNUSED_RESULT;
- (SentryFileContents * _Nullable)getOldestEnvelope SWIFT_WARN_UNUSED_RESULT;
- (void)deleteOldEnvelopeItems;
- (void)deleteAllEnvelopes;
- (NSURL * _Nonnull)getSentryPathAsURL SWIFT_WARN_UNUSED_RESULT;
- (void)moveState:(NSString * _Nonnull)stateFilePath toPreviousState:(NSString * _Nonnull)previousStateFilePath;
- (void)storeCurrentSession:(SentrySession * _Nonnull)session;
- (SentrySession * _Nullable)readCurrentSession SWIFT_WARN_UNUSED_RESULT;
- (void)deleteCurrentSession;
- (void)storeCrashedSession:(SentrySession * _Nonnull)session;
- (SentrySession * _Nullable)readCrashedSession SWIFT_WARN_UNUSED_RESULT;
- (void)deleteCrashedSession;
- (void)storeAbnormalSession:(SentrySession * _Nonnull)session;
- (SentrySession * _Nullable)readAbnormalSession SWIFT_WARN_UNUSED_RESULT;
- (void)deleteAbnormalSession;
- (void)storeTimestampLastInForeground:(NSDate * _Nonnull)timestamp;
- (NSDate * _Nullable)readTimestampLastInForeground SWIFT_WARN_UNUSED_RESULT;
- (void)deleteTimestampLastInForeground;
- (void)storeAppState:(SentryAppState * _Nonnull)appState;
- (void)moveAppStateToPreviousAppState;
- (SentryAppState * _Nullable)readAppState SWIFT_WARN_UNUSED_RESULT;
- (SentryAppState * _Nullable)readPreviousAppState SWIFT_WARN_UNUSED_RESULT;
- (void)deleteAppState;
- (void)moveBreadcrumbsToPreviousBreadcrumbs;
- (NSArray * _Nonnull)readPreviousBreadcrumbs SWIFT_WARN_UNUSED_RESULT;
- (NSNumber * _Nullable)readTimezoneOffset SWIFT_WARN_UNUSED_RESULT;
- (void)storeTimezoneOffset:(NSInteger)offset;
- (void)deleteTimezoneOffset;
- (void)storeAppHangEvent:(SentryEvent * _Nonnull)event;
- (SentryEvent * _Nullable)readAppHangEvent SWIFT_WARN_UNUSED_RESULT;
- (BOOL)appHangEventExists SWIFT_WARN_UNUSED_RESULT;
- (void)deleteAppHangEvent;
+ (BOOL)createDirectoryAtPath:(NSString * _Nonnull)path error:(NSError * _Nullable * _Nullable)error;
- (void)deleteAllFolders;
- (void)removeFileAtPath:(NSString * _Nonnull)path;
- (NSArray<NSString *> * _Nonnull)allFilesInFolder:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT;
- (BOOL)isDirectory:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT;
- (NSData * _Nullable)readDataFromPath:(NSString * _Nonnull)path error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (BOOL)writeData:(NSData * _Nonnull)data toPath:(NSString * _Nonnull)toPath;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry25SentryFileManagerProtocol_")
@protocol SentryFileManagerProtocol
- (void)moveState:(NSString * _Nonnull)stateFilePath toPreviousState:(NSString * _Nonnull)previousStateFilePath;
- (NSData * _Nullable)readDataFromPath:(NSString * _Nonnull)path error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (BOOL)writeData:(NSData * _Nonnull)data toPath:(NSString * _Nonnull)path;
- (void)removeFileAtPath:(NSString * _Nonnull)path;
- (NSURL * _Nonnull)getSentryPathAsURL SWIFT_WARN_UNUSED_RESULT;
@end

@interface SentryFileManager (SWIFT_EXTENSION(Sentry)) <SentryFileManagerProtocol>
@end

SWIFT_CLASS("_TtC6Sentry18SentryFrameRemover")
@interface SentryFrameRemover : NSObject
/// Removes Sentry SDK frames until a frame from a different package is found.
/// @discussion When a user includes Sentry as a static library, the package is the same as the
/// application. Therefore removing frames with a package containing “sentry” doesn’t work. We can’t
/// look into the function name as in release builds, the function name can be obfuscated, or we
/// remove functions that are not from this SDK and contain “sentry”. Therefore this logic only works
/// for apps including Sentry dynamically.
+ (NSArray<SentryFrame *> * _Nonnull)removeNonSdkFrames:(NSArray<SentryFrame *> * _Nonnull)frames SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry26SentryFramesDelayResultSPI")
@interface SentryFramesDelayResultSPI : NSObject
@property (nonatomic, readonly) CFTimeInterval delayDuration;
@property (nonatomic, readonly) NSUInteger framesContributingToDelayCount;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry26SentryGlobalEventProcessor")
@interface SentryGlobalEventProcessor : NSObject
- (void)addEventProcessor:(SentryEvent * _Nullable (^ _Nonnull)(SentryEvent * _Nonnull))newProcessor;
- (SentryEvent * _Nullable)reportAll:(SentryEvent * _Nonnull)event;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry32SentryHangTrackerIntegrationObjC")
@interface SentryHangTrackerIntegrationObjC : NSObject
- (void)pauseAppHangTracking;
- (void)resumeAppHangTracking;
- (void)uninstall;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// HTTP status codes used by the Sentry SDK.
/// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status
typedef SWIFT_ENUM_NAMED(NSInteger, SentryHttpStatusCode, "SentryHttpStatusCode", open) {
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200
  SentryHttpStatusCodeOk = 200,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/201
  SentryHttpStatusCodeCreated = 201,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400
  SentryHttpStatusCodeBadRequest = 400,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/412
  SentryHttpStatusCodePreconditionFailed = 412,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/413
  SentryHttpStatusCodeContentTooLarge = 413,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429
  SentryHttpStatusCodeTooManyRequests = 429,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500
  SentryHttpStatusCodeInternalServerError = 500,
};

@class NSURLRequest;
/// Logs error messages for HTTP transport failures.
/// See https://develop.sentry.dev/sdk/expected-features/#dealing-with-network-failures
SWIFT_CLASS_NAMED("SentryHttpTransportHttpStatusCodeLogger")
@interface SentryHttpTransportHttpStatusCodeLogger : NSObject
/// Logs an error if the HTTP status code requires specific error messaging.
/// Currently handles HTTP 413 (Content Too Large) by logging envelope size and item types.
+ (void)logHttpResponseErrorWithStatusCode:(NSInteger)statusCode envelope:(SentryEnvelope * _Nonnull)envelope request:(NSURLRequest * _Nonnull)request;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@protocol SentrySpan;
@class SentryTransactionContext;
@class SentryLogger;
@class SentryUser;
/// The hub is the central manager for SDK configuration, error capture, and scope management.
SWIFT_CLASS("_TtC6Sentry9SentryHub")
@interface SentryHub : NSObject
/// Initializes a <code>SentryHub</code> with the given client and scope.
/// \param client The client to bind to the hub.
///
/// \param scope The scope to use for the hub.
///
- (nonnull instancetype)initWithClient:(SentryClient * _Nullable)client andScope:(SentryScope * _Nullable)scope OBJC_DESIGNATED_INITIALIZER;
/// Starts a new <code>SentrySession</code>. If there’s a running <code>SentrySession</code>, it ends it before starting the new one.
/// You can use this method in combination with <code>endSession</code> to manually track <code>SentrySession</code>s.
/// The SDK uses <code>SentrySession</code> to inform Sentry about release and project associated project health.
- (void)startSession;
/// Ends the current <code>SentrySession</code>. You can use this method in combination with <code>startSession</code> to
/// manually track <code>SentrySession</code>s. The SDK uses <code>SentrySession</code> to inform Sentry about release and
/// project associated project health.
- (void)endSession;
/// Ends the current session with the given timestamp.
/// \param timestamp The timestamp to end the session with.
///
- (void)endSessionWithTimestamp:(NSDate * _Nonnull)timestamp;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScope:(SentryScope * _Nonnull)scope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScope:(SentryScope * _Nonnull)scope;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScope:(SentryScope * _Nonnull)scope;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScope:(SentryScope * _Nonnull)scope;
/// Captures a new-style user feedback and sends it to Sentry.
/// \param feedback The user feedback to send to Sentry.
///
- (void)captureFeedback:(SentryFeedback * _Nonnull)feedback;
/// Use this method to modify the <code>Scope</code> of the Hub. The SDK uses the <code>Scope</code> to attach
/// contextual data to events.
/// \param callback The callback for configuring the <code>Scope</code> of the Hub.
///
- (void)configureScope:(void (^ _Nonnull)(SentryScope * _Nonnull))callback;
/// Adds a breadcrumb to the <code>Scope</code> of the Hub.
/// \param crumb The <code>Breadcrumb</code> to add to the <code>Scope</code> of the Hub.
///
- (void)addBreadcrumb:(SentryBreadcrumb * _Nonnull)crumb;
/// Returns a client if there is a bound client on the Hub.
- (SentryClient * _Nullable)getClient SWIFT_WARN_UNUSED_RESULT;
/// Returns either the current scope or a new one if it was <code>nil</code>.
@property (nonatomic, readonly, strong) SentryScope * _Nonnull scope;
/// Returns the logger associated with this Hub.
@property (nonatomic, readonly, strong) SentryLogger * _Nonnull logger;
/// Binds a different client to the hub.
- (void)bindClient:(SentryClient * _Nullable)client;
/// Checks if integration is activated.
- (BOOL)hasIntegration:(NSString * _Nonnull)integrationName SWIFT_WARN_UNUSED_RESULT;
/// Checks if a specific Integration (<code>integrationClass</code>) has been installed.
///
/// returns:
/// <code>true</code> if an instance of <code>integrationClass</code> exists within <code>SentryHub.installedIntegrations</code>.
- (BOOL)isIntegrationInstalled:(Class _Nonnull)integrationClass SWIFT_WARN_UNUSED_RESULT;
/// Set user to the <code>Scope</code> of the Hub.
/// \param user The user to set to the <code>Scope</code>.
///
- (void)setUser:(SentryUser * _Nullable)user;
/// Reports to the ongoing <code>UIViewController</code> transaction that the screen contents are fully loaded and displayed,
/// which will create a new span.
- (void)reportFullyDisplayed;
/// Waits synchronously for the SDK to flush out all queued and cached items for up to the specified timeout in seconds.
/// If there is no internet connection, the function returns immediately. The SDK doesn’t dispose the client or the hub.
/// \param timeout The time to wait for the SDK to complete the flush.
///
- (void)flush:(NSTimeInterval)timeout;
/// Calls flush with <code>SentryOptions/shutdownTimeInterval</code>.
- (void)close;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// This class detects whether a framework belongs to the app or not. We differentiate between three
/// different types of frameworks.
/// First, the main executable of the app, which’s name can be retrieved by @c CFBundleExecutable. To
/// mark this framework as “in-app” the caller needs to pass in the @c CFBundleExecutable to
/// @c inAppIncludes.
/// Next, there are private frameworks embedded in the application bundle. Both app supporting
/// frameworks as CocoaLumberJack, Sentry, RXSwift, etc., and frameworks written by the user fall
/// into this category. These frameworks can be both “in-app” or not. As we expect most frameworks of
/// this category to be supporting frameworks, we mark them not as “in-app”. If a user wants such a
/// framework to be “in-app”, they need to pass the name into @c inAppIncludes. For dynamic
/// frameworks, the location is usually in the bundle under
/// /Frameworks/FrameworkName.framework/FrameworkName. As for static frameworks, the location is the
/// same as the main executable; this class marks all static frameworks as “in-app”. To remove static
/// frameworks from being “in-app”, Sentry uses stack trace grouping rules on the server.
/// Last, this class marks all public frameworks as not “in-app”. Such frameworks are bound
/// dynamically and are usually located at /Library/Frameworks or ~/Library/Frameworks. For
/// simulators, the location can be something like
/// /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/…
SWIFT_CLASS("_TtC6Sentry16SentryInAppLogic")
@interface SentryInAppLogic : NSObject
/// A list of string prefixes of framework names that belong to the app, stored in lowercase.
@property (nonatomic, readonly, copy) NSArray<NSString *> * _Nonnull inAppIncludes;
/// Initializes @c SentryInAppLogic with @c inAppIncludes.
/// To work properly for Apple applications the @c inAppIncludes should contain the
/// @c CFBundleExecutable, which is the name of the bundle’s executable file.
/// @param inAppIncludes A list of string prefixes of framework names that belong to the app.
- (nonnull instancetype)initWithInAppIncludes:(NSArray<NSString *> * _Nonnull)inAppIncludes OBJC_DESIGNATED_INITIALIZER;
/// Determines if the framework belongs to the app by using @c inAppIncludes.
/// Before checking this method lowercases the strings and uses only the @c lastPathComponent of the
/// @c imagePath.
/// @param imagePath the full path of the binary image.
/// @return @c YES if the framework located at the @c imagePath starts with a prefix of
/// @c inAppIncludes. @c NO if the framework located at the @c imagePath doesn’t start with a prefix of
/// @c inAppIncludes.
- (BOOL)isInApp:(NSString * _Nullable)imagePath SWIFT_WARN_UNUSED_RESULT;
/// Determines if the class belongs to the app by getting its framework and checking with
/// @c -[isInApp:]
/// @param targetClass the class to check.
/// @return @c YES if the @c targetClass belongs to a framework included in @c inAppIncludes.
/// @c NO if targetClass does not belong to a framework in @c inAppIncludes.
- (BOOL)isClassInApp:(Class _Nonnull)targetClass SWIFT_WARN_UNUSED_RESULT;
/// Determines if an image name matches a given in-app include prefix.
/// \param imageName The full path of the binary image.
///
/// \param inAppInclude The prefix to check against.
///
///
/// returns:
/// <code>true</code> if the image name’s last path component starts with the given prefix.
+ (BOOL)isImageNameInApp:(NSString * _Nonnull)imageName inAppInclude:(NSString * _Nonnull)inAppInclude SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Manages the installation ID for the Sentry SDK.
/// The installation ID is a unique identifier for the SDK installation,
/// stored in a file in the cache directory. It’s used to identify the
/// device/installation across app launches.
SWIFT_CLASS("_TtC6Sentry18SentryInstallation")
@interface SentryInstallation : NSObject
/// Returns the installation ID for the given cache directory path.
/// If the installation ID is cached in memory, returns it immediately.
/// Otherwise, reads it from disk or generates a new one if it doesn’t exist.
+ (NSString * _Nonnull)idWithCacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath SWIFT_WARN_UNUSED_RESULT;
/// Returns the installation ID from disk without using the cache.
+ (NSString * _Nullable)idWithCacheDirectoryPathNonCached:(NSString * _Nonnull)cacheDirectoryPath SWIFT_WARN_UNUSED_RESULT;
/// Caches the installation ID asynchronously.
/// This method dispatches the ID retrieval to a background queue to avoid
/// blocking the main thread with file I/O operations.
+ (void)cacheIDAsyncWithCacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath;
/// Returns the cached installation ID if it exists in memory.
+ (NSString * _Nullable)cachedIdWithCacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry25SentryIntegrationProtocol_")
@protocol SentryIntegrationProtocol <NSObject>
- (void)uninstall;
@end

/// Represents the crash status of the last program execution.
/// Use <code>SentrySDK/lastRunStatus</code> to check if the previous app execution
/// terminated with a crash. Before the SDK is fully initialized, the status
/// is <code>unknown</code> because the crash reporter hasn’t loaded its state yet.
/// note:
/// This enum replaces the <code>crashedLastRun</code> boolean property, which
/// could not distinguish between “did not crash” and “not yet known.”
typedef SWIFT_ENUM(NSInteger, SentryLastRunStatus, open) {
/// The SDK hasn’t determined the crash status yet.
/// This is the value returned before <code>SentrySDK/start(configureOptions:)</code>
/// finishes initializing the crash reporter.
  SentryLastRunStatusUnknown = 0,
/// The last program execution did <em>not</em> end with a crash.
  SentryLastRunStatusDidNotCrash = 1,
/// The last program execution ended with a crash.
  SentryLastRunStatusDidCrash = 2,
};

SWIFT_CLASS("_TtC6Sentry17SentryLevelHelper")
@interface SentryLevelHelper : NSObject
+ (NSString * _Nonnull)nameForLevel:(SentryLevel)level SWIFT_WARN_UNUSED_RESULT;
+ (SentryLevel)levelForName:(NSString * _Nullable)name SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Utility class for locale-related functionality.
SWIFT_CLASS("_TtC6Sentry12SentryLocale")
@interface SentryLocale : NSObject
/// Determines if the current locale uses 24-hour time format.
///
/// returns:
/// <code>true</code> if 24-hour format is used, <code>false</code> if 12-hour (AM/PM) format is used.
+ (BOOL)timeIs24HourFormat SWIFT_WARN_UNUSED_RESULT;
/// Determines if the current locale’s language is a right-to-left language.
///
/// returns:
/// <code>true</code> if the language is RTL, <code>false</code> otherwise.
+ (BOOL)isRightToLeftLanguage SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentrySpanId;
enum SentryLogLevel : NSInteger;
/// A structured log entry that captures log data with associated attribute metadata.
/// Use the <code>options.beforeSendLog</code> callback to modify or filter log data.
SWIFT_CLASS("_TtC6Sentry9SentryLog")
@interface SentryLog : NSObject
/// The timestamp when the log event occurred
@property (nonatomic, copy) NSDate * _Nonnull timestamp;
/// The trace ID to associate this log with distributed tracing. This will be set to a valid non-empty value during processing.
@property (nonatomic, strong) SentryId * _Nonnull traceId;
/// The span ID of the span that was active when the log was collected.
@property (nonatomic, strong) SentrySpanId * _Nullable spanId;
/// The severity level of the log entry
@property (nonatomic) enum SentryLogLevel level;
/// The main log message content
@property (nonatomic, copy) NSString * _Nonnull body;
/// A dictionary of structured attributes added to the log entry
@property (nonatomic, copy) NSDictionary<NSString *, SentryAttribute *> * _Nonnull attributes;
/// Numeric representation of the severity level (Int)
@property (nonatomic, strong) NSNumber * _Nullable severityNumber;
/// Creates a log entry with the specified level and message.
/// \param level The severity level of the log entry
///
/// \param body The main log message content
///
- (nonnull instancetype)initWithLevel:(enum SentryLogLevel)level body:(NSString * _Nonnull)body;
/// Creates a log entry with the specified level, message, and attributes.
/// \param level The severity level of the log entry
///
/// \param body The main log message content
///
/// \param attributes A dictionary of structured attributes to add to the log entry
///
- (nonnull instancetype)initWithLevel:(enum SentryLogLevel)level body:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, SentryAttribute *> * _Nonnull)attributes;
/// Adds or updates an attribute in the log entry.
/// \param attribute The attribute value to add
///
/// \param key The key for the attribute
///
- (void)setAttribute:(SentryAttribute * _Nullable)attribute forKey:(NSString * _Nonnull)key;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@interface SentryLog (SWIFT_EXTENSION(Sentry))
@end

/// Represents the severity level of a structured log entry.
/// Log levels are ordered by severity from least (<code>trace</code>) to most severe (<code>fatal</code>).
/// Each level corresponds to a numeric severity value following the OpenTelemetry specification.
typedef SWIFT_ENUM_NAMED(NSInteger, SentryLogLevel, "Level", open) {
/// Trace level for very detailed diagnostic information.
  SentryLogLevelTrace = 0,
/// Debug level for diagnostic information useful during development.
  SentryLogLevelDebug = 1,
/// Info level for general informational messages.
  SentryLogLevelInfo = 2,
/// Warn level for potentially harmful situations.
  SentryLogLevelWarn = 3,
/// Error level for error events that might still allow the application to continue running.
  SentryLogLevelError = 4,
/// Fatal level for severe error events that will presumably lead the application to abort.
  SentryLogLevelFatal = 5,
};

@protocol SentryLoggerDelegate;
/// <code>SentryLogger</code> provides a structured logging interface that captures log entries
/// and sends them to Sentry. Supports multiple log levels (trace, debug, info, warn,
/// error, fatal) and allows attaching arbitrary attributes for enhanced context.
/// <h2>Supported Attribute Types</h2>
/// <ul>
///   <li>
///     <code>String</code>, <code>Bool</code>, <code>Int</code>, <code>Double</code>
///   </li>
///   <li>
///     <code>Float</code> (converted to <code>Double</code>)
///   </li>
///   <li>
///     Other types (converted to string)
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// \code
/// let logger = SentrySDK.logger
/// logger.info("User logged in", attributes: ["userId": "12345"])
/// logger.error("Payment failed", attributes: ["errorCode": 500])
///
/// // Structured string interpolation with automatic type detection
/// logger.info("User \(userId) processed \(count) items with \(percentage)% success")
/// logger.debug("Processing \(itemCount) items, active: \(isActive)")
/// logger.warn("Retry attempt \(currentAttempt) of \(maxAttempts) failed")
///
/// \endcode
SWIFT_CLASS("_TtC6Sentry12SentryLogger")
@interface SentryLogger : NSObject
/// Initializes a logger with the given delegate and date provider.
/// \param delegate The delegate that receives captured log entries.
///
/// \param dateProvider The date provider used to timestamp log entries.
///
- (nonnull instancetype)initWithDelegate:(id <SentryLoggerDelegate> _Nonnull)delegate dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider OBJC_DESIGNATED_INITIALIZER;
/// Logs a trace-level message.
- (void)trace:(NSString * _Nonnull)body;
/// Logs a trace-level message with additional attributes.
- (void)trace:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs a debug-level message.
- (void)debug:(NSString * _Nonnull)body;
/// Logs a debug-level message with additional attributes.
- (void)debug:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs an info-level message.
- (void)info:(NSString * _Nonnull)body;
/// Logs an info-level message with additional attributes.
- (void)info:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs a warning-level message.
- (void)warn:(NSString * _Nonnull)body;
/// Logs a warning-level message with additional attributes.
- (void)warn:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs an error-level message.
- (void)error:(NSString * _Nonnull)body;
/// Logs an error-level message with additional attributes.
- (void)error:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs a fatal-level message.
- (void)fatal:(NSString * _Nonnull)body;
/// Logs a fatal-level message with additional attributes.
- (void)fatal:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// A delegate that receives captured log entries from <code>SentryLogger</code>.
SWIFT_PROTOCOL("_TtP6Sentry20SentryLoggerDelegate_")
@protocol SentryLoggerDelegate
/// Captures a log entry and sends it to Sentry.
/// \param log The log entry to capture.
///
- (void)captureLog:(SentryLog * _Nonnull)log;
@end

@class SentryMeasurementUnit;
SWIFT_CLASS("_TtC6Sentry22SentryMeasurementValue")
@interface SentryMeasurementValue : NSObject
@property (nonatomic, readonly, strong) NSNumber * _Nonnull value;
@property (nonatomic, readonly, strong) SentryMeasurementUnit * _Nullable unit;
- (nonnull instancetype)initWithValue:(NSNumber * _Nonnull)value OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithValue:(NSNumber * _Nonnull)value unit:(SentryMeasurementUnit * _Nonnull)unit OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// For proper statistics in release health, we need to make sure we don’t send session updates
/// without sending a session init first. In other words, we can’t drop a session init. The
/// @c SentryFileManager deletes an envelope once the maximum amount of envelopes is stored. When
/// this happens and the envelope to delete contains a session init we look for the next envelope
/// containing a session update for the same session. If such a session envelope is found we migrate
/// the init flag. If none is found we delete the envelope. We don’t migrate other envelope items as
/// events.
SWIFT_CLASS("_TtC6Sentry24SentryMigrateSessionInit")
@interface SentryMigrateSessionInit : NSObject
/// Checks if the envelope of the passed file path contains an envelope item with a session init. If
/// it does it iterates over all envelopes and looks for a session with the same session id. If such
/// a session is found the init flag is set to @c true, the envelope is updated with keeping other
/// envelope items and headers, and the updated envelope is stored to the disk keeping its path.
/// @param envelope The envelope to delete
/// @param envelopesDirPath The path of the directory where the envelopes are stored.
/// @param envelopeFilePaths An array containing the file paths of envelopes to check if they contain
/// a session init.
/// @return @c true if the function migrated the session init. @c false if not.
+ (BOOL)migrateSessionInit:(SentryEnvelope * _Nullable)envelope envelopesDirPath:(NSString * _Nonnull)envelopesDirPath envelopeFilePaths:(NSArray<NSString *> * _Nonnull)envelopeFilePaths;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry27SentryMobileProvisionParser")
@interface SentryMobileProvisionParser : NSObject
@property (nonatomic, readonly) BOOL mobileProvisionProfileProvisionsAllDevices;
/// Whether the provisioning profile allows debugging (<code>get-task-allow</code> entitlement).
/// Its boolean value determines whether a debugger can attach to the app.
/// Development profiles set this to <code>true</code>; distribution profiles set it to <code>false</code>.
/// See: https://developer.apple.com/library/archive/technotes/tn2415/_index.html
/// See: https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles
@property (nonatomic, readonly) BOOL mobileProvisionProfileAllowsDebugging;
- (nonnull instancetype)init;
- (BOOL)hasEmbeddedMobileProvisionProfile SWIFT_WARN_UNUSED_RESULT;
@end

@class NSTimer;
SWIFT_CLASS("_TtC6Sentry20SentryNSTimerFactory")
@interface SentryNSTimerFactory : NSObject
- (NSTimer * _Nonnull)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^ _Nonnull)(NSTimer * _Nonnull))block;
- (NSTimer * _Nonnull)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id _Nonnull)aTarget selector:(SEL _Nonnull)aSelector userInfo:(id _Nullable)userInfo repeats:(BOOL)yesOrNo;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry25SentryNSURLRequestBuilder")
@interface SentryNSURLRequestBuilder : NSObject
- (NSURLRequest * _Nullable)createEnvelopeRequest:(SentryEnvelope * _Nonnull)envelope dsn:(SentryDsn * _Nonnull)dsn error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (NSURLRequest * _Nullable)createEnvelopeRequest:(SentryEnvelope * _Nonnull)envelope url:(NSURL * _Nonnull)url error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// The Telemetry processor is sitting between the client and transport to efficiently deliver telemetry to Sentry (as of 2026-02-04).
/// Currently used for logs and metrics only; planned to cover all telemetry with buffering, rate limiting, client reports, and priority-based sending.
/// Offline caching is still handled by the transport today, but the long-term goal is to move it here so the transport focuses on sending only.
/// This is an Objective-C compatible subset of the telemetry processor protocol.
/// Use <code>SentryTelemetryProcessor</code> instead when working in Swift, which adds support for
/// Swift-only types like <code>SentryMetric</code>.
/// See dev docs for details (work in progress): https://develop.sentry.dev/sdk/telemetry/telemetry-processor/
SWIFT_PROTOCOL("_TtP6Sentry28SentryObjCTelemetryProcessor_")
@protocol SentryObjCTelemetryProcessor
- (void)addLog:(SentryLog * _Nonnull)log;
/// Forwards buffered telemetry data to the transport for sending.
- (NSTimeInterval)forwardTelemetryData SWIFT_WARN_UNUSED_RESULT;
@end

@class NSPredicate;
/// Used to transform an NSPredicate into a human-friendly string.
/// This class is used for CoreData and omits variable values
/// and doesn’t convert CoreData unsupported instructions.
SWIFT_CLASS("_TtC6Sentry25SentryPredicateDescriptor")
@interface SentryPredicateDescriptor : NSObject
- (NSString * _Nonnull)predicateDescription:(NSPredicate * _Nonnull)predicate SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

enum SentryProfileLifecycle : NSInteger;
/// An object containing configuration for the Sentry profiler.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// If either <code>SentryOptions.profilesSampleRate</code> or <code>SentryOptions.profilesSampler</code> are
/// set to a non-nil value such that transaction-based profiling is being used, these settings
/// will have no effect, nor will <code>SentrySDK.startProfiler()</code> or <code>SentrySDK.stopProfiler()</code>.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
SWIFT_CLASS("_TtC6Sentry20SentryProfileOptions")
@interface SentryProfileOptions : NSObject
/// The mode to use for starting and stopping the profiler, either manually or automatically.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// Default: <code>SentryProfileLifecycleManual</code>.
/// note:
/// If either <code>SentryOptions.profilesSampleRate</code> or <code>SentryOptions.profilesSampler</code> are
/// set to a non-nil value such that transaction-based profiling is being used, then setting
/// this property has no effect.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic) enum SentryProfileLifecycle lifecycle;
/// The % of user sessions in which to enable profiling.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// The decision whether or not to sample profiles is computed using this sample rate
/// when the SDK is started, and applies to any requests to start the profiler–regardless of
/// <code>lifecycle</code>– until the app resigns its active status. It is then reevaluated on subsequent
/// foreground events. The duration of time that a sample decision prevails between
/// launch/foreground and background is referred to as a profile session.
/// note:
/// Backgrounding and foregrounding the app starts a new user session and sampling is
/// re-evaluated. If there is no active trace when the app is backgrounded, profiling stops
/// before the app backgrounds. If there is an active trace and profiling is in-flight when the
/// app is foregrounded again, the same profiling session should continue until the last root
/// span in that trace finishes — this means that the re-evaluated sample rate does not actually
/// take effect until the profiler is started again.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic) float sessionSampleRate;
/// Start the profiler as early as possible during the app lifecycle to capture more activity
/// during your app’s launch.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// <code>sessionSampleRate</code> is evaluated on the previous launch and only takes effect when
/// app start profiling activates on the next launch.
/// note:
/// If <code>lifecycle</code> is <code>manual</code>, profiling is started automatically on startup, but you
/// must manually call <code>SentrySDK.stopProfiler()</code> whenever you app startup to be complete. If
/// <code>lifecycle</code> is <code>trace</code>, profiling is started automatically on startup, and will
/// automatically be stopped when the root span that is associated with app startup ends.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic) BOOL profileAppStarts;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Different modes for starting and stopping the profiler.
typedef SWIFT_ENUM(NSInteger, SentryProfileLifecycle, open) {
/// Profiling is controlled manually, and is independent of transactions & spans. Developers
/// must use<code>SentrySDK.startProfiler()</code> and <code>SentrySDK.stopProfiler()</code> to manage the profile
/// session. If the session is sampled, <code>SentrySDK.startProfiler()</code> will always start
/// profiling.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
  SentryProfileLifecycleManual = 0,
/// Profiling is automatically started when there is at least 1 active root span, and
/// automatically stopped when there are 0 root spans.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// This mode only works if tracing is enabled.
/// note:
/// Profiling respects both <code>SentryProfileOptions.profileSessionSampleRate</code> and
/// the existing sampling configuration for tracing
/// (<code>SentryOptions.tracesSampleRate</code>/<code>SentryOptions.tracesSampler</code>). Sampling will be
/// re-evaluated on a per root span basis.
/// note:
/// If there are multiple overlapping root spans, where some are sampled and some or
/// not, profiling will continue until the end of the last sampled root span. Profiling data
/// will not be linked with spans that are not sampled.
/// note:
/// When the last root span finishes, the profiler will continue running until the
/// end of the current timed interval. If a new root span starts before this interval
/// completes, the profiler will instead continue running until the next root span stops, at
/// which time it will attempt to stop again in the same way.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
  SentryProfileLifecycleTrace = 1,
};

@class SentryTraceHeader;
SWIFT_CLASS("_TtC6Sentry24SentryPropagationContext")
@interface SentryPropagationContext : NSObject
@property (nonatomic, readonly, strong) SentryId * _Nonnull traceId;
@property (nonatomic, readonly, strong) SentryTraceHeader * _Nonnull traceHeader;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithTraceId:(SentryId * _Nonnull)traceId spanId:(SentrySpanId * _Nonnull)spanId OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, NSString *> * _Nonnull)traceContextForEvent SWIFT_WARN_UNUSED_RESULT;
/// Determines whether a trace should be continued based on the incoming baggage org ID
/// and the SDK options.
/// This method is intentionally not called from the Cocoa SDK’s own production code because
/// the Cocoa SDK is a mobile client SDK that does not receive incoming HTTP requests with
/// trace headers. It is exposed as a public utility for:
/// <ul>
///   <li>
///     Hybrid SDKs (React Native, Flutter, Capacitor) that handle inbound trace validation
///     in their JS/Dart layer and use the Cocoa SDK for options storage and outbound propagation
///   </li>
///   <li>
///     Any consumer that needs to validate incoming traces against org ID
///   </li>
/// </ul>
/// Decision matrix:
/// | Baggage org | SDK org | strict=false | strict=true |
/// |———––|———|———––|———––|
/// | 1           | 1       | Continue    | Continue    |
/// | None        | 1       | Continue    | New trace   |
/// | 1           | None    | Continue    | New trace   |
/// | None        | None    | Continue    | Continue    |
/// | 1           | 2       | New trace   | New trace   |
+ (BOOL)shouldContinueTraceWithOptions:(SentryOptions * _Nonnull)options baggageOrgId:(NSString * _Nullable)baggageOrgId SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_PROTOCOL_NAMED("SentryRRWebEventProtocol")
@protocol SentryRRWebEvent <SentrySerializable>
@end

SWIFT_CLASS("_TtC6Sentry16SentryRRWebEvent")
@interface SentryRRWebEvent : NSObject <SentryRRWebEvent>
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nullable data;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry22SentryRRWebCustomEvent")
@interface SentryRRWebCustomEvent : SentryRRWebEvent
@end

SWIFT_CLASS("_TtC6Sentry26SentryRRWebBreadcrumbEvent")
@interface SentryRRWebBreadcrumbEvent : SentryRRWebCustomEvent
- (nonnull instancetype)initWithTimestamp:(NSDate * _Nonnull)timestamp category:(NSString * _Nonnull)category message:(NSString * _Nullable)message data:(NSDictionary<NSString *, id> * _Nullable)data;
- (nonnull instancetype)initWithTimestamp:(NSDate * _Nonnull)timestamp category:(NSString * _Nonnull)category message:(NSString * _Nullable)message level:(SentryLevel)level data:(NSDictionary<NSString *, id> * _Nullable)data OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry20SentryRRWebSpanEvent")
@interface SentryRRWebSpanEvent : SentryRRWebCustomEvent
- (nonnull instancetype)initWithTimestamp:(NSDate * _Nonnull)timestamp endTimestamp:(NSDate * _Nonnull)endTimestamp operation:(NSString * _Nonnull)operation description:(NSString * _Nonnull)description data:(NSDictionary<NSString *, id> * _Nonnull)data OBJC_DESIGNATED_INITIALIZER;
@end

/// Protocol for generating random numbers.
SWIFT_PROTOCOL("_TtP6Sentry20SentryRandomProtocol_")
@protocol SentryRandomProtocol
/// Returns a random number uniformly distributed over the interval [0.0 , 1.0].
- (double)nextNumber SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry12SentryRandom")
@interface SentryRandom : NSObject <SentryRandomProtocol>
/// Returns a random number uniformly distributed over the interval [0.0 , 1.0].
- (double)nextNumber SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry18SentryReachability")
@interface SentryReachability : NSObject
- (void)addObserver:(id <SentryReachabilityObserver> _Nonnull)observer;
- (void)removeObserver:(id <SentryReachabilityObserver> _Nonnull)observer;
- (void)removeAllObservers;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Options for configuring what content should be redacted in session replays.
SWIFT_PROTOCOL("_TtP6Sentry19SentryRedactOptions_")
@protocol SentryRedactOptions
/// Whether all text content should be masked. Defaults to <code>true</code>.
@property (nonatomic, readonly) BOOL maskAllText;
/// Whether all images should be masked. Defaults to <code>true</code>.
@property (nonatomic, readonly) BOOL maskAllImages;
/// Additional view classes that should always be masked.
@property (nonatomic, readonly, copy) NSArray<Class> * _Nonnull maskedViewClasses;
/// View classes that should never be masked, overriding default masking behavior.
@property (nonatomic, readonly, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies.
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing
/// their subtrees to be traversed even if they would otherwise be excluded.
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
@end

SWIFT_CLASS("_TtC6Sentry26SentryRedactDefaultOptions")
@interface SentryRedactDefaultOptions : NSObject <SentryRedactOptions>
@property (nonatomic) BOOL maskAllText;
@property (nonatomic) BOOL maskAllImages;
@property (nonatomic, copy) NSArray<Class> * _Nonnull maskedViewClasses;
@property (nonatomic, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies (e.g., views that activate internal CoreAnimation
/// animations when their layers are accessed).
/// Matching uses partial string containment: if a view’s class name (from <code>type(of: view).description()</code>)
/// contains any of these strings, the subtree will be ignored. For example, “MyView” will match
/// “MyApp.MyView”, “MyViewSubclass”, “Some.MyView.Container”, etc.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing their subtrees
/// to be traversed even if they would otherwise be excluded by default or via <code>excludedViewClasses</code>.
/// Matching uses exact string matching: the view’s class name (from <code>type(of: view).description()</code>)
/// must exactly equal one of these strings. For example, “MyApp.MyView” will only match exactly “MyApp.MyView”,
/// not “MyApp.MyViewSubclass”.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches. For example,
/// if “ChromeCameraUI” is excluded and “Camera” is included, “ChromeCameraUI” will still be excluded
/// because “Camera” doesn’t exactly match “ChromeCameraUI”.
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry31SentryReplayBreadcrumbConverter_")
@protocol SentryReplayBreadcrumbConverter <NSObject>
- (id <SentryRRWebEvent> _Nullable)convertFrom:(SentryBreadcrumb * _Nonnull)breadcrumb SWIFT_WARN_UNUSED_RESULT;
@end

enum SentryReplayType : NSInteger;
SWIFT_CLASS("_TtC6Sentry17SentryReplayEvent")
@interface SentryReplayEvent : SentryEvent
@property (nonatomic, readonly, copy) NSDate * _Nonnull replayStartTimestamp;
@property (nonatomic, readonly) enum SentryReplayType replayType;
/// Number of the segment in the replay.
/// This is an incremental number
@property (nonatomic, readonly) NSInteger segmentId;
/// This will be used to store the name of the screens
/// that appear during the duration of the replay segment.
@property (nonatomic, copy) NSArray<NSString *> * _Nullable urls;
- (nonnull instancetype)initWithEventId:(SentryId * _Nonnull)eventId replayStartTimestamp:(NSDate * _Nonnull)replayStartTimestamp replayType:(enum SentryReplayType)replayType segmentId:(NSInteger)segmentId OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
- (nonnull instancetype)initWithLevel:(SentryLevel)level SWIFT_UNAVAILABLE;
@end

/// Main container for network request/response tracking.
/// ObjC callers (SentryNetworkTracker) create this object and populate it
/// via <code>setRequest</code>/<code>setResponse</code>. Swift callers (SentrySRDefaultBreadcrumbConverter)
/// consume it via <code>serialize()</code>.
/// important:
/// <code>setRequest</code> and <code>setResponse</code> can be called concurrently from
/// <code>SentryNetworkTracker</code> because they write to independent properties.
/// Adding shared mutable state between will require adding synchronization.
SWIFT_CLASS("_TtC6Sentry26SentryReplayNetworkDetails")
@interface SentryReplayNetworkDetails : NSObject
/// Key used to store network details in breadcrumb data dictionary.
/// The __sentry key prefix strips this from event serialization.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull replayNetworkDetailsKey;)
+ (NSString * _Nonnull)replayNetworkDetailsKey SWIFT_WARN_UNUSED_RESULT;
/// Creates a new instance with the given HTTP method.
- (nonnull instancetype)initWithMethod:(NSString * _Nullable)method OBJC_DESIGNATED_INITIALIZER;
/// Sets request details from raw body data.
/// Parses the body data based on content type (JSON, form-urlencoded, text)
/// and applies size limits and truncation warnings automatically.
/// \param size Request body size in bytes, or nil if unknown.
///
/// \param bodyData Raw body bytes, or nil if body capture is disabled or unavailable.
///
/// \param contentType MIME content type for body parsing (e.g. “application/json”).
///
/// \param allHeaders All headers from the request (e.g. from <code>NSURLRequest.allHTTPHeaderFields</code>).
///
/// \param configuredHeaders Header names to extract, matched case-insensitively.
///
- (void)setRequestWithSize:(NSNumber * _Nullable)size bodyData:(NSData * _Nullable)bodyData contentType:(NSString * _Nullable)contentType allHeaders:(NSDictionary<NSString *, id> * _Nullable)allHeaders configuredHeaders:(NSArray<NSString *> * _Nullable)configuredHeaders;
/// Sets response details from raw body data.
/// Parses the body data based on content type (JSON, form-urlencoded, text)
/// and applies size limits and truncation warnings automatically.
/// \param statusCode HTTP status code.
///
/// \param size Response body size in bytes, or nil if unknown.
///
/// \param bodyData Raw body bytes, or nil if body capture is disabled or unavailable.
///
/// \param contentType MIME content type for body parsing (e.g. “application/json”).
///
/// \param allHeaders All headers from the response (e.g. from <code>NSHTTPURLResponse.allHeaderFields</code>).
///
/// \param configuredHeaders Header names to extract, matched case-insensitively.
///
- (void)setResponseWithStatusCode:(NSInteger)statusCode size:(NSNumber * _Nullable)size bodyData:(NSData * _Nullable)bodyData contentType:(NSString * _Nullable)contentType allHeaders:(NSDictionary<NSString *, id> * _Nullable)allHeaders configuredHeaders:(NSArray<NSString *> * _Nullable)configuredHeaders;
/// Serializes to dictionary for inclusion in breadcrumb data.
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

enum SentryReplayQuality : NSInteger;
SWIFT_CLASS("_TtC6Sentry19SentryReplayOptions")
@interface SentryReplayOptions : NSObject <SentryRedactOptions>
/// Indicates the percentage in which the replay for the session will be created.
/// note:
/// The value needs to be <code>>= 0.0</code> and <code><= 1.0</code>. When setting a value out of range the SDK sets it
/// to the default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.sessionSegmentDuration</code> for the default duration of the replay.
/// <ul>
///   <li>
///     Specifying @c 0 means never, @c 1.0 means always.
///   </li>
/// </ul>
@property (nonatomic) float sessionSampleRate;
/// Indicates the percentage in which a 30 seconds replay will be send with error events.
/// note:
/// The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets it
/// to the default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.errorReplayDuration</code> for the default duration of the replay.
/// <ul>
///   <li>
///     Specifying 0 means never, 1.0 means always.
///   </li>
/// </ul>
@property (nonatomic) float onErrorSampleRate;
/// Indicates whether session replay should redact all text in the app
/// by drawing a black rectangle over it.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.maskAllText</code> for the default value.
@property (nonatomic) BOOL maskAllText;
/// Indicates whether session replay should redact all non-bundled image
/// in the app by drawing a black rectangle over it.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.maskAllImages</code> for the default value.
@property (nonatomic) BOOL maskAllImages;
/// Indicates the quality of the replay.
/// The higher the quality, the higher the CPU and bandwidth usage.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.quality</code> for the default value.
@property (nonatomic) enum SentryReplayQuality quality;
/// A list of custom UIView subclasses that need
/// to be masked during session replay.
/// By default Sentry already mask text and image elements from UIKit
/// Every child of a view that is redacted will also be redacted.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.maskedViewClasses</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull maskedViewClasses;
/// A list of custom UIView subclasses to be ignored
/// during masking step of the session replay.
/// The views of given classes will not be redacted but their children may be.
/// This property has precedence over <code>redactViewTypes</code>.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.unmaskedViewClasses</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies (e.g., views that activate internal CoreAnimation
/// animations when their layers are accessed).
/// Matching uses partial string containment: if a view’s class name (from <code>type(of: view).description()</code>)
/// contains any of these strings, the subtree will be ignored. For example, “MyView” will match
/// “MyApp.MyView”, “MyViewSubclass”, “Some.MyView.Container”, etc.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing their subtrees
/// to be traversed even if they would otherwise be excluded by default or via <code>excludedViewClasses</code>.
/// Matching uses exact string matching: the view’s class name (from <code>type(of: view).description()</code>)
/// must exactly equal one of these strings. For example, “MyApp.MyView” will only match exactly “MyApp.MyView”,
/// not “MyApp.MyViewSubclass”.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+
/// by calling <code>includeViewTypeInSubtreeTraversal("CameraUI.ChromeSwiftUIView")</code>.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches. For example,
/// if “ChromeCameraUI” is excluded and “Camera” is included, “ChromeCameraUI” will still be excluded
/// because “Camera” doesn’t exactly match “ChromeCameraUI”.
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
/// Adds a view type pattern to the excluded set, preventing matching views’ subtrees from being traversed.
/// note:
/// This method adds the pattern to <code>excludedViewClasses</code>, which is then combined with
/// default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and filtered by <code>includedViewClasses</code>
/// to produce the final set.
/// \param viewType The view type identifier pattern (as a string) to exclude from subtree traversal.
/// Matching uses partial string containment: if a view’s class name contains this string,
/// the subtree will be ignored. For example, “MyView” will match “MyApp.MyView”,
/// “MyViewSubclass”, etc.
///
- (void)excludeViewTypeFromSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Adds a view type to the included set, allowing its subtree to be traversed.
/// note:
/// This method adds the view type to <code>includedViewClasses</code>, which filters the combined set
/// of default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and <code>excludedViewClasses</code>.
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches.
/// \param viewType The view type identifier (as a string) to include in subtree traversal.
/// Must exactly match the result of <code>type(of: view).description()</code>.
/// For example, “MyApp.MyView” will only match exactly “MyApp.MyView”.
///
- (void)includeViewTypeInSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Alias for <code>enableViewRendererV2</code>.
/// This flag is deprecated and will be removed in a future version.
/// Please use <code>enableViewRendererV2</code> instead.
@property (nonatomic) BOOL enableExperimentalViewRenderer SWIFT_DEPRECATED_MSG("", "enableViewRendererV2");
/// Enables the up to 5x faster new view renderer used by the Session Replay integration.
/// Enabling this flag will reduce the amount of time it takes to render each frame of the session replay on the main thread, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// <em>up to 4-5x faster rendering</em> (reducing <code>~160ms</code> to <code>~36ms</code> per frame) on older devices.
/// experiment:
/// In case you are noticing issues with the new view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>.
/// Eventually, we will remove this feature flag and use the new view renderer by default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.enableViewRendererV2</code> for the default value.
@property (nonatomic) BOOL enableViewRendererV2;
/// Enables up to 5x faster but incomplete view rendering used by the Session Replay integration.
/// Enabling this flag will reduce the amount of time it takes to render each frame of the session replay on the main thread, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// up to <em>5x faster render times</em> (reducing <code>~160ms</code> to <code>~30ms</code> per frame).
/// This flag controls the way the view hierarchy is drawn into a graphics context for the session replay. By default, the view hierarchy is drawn using
/// the <code>UIView.drawHierarchy(in:afterScreenUpdates:)</code> method, which is the most complete way to render the view hierarchy. However,
/// this method can be slow, especially when rendering complex views, therefore enabling this flag will switch to render the underlying <code>CALayer</code> instead.
/// note:
/// This flag can only be used together with <code>enableViewRendererV2</code> with up to 20% faster render times.
/// warning:
/// Rendering the view hiearchy using the <code>CALayer.render(in:)</code> method can lead to rendering issues, especially when using custom views.
/// For complete rendering, it is recommended to set this option to <code>false</code>. In case you prefer performance over completeness, you can
/// set this option to <code>true</code>.
/// experiment:
/// This is an experimental feature and is therefore disabled by default. In case you are noticing issues with the experimental
/// view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>. Eventually, we will
/// mark this feature as stable and remove the experimental flag, but will keep it disabled by default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.enableFastViewRendering</code> for the default value.
@property (nonatomic) BOOL enableFastViewRendering;
/// Whether to capture request and response bodies for allowed URLs.
/// When <code>true</code> (default), bodies will be captured and parsed (JSON bodies are
/// parsed for structured display in the Sentry UI).
/// When <code>false</code>, only headers and metadata will be captured for allowed URLs.
/// Default: <code>true</code>
/// note:
/// This setting only applies when <code>networkDetailAllowUrls</code> is non-empty.
/// note:
/// Bodies are automatically truncated to 150KB to prevent excessive memory usage.
/// note:
/// Requires <code>options.experimental.enableReplayNetworkDetailsCapturing</code> to be <code>true</code>.
@property (nonatomic) BOOL networkCaptureBodies;
/// Request headers to capture for allowed URLs during session replay.
/// Specifies which HTTP request headers should be captured and included in session replay
/// network details. Header matching is case-insensitive (e.g., “content-type”, “Content-Type”,
/// and “CoNtEnT-tYpE” are all equivalent).
/// Default (always included): <code>["Content-Type", "Content-Length", "Accept"]</code>
/// Example:
/// \code
/// options.sessionReplay.networkRequestHeaders = [
///     "Authorization",
///     "User-Agent"
/// ]
///
/// \endcodenote:
/// This setting only applies when <code>networkDetailAllowUrls</code> is non-empty.
/// note:
/// Header names preserve the case seen on the request, not the case specified here.
/// note:
/// Requires <code>options.experimental.enableReplayNetworkDetailsCapturing</code> to be <code>true</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nonnull networkRequestHeaders;
/// Response headers to capture for allowed URLs during session replay.
/// Specifies which HTTP response headers should be captured and included in session replay
/// network details. Header matching is case-insensitive (e.g., “content-type”, “Content-Type”,
/// and “CoNtEnT-tYpE” are all equivalent).
/// Default (always included): <code>["Content-Type", "Content-Length", "Accept"]</code>
/// Example:
/// \code
/// options.sessionReplay.networkResponseHeaders = [
///     "Cache-Control",    // Custom header
///     "Set-Cookie"        // Custom header
/// ]
///
/// \endcodenote:
/// This setting only applies when <code>networkDetailAllowUrls</code> is non-empty.
/// note:
/// Header names preserve the case seen on the response, not the case specified here.
/// note:
/// Requires <code>options.experimental.enableReplayNetworkDetailsCapturing</code> to be <code>true</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nonnull networkResponseHeaders;
/// Defines the quality of the session replay.
/// Higher bit rates better quality, but also bigger files to transfer.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.quality</code> for the default value.
@property (nonatomic, readonly) NSInteger replayBitRate;
/// The scale related to the window size at which the replay will be created
/// note:
/// The scale is used to reduce the size of the replay.
@property (nonatomic, readonly) float sizeScale;
/// Number of frames per second of the replay.
/// The more the havier the process is.
/// The minimum is 1, if set to zero this will change to 1.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.frameRate</code> for the default value.
@property (nonatomic) NSUInteger frameRate;
/// The maximum duration of replays for error events.
@property (nonatomic) NSTimeInterval errorReplayDuration;
/// The maximum duration of the segment of a session replay.
@property (nonatomic) NSTimeInterval sessionSegmentDuration;
/// The maximum duration of a replay session.
/// note:
/// See  <code>SentryReplayOptions.DefaultValues.maximumDuration</code> for the default value.
@property (nonatomic) NSTimeInterval maximumDuration;
/// Determines if network detail capture is enabled for a given URL.
/// \param urlString The URL string to check
///
///
/// returns:
/// <code>true</code> if network details should be captured for this URL, <code>false</code> otherwise
- (BOOL)isNetworkDetailCaptureEnabledFor:(NSString * _Nonnull)urlString SWIFT_WARN_UNUSED_RESULT;
/// Initialize session replay options disabled
/// note:
/// This initializer is added for Objective-C compatibility, as constructors with default values
/// are not supported in Objective-C.
/// note:
/// See <code>SentryReplayOptions.DefaultValues</code> for the default values of each parameter.
- (nonnull instancetype)init;
/// Initializes a new instance of <code>SentryReplayOptions</code> using a dictionary.
/// warning:
/// This initializer is primarily used by Hybrid SDKs and is not intended for public use.
/// \param dictionary A dictionary containing the configuration options for the session replay.
///
- (nonnull instancetype)initWithDictionary:(NSDictionary<NSString *, id> * _Nonnull)dictionary;
/// Initializes a new instance of <code>SentryReplayOptions</code> with the specified parameters.
/// note:
/// See <code>SentryReplayOptions.DefaultValues</code> for the default values of each parameter.
/// \param sessionSampleRate Sample rate used to determine the percentage of replays of sessions that will be uploaded.
///
/// \param onErrorSampleRate Sample rate used to determine the percentage of replays of error events that will be uploaded.
///
/// \param maskAllText Flag to redact all text in the app by drawing a rectangle over it.
///
/// \param maskAllImages Flag to redact all images in the app by drawing a rectangle over it.
///
/// \param enableViewRendererV2 Enables the up to 5x faster view renderer.
///
/// \param enableFastViewRendering Enables faster but incomplete view rendering. See <code>SentryReplayOptions.enableFastViewRendering</code> for more information.
///
- (nonnull instancetype)initWithSessionSampleRate:(float)sessionSampleRate onErrorSampleRate:(float)onErrorSampleRate maskAllText:(BOOL)maskAllText maskAllImages:(BOOL)maskAllImages enableViewRendererV2:(BOOL)enableViewRendererV2 enableFastViewRendering:(BOOL)enableFastViewRendering;
@end

/// Enum to define the quality of the session replay.
typedef SWIFT_ENUM(NSInteger, SentryReplayQuality, open) {
/// Video Scale: 80%
/// Bit Rate: 20.000
  SentryReplayQualityLow = 0,
/// Video Scale: 100%
/// Bit Rate: 40.000
  SentryReplayQualityMedium = 1,
/// Video Scale: 100%
/// Bit Rate: 60.000
  SentryReplayQualityHigh = 2,
};

@class SentryVideoInfo;
SWIFT_CLASS("_TtC6Sentry21SentryReplayRecording")
@interface SentryReplayRecording : NSObject
- (nonnull instancetype)initWithSegmentId:(NSInteger)segmentId video:(SentryVideoInfo * _Nonnull)video extraEvents:(NSArray<id <SentryRRWebEvent>> * _Nonnull)extraEvents;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

typedef SWIFT_ENUM(NSInteger, SentryReplayType, open) {
  SentryReplayTypeSession = 0,
  SentryReplayTypeBuffer = 1,
};

/// The main entry point for the Sentry SDK.
/// We recommend using <code>start(configureOptions:)</code> to initialize Sentry.
SWIFT_CLASS("_TtC6Sentry9SentrySDK")
@interface SentrySDK : NSObject
/// The current active transaction or span bound to the scope.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentrySpan> _Nullable span;)
+ (id <SentrySpan> _Nullable)span SWIFT_WARN_UNUSED_RESULT;
/// Indicates whether the Sentry SDK is enabled.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) BOOL isEnabled;)
+ (BOOL)isEnabled SWIFT_WARN_UNUSED_RESULT;
/// API to access Sentry logs
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryLogger * _Nonnull logger;)
+ (SentryLogger * _Nonnull)logger SWIFT_WARN_UNUSED_RESULT;
/// Inits and configures Sentry (<code>SentryHub</code>, <code>SentryClient</code>) and sets up all integrations. Make sure to
/// set a valid DSN.
/// note:
/// Call this method on the main thread. When calling it from a background thread, the
/// SDK starts on the main thread async.
+ (void)startWithOptions:(SentryOptions * _Nonnull)options;
/// Inits and configures Sentry (<code>SentryHub</code>, <code>SentryClient</code>) and sets up all integrations. Make sure to
/// set a valid DSN.
/// note:
/// Call this method on the main thread. When calling it from a background thread, the
/// SDK starts on the main thread async.
+ (void)startWithConfigureOptions:(void (^ _Nonnull)(SentryOptions * _Nonnull))configureOptions;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event;
/// Captures a manually created event and sends it to Sentry. Only the data in this scope object will
/// be added to the event. The global scope will be ignored.
/// \param event The event to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScope:(SentryScope * _Nonnull)scope;
/// Captures a manually created event and sends it to Sentry. Maintains the global scope but mutates
/// scope data for only this call.
/// \param event The event to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures a manually created event and sends it to Sentry, with a per-call override for
/// attaching all threads with stack traces.
/// \param event The event to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event attachAllThreads:(BOOL)attachAllThreads;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error;
/// Captures an error event and sends it to Sentry. Only the data in this scope object will be added
/// to the event. The global scope will be ignored.
/// \param error The error to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScope:(SentryScope * _Nonnull)scope;
/// Captures an error event and sends it to Sentry. Maintains the global scope but mutates scope data
/// for only this call.
/// \param error The error to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures an error event and sends it to Sentry, with a per-call override for attaching all
/// threads with stack traces.
/// \param error The error to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error attachAllThreads:(BOOL)attachAllThreads;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception;
/// Captures an exception event and sends it to Sentry. Only the data in this scope object will be
/// added to the event. The global scope will be ignored.
/// \param exception The exception to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScope:(SentryScope * _Nonnull)scope;
/// Captures an exception event and sends it to Sentry. Maintains the global scope but mutates scope
/// data for only this call.
/// \param exception The exception to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures an exception event and sends it to Sentry, with a per-call override for attaching
/// all threads with stack traces.
/// \param exception The exception to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception attachAllThreads:(BOOL)attachAllThreads;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message;
/// Captures a message event and sends it to Sentry. Only the data in this scope object will be added
/// to the event. The global scope will be ignored.
/// \param message The message to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScope:(SentryScope * _Nonnull)scope;
/// Captures a message event and sends it to Sentry. Maintains the global scope but mutates scope
/// data for only this call.
/// \param message The message to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures a message event and sends it to Sentry, with a per-call override for attaching all
/// threads with stack traces.
/// \param message The message to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message attachAllThreads:(BOOL)attachAllThreads;
/// Captures user feedback that was manually gathered and sends it to Sentry.
/// warning:
/// This is an experimental feature and may still have bugs.
/// note:
/// If you’d prefer not to build the UI required to gather the feedback from the user,
/// configure the managed form with <code>SentryOptions.configureUserFeedback</code> and present it with
/// <code>SentrySDK.feedback.show()</code>, <code>SentrySDK.FeedbackForm</code>, or SwiftUI’s
/// <code>sentryFeedback(isPresented:)</code>. See https://docs.sentry.io/platforms/apple/user-feedback/
/// for more information.
/// \param feedback The feedback to send to Sentry.
///
+ (void)captureFeedback:(SentryFeedback * _Nonnull)feedback;
/// Adds a <code>Breadcrumb</code> to the current <code>Scope</code> of the current <code>Hub</code>. If the total number of breadcrumbs
/// exceeds the <code>SentryOptions.maxBreadcrumbs</code> the SDK removes the oldest breadcrumb.
/// \param crumb The <code>Breadcrumb</code> to add to the current <code>Scope</code> of the current <code>Hub</code>.
///
+ (void)addBreadcrumb:(SentryBreadcrumb * _Nonnull)crumb;
/// Use this method to modify the current <code>Scope</code> of the current <code>Hub</code>. The SDK uses the <code>Scope</code> to attach
/// contextual data to events.
/// \param callback The callback for configuring the current <code>Scope</code> of the current <code>Hub</code>.
///
+ (void)configureScope:(void (^ _Nonnull)(SentryScope * _Nonnull))callback;
/// Checks if the last program execution terminated with a crash.
/// warning:
/// This property returns <code>false</code> both when the app did not crash <em>and</em> when
/// the crash status is not yet known (before the SDK finishes initialization). Use
/// <code>lastRunStatus</code> instead, which distinguishes between these cases.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) BOOL crashedLastRun SWIFT_DEPRECATED_MSG("Use lastRunStatus instead, which distinguishes between 'did not crash' and 'unknown'.");)
+ (BOOL)crashedLastRun SWIFT_WARN_UNUSED_RESULT;
/// Returns the crash status of the last program execution.
/// Before <code>SentrySDK/start(configureOptions:)</code> finishes initializing the crash reporter,
/// this property returns <code>SentryLastRunStatus/unknown</code>. After initialization it returns
/// either <code>SentryLastRunStatus/didCrash</code> or <code>SentryLastRunStatus/didNotCrash</code>.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) enum SentryLastRunStatus lastRunStatus;)
+ (enum SentryLastRunStatus)lastRunStatus SWIFT_WARN_UNUSED_RESULT;
/// Checks if the SDK detected a start-up crash during SDK initialization.
/// note:
/// The SDK init waits synchronously for up to 5 seconds to flush out events if the app crashes
/// within 2 seconds after the SDK init.
///
/// returns:
/// true if the SDK detected a start-up crash and false if not.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) BOOL detectedStartUpCrash;)
+ (BOOL)detectedStartUpCrash SWIFT_WARN_UNUSED_RESULT;
/// Set <code>user</code> to the current <code>Scope</code> of the current <code>Hub</code>.
/// note:
/// You must start the SDK before calling this method, otherwise it doesn’t set the user.
/// \param user The user to set to the current <code>Scope</code>.
///
+ (void)setUser:(SentryUser * _Nullable)user;
/// Starts a new <code>SentrySession</code>. If there’s a running <code>SentrySession</code>, it ends it before starting the
/// new one. You can use this method in combination with <code>endSession</code> to manually track
/// sessions. The SDK uses <code>SentrySession</code> to inform Sentry about release and project
/// associated project health.
+ (void)startSession;
/// Ends the current <code>SentrySession</code>. You can use this method in combination with <code>startSession</code> to
/// manually track <code>SentrySessions</code>. The SDK uses <code>SentrySession</code> to inform Sentry about release and
/// project associated project health.
+ (void)endSession;
/// This forces a crash, useful to test the <code>SentryCrash</code> integration.
/// note:
/// The SDK can’t report a crash when a debugger is attached. Your application needs to run
/// without a debugger attached to capture the crash and send it to Sentry the next time you launch
/// your application.
+ (void)crash;
/// Reports to the ongoing <code>UIViewController</code> transaction
/// that the screen contents are fully loaded and displayed,
/// which will create a new span.
/// seealso:
///
/// https://docs.sentry.io/platforms/cocoa/performance/instrumentation/automatic-instrumentation/#time-to-full-display
+ (void)reportFullyDisplayed;
/// Pauses sending detected app hangs to Sentry.
/// This method doesn’t close the detection of app hangs. Instead, the app hang detection
/// will ignore detected app hangs until you call <code>resumeAppHangTracking</code>.
+ (void)pauseAppHangTracking;
/// Resumes sending detected app hangs to Sentry.
+ (void)resumeAppHangTracking;
/// Waits synchronously for the SDK to flush out all queued and cached items for up to the specified
/// timeout in seconds. If there is no internet connection, the function returns immediately. The SDK
/// doesn’t dispose the client or the hub.
/// note:
/// This might take slightly longer than the specified timeout if there are many batched logs to capture.
/// \param timeout The time to wait for the SDK to complete the flush.
///
+ (void)flush:(NSTimeInterval)timeout;
/// Closes the SDK, uninstalls all the integrations, and calls <code>flush</code> with
/// <code>SentryOptions.shutdownTimeInterval</code>.
+ (void)close;
/// Start a new continuous profiling session if one is not already running.
/// warning:
/// Continuous profiling mode is experimental and may still contain bugs.
/// note:
/// Unlike transaction-based profiling, continuous profiling does not take into account
/// <code>SentryOptions.profilesSampleRate</code> or <code>SentryOptions.profilesSampler</code>. If either of those
/// options are set, this method does nothing.
/// note:
/// Taking into account the above note, if <code>SentryOptions.configureProfiling</code> is not set,
/// calls to this method will always start a profile if one is not already running.
/// note:
/// If neither <code>SentryOptions.profilesSampleRate</code> nor <code>SentryOptions.profilesSampler</code> are
/// set, and <code>SentryOptions.configureProfiling</code> is set, this method does nothing if the profiling
/// session is not sampled with respect to <code>SentryOptions.profileSessionSampleRate</code>, or if it is
/// sampled but the profiler is already running.
/// note:
/// If neither <code>SentryOptions.profilesSampleRate</code> nor <code>SentryOptions.profilesSampler</code> are
/// set, and <code>SentryOptions.configureProfiling</code> is set, this method does nothing if
/// <code>SentryOptions.profileLifecycle</code> is set to <code>trace</code>. In this scenario, the profiler is
/// automatically started and stopped depending on whether there is an active sampled span, so it is
/// not permitted to manually start profiling.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
/// seealso:
/// https://docs.sentry.io/platforms/apple/guides/ios/profiling/#continuous-profiling
+ (void)startProfiler;
/// Stop a continuous profiling session if there is one ongoing.
/// warning:
/// Continuous profiling mode is experimental and may still contain bugs.
/// note:
/// Does nothing if <code>SentryOptions.profileLifecycle</code> is set to <code>trace</code>.
/// note:
/// Does not immediately stop the profiler. Profiling data is uploaded at regular timed
/// intervals; when the current interval completes, then the profiler stops and the data gathered
/// during that last interval is uploaded.
/// note:
/// If a new call to <code>startProfiler</code> that would start the profiler is made before the last
/// interval completes, the profiler will continue running until another call to stop is made.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
/// seealso:
/// https://docs.sentry.io/platforms/apple/guides/ios/profiling/#continuous-profiling
+ (void)stopProfiler;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryOptions * _Nullable startOption;)
+ (SentryOptions * _Nullable)startOption SWIFT_WARN_UNUSED_RESULT;
+ (void)setStartWith:(SentryOptions * _Nullable)option;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// A note on the thread safety:
/// The methods configure and log don’t use synchronization mechanisms, meaning they aren’t strictly speaking thread-safe.
/// Still, you can use log from multiple threads. The problem is that when you call configure while
/// calling log from multiple threads, you experience a race condition. It can take a bit until all
/// threads know the new config. As the SDK should only call configure once when starting, we do accept
/// this race condition. Adding locks for evaluating the log level for every log invocation isn’t
/// acceptable, as this adds a significant overhead for every log call. Therefore, we exclude SentryLog
/// from the ThreadSanitizer as it produces false positives. The tests call configure multiple times,
/// and the thread sanitizer would surface these race conditions. We accept these race conditions for
/// the log messages in the tests over adding locking for all log messages.
SWIFT_CLASS("_TtC6Sentry12SentrySDKLog")
@interface SentrySDKLog : NSObject
+ (void)logWithMessage:(NSString * _Nonnull)message andLevel:(SentryLevel)level;
/// @return @c YES if the current logging configuration will log statements at the current level,
/// @c NO if not.
+ (BOOL)willLogAtLevel:(SentryLevel)level SWIFT_WARN_UNUSED_RESULT;
/// Sets a custom log output handler. This allows hybrid SDKs (React Native, Flutter, etc.)
/// to intercept SDK log messages and forward them to their respective consoles.
/// note:
/// Exposed through <code>PrivateSentrySDKOnly.setLogOutput</code> for hybrid SDK consumption.
/// \param output A closure to handle log output. If <code>nil</code> is passed (which can happen
/// from Objective-C callers despite nullability annotations), the default <code>print</code> handler is used.
///
+ (void)setOutput:(void (^ _Nullable)(NSString * _Nonnull))output;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry19SentrySDKLogSupport")
@interface SentrySDKLogSupport : NSObject
+ (void)configure:(BOOL)isDebug diagnosticLevel:(SentryLevel)diagnosticLevel;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry34SentrySRDefaultBreadcrumbConverter")
@interface SentrySRDefaultBreadcrumbConverter : NSObject <SentryReplayBreadcrumbConverter>
/// This function will convert the SDK breadcrumbs to session replay breadcrumbs in a format that the front-end understands.
/// Any deviation in the information will cause the breadcrumb or the information itself to be discarded
/// in order to avoid unknown behavior in the front-end.
- (id <SentryRRWebEvent> _Nullable)convertFrom:(SentryBreadcrumb * _Nonnull)breadcrumb SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// A storage class to hold the data associated with a single profiler sample.
SWIFT_CLASS("_TtC6Sentry12SentrySample")
@interface SentrySample : NSObject
@property (nonatomic) uint64_t absoluteTimestamp;
@property (nonatomic) NSTimeInterval absoluteNSDateInterval;
@property (nonatomic, strong) NSNumber * _Nonnull stackIndex;
@property (nonatomic) uint64_t threadID;
@property (nonatomic, copy) NSString * _Nullable queueAddress;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry21SentrySamplerDecision")
@interface SentrySamplerDecision : NSObject
@property (nonatomic, readonly) SentrySampleDecision decision;
@property (nonatomic, readonly, strong) NSNumber * _Nullable sampleRand;
@property (nonatomic, readonly, strong) NSNumber * _Nullable sampleRate;
- (nonnull instancetype)initWithDecision:(SentrySampleDecision)decision forSampleRate:(NSNumber * _Nullable)sampleRate withSampleRand:(NSNumber * _Nullable)sampleRand OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry19SentryScopeObserver_")
@protocol SentryScopeObserver <NSObject>
- (void)setUser:(SentryUser * _Nullable)user;
- (void)setTags:(NSDictionary<NSString *, NSString *> * _Nullable)tags;
- (void)setExtras:(NSDictionary<NSString *, id> * _Nullable)extras;
- (void)setContext:(NSDictionary<NSString *, NSDictionary<NSString *, id> *> * _Nullable)context;
- (void)setTraceContext:(NSDictionary<NSString *, id> * _Nullable)traceContext;
- (void)setDist:(NSString * _Nullable)dist;
- (void)setEnvironment:(NSString * _Nullable)environment;
- (void)setFingerprint:(NSArray<NSString *> * _Nullable)fingerprint;
- (void)setLevel:(SentryLevel)level;
- (void)setAttributes:(NSDictionary<NSString *, id> * _Nullable)attributes;
- (void)addSerializedBreadcrumb:(NSDictionary<NSString *, id> * _Nonnull)serializedBreadcrumb;
- (void)clearBreadcrumbs;
- (void)clear;
@optional
- (void)setCurrentScreen:(NSString * _Nullable)currentScreen;
@end

SWIFT_CLASS("_TtC6Sentry26SentryScopePersistentStore")
@interface SentryScopePersistentStore : NSObject
- (void)moveAllCurrentStateToPreviousState;
- (NSDictionary<NSString *, NSDictionary<NSString *, id> *> * _Nullable)readPreviousContextFromDisk SWIFT_WARN_UNUSED_RESULT;
- (SentryUser * _Nullable)readPreviousUserFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)readPreviousDistFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)readPreviousEnvironmentFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, NSString *> * _Nullable)readPreviousTagsFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, id> * _Nullable)readPreviousExtrasFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSArray<NSString *> * _Nullable)readPreviousFingerprintFromDisk SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry17SentrySdkInfoObjC")
@interface SentrySdkInfoObjC : NSObject
+ (NSDictionary<NSString *, id> * _Nonnull)optionsToDict:(SentryOptions * _Nonnull)options SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry16SentrySdkPackage")
@interface SentrySdkPackage : NSObject
+ (NSDictionary<NSString *, NSString *> * _Nullable)global SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry24SentrySerializationSwift")
@interface SentrySerializationSwift : NSObject
+ (SentrySession * _Nullable)sessionWithData:(NSData * _Nonnull)data SWIFT_WARN_UNUSED_RESULT;
+ (SentryAppState * _Nullable)appStateWithData:(NSData * _Nonnull)data SWIFT_WARN_UNUSED_RESULT;
+ (NSData * _Nullable)dataWithJSONObject:(id _Nonnull)jsonObject SWIFT_WARN_UNUSED_RESULT;
+ (NSData * _Nullable)dataWithEnvelope:(SentryEnvelope * _Nonnull)envelope SWIFT_WARN_UNUSED_RESULT;
+ (NSData * _Nullable)dataWithSession:(SentrySession * _Nonnull)session SWIFT_WARN_UNUSED_RESULT;
+ (SentryEnvelope * _Nullable)envelopeWithData:(NSData * _Nonnull)data SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSUUID;
/// The SDK uses SentrySession to inform Sentry about release and project associated project health.
SWIFT_CLASS("_TtC6Sentry13SentrySession")
@interface SentrySession : NSObject <NSCopying>
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// Designated initializer.
- (nonnull instancetype)initWithReleaseName:(NSString * _Nonnull)releaseName distinctId:(NSString * _Nonnull)distinctId OBJC_DESIGNATED_INITIALIZER;
/// Initializes @c SentrySession from a JSON object.
/// @param jsonObject The @c jsonObject containing the session.
/// @return The @c SentrySession or @c nil if @c jsonObject contains an error.
- (nullable instancetype)initWithJSONObject:(NSDictionary<NSString *, id> * _Nonnull)jsonObject OBJC_DESIGNATED_INITIALIZER;
- (void)endSessionExitedWithTimestamp:(NSDate * _Nonnull)timestamp;
- (void)endSessionCrashedWithTimestamp:(NSDate * _Nonnull)timestamp;
- (void)endSessionAbnormalWithTimestamp:(NSDate * _Nonnull)timestamp;
- (void)incrementErrors;
- (void)setFlagInit;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (id _Nonnull)copyWithZone:(struct _NSZone * _Nullable)zone SWIFT_WARN_UNUSED_RESULT;
@property (nonatomic, readonly, copy) NSUUID * _Nonnull sessionId;
@property (nonatomic, readonly, copy) NSDate * _Nonnull started;
@property (nonatomic) NSUInteger errors;
@property (nonatomic, readonly) NSUInteger sequence;
@property (nonatomic, readonly, copy) NSString * _Nonnull distinctId;
@property (nonatomic, readonly, strong) NSNumber * _Nullable flagInit;
@property (nonatomic, readonly, copy) NSDate * _Nullable timestamp;
@property (nonatomic, readonly, strong) NSNumber * _Nullable duration;
@property (nonatomic, readonly, copy) NSString * _Nullable releaseName;
@property (nonatomic, copy) NSString * _Nullable environment;
@property (nonatomic, copy) NSString * _Nullable abnormalMechanism;
@end

SWIFT_PROTOCOL("_TtP6Sentry21SentrySessionListener_")
@protocol SentrySessionListener
/// Called on the main thread when a session ends.
- (void)sentrySessionEndedWithSession:(SentrySession * _Nonnull)session;
/// Called on the main thread when a session starts.
- (void)sentrySessionStartedWithSession:(SentrySession * _Nonnull)session;
@end

/// Detects shake gestures by swizzling <code>UIWindow.motionEnded(_:with:)</code> on iOS/iPadOS.
/// When a shake gesture is detected, posts a <code>.SentryShakeDetected</code> notification.
/// Use <code>enable()</code> to start detection and <code>disable()</code> to stop it.
/// Swizzling is performed at most once regardless of how many times <code>enable()</code> is called.
/// On non-iOS platforms (macOS, tvOS, watchOS), these methods are no-ops.
SWIFT_CLASS_NAMED("SentryShakeDetector")
@interface SentryShakeDetector : NSObject
/// The notification name posted on shake, exposed for ObjC consumers.
/// In Swift, prefer using <code>.SentryShakeDetected</code> on <code>NSNotification.Name</code> directly.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) NSNotificationName _Nonnull shakeDetectedNotification;)
+ (NSNotificationName _Nonnull)shakeDetectedNotification SWIFT_WARN_UNUSED_RESULT;
/// No-op on non-iOS platforms.
+ (void)enable;
/// No-op on non-iOS platforms.
+ (void)disable;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry31SentrySwiftIntegrationInstaller")
@interface SentrySwiftIntegrationInstaller : NSObject
+ (void)installWith:(SentryOptions * _Nonnull)options;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry29SentrySwizzleClassNameExclude")
@interface SentrySwizzleClassNameExclude : NSObject
+ (BOOL)shouldExcludeClassWithClassName:(NSString * _Nonnull)className swizzleClassNameExcludes:(NSSet<NSString *> * _Nonnull)swizzleClassNameExcludes SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// A wrapper around sysctl for testability.
SWIFT_CLASS("_TtC6Sentry12SentrySysctl")
@interface SentrySysctl : NSObject
/// Returns the time the system was booted with a precision of microseconds.
/// @warning We must not send this information off device because Apple forbids that.
/// We are allowed send the amount of time that has elapsed between events that occurred within the
/// app though. For more information see
/// https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api#4278394.
@property (nonatomic, readonly, copy) NSDate * _Nonnull systemBootTimestamp;
@property (nonatomic, readonly, copy) NSDate * _Nonnull processStartTimestamp;
/// The system time that the process started, as measured in @c SentrySysctl.load, essentially the
/// earliest time we can record a system timestamp, which is the number of nanoseconds since the
/// device booted, which is why we can’t simply convert @c processStartTimestamp to the nanosecond
/// representation of its @c timeIntervalSinceReferenceDate .
@property (nonatomic, readonly) uint64_t runtimeInitSystemTimestamp;
@property (nonatomic, readonly, copy) NSDate * _Nonnull runtimeInitTimestamp;
@property (nonatomic, readonly, copy) NSDate * _Nonnull moduleInitializationTimestamp;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@protocol SentryTelemetryProcessorTransport;
/// Factory for creating telemetry processors.
/// Unlike integrations (e.g., <code>SentryMetricsIntegration</code>), this factory cannot yet use the full dependency injection pattern
/// because the <code>SentryTelemetryProcessorTransport</code> is created in <code>SentryClient</code> (Objective-C) and must be passed in explicitly.
/// <em>Current approach:</em>
/// <ul>
///   <li>
///     Public method: <code>getProcessor(transport:dependencies:)</code> - called from Objective-C with concrete <code>SentryDependencyContainer</code>
///   </li>
///   <li>
///     Internal method: <code>getProcessorInternal(transport:dependencies:)</code> - uses protocol-constrained generics for testability
///   </li>
/// </ul>
/// <em>Future migration path:</em>
/// Once the transport is resolved via DI, we can refactor to match the integration pattern:
/// \code
/// init?(transport: SentryTelemetryProcessorTransport, dependencies: Dependencies)
///
/// \endcodeThe internal method is already structured to make this transition straightforward.
SWIFT_CLASS("_TtC6Sentry31SentryTelemetryProcessorFactory")
@interface SentryTelemetryProcessorFactory : NSObject
+ (id <SentryObjCTelemetryProcessor> _Nonnull)getProcessorWithTransport:(id <SentryTelemetryProcessorTransport> _Nonnull)transport dependencies:(SentryDependencyContainer * _Nonnull)dependencies SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Lightweight transport abstraction used by the telemetry processor to send envelopes.
/// Exists because using the Objective-C <code>SentryTransport</code> adapter directly from Swift pulls in many ObjC dependencies
/// and caused build/compile issues; we only need envelope sending here, so this protocol keeps it minimal.
SWIFT_PROTOCOL("_TtP6Sentry33SentryTelemetryProcessorTransport_")
@protocol SentryTelemetryProcessorTransport
- (void)sendEnvelopeWithEnvelope:(SentryEnvelope * _Nonnull)envelope;
@end

SWIFT_PROTOCOL("_TtP6Sentry22SentryThreadInspecting_")
@protocol SentryThreadInspecting
- (NSArray<SentryThread *> * _Nonnull)getCurrentThreadsWithStackTrace SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)getThreadName:(NSUInteger)thread SWIFT_WARN_UNUSED_RESULT;
@end

@class SentryStacktrace;
SWIFT_CLASS("_TtC6Sentry21SentryThreadInspector")
@interface SentryThreadInspector : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
- (SentryStacktrace * _Nullable)stacktraceForCurrentThreadAsyncUnsafe SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryThread *> * _Nonnull)getCurrentThreadsWithStackTrace SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryThread *> * _Nonnull)getCurrentThreads SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)getThreadName:(NSUInteger)thread SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry19SentryThreadWrapper")
@interface SentryThreadWrapper : NSObject
- (void)sleepForTimeInterval:(NSTimeInterval)timeInterval;
- (void)threadStarted:(NSUUID * _Nonnull)threadID;
- (void)threadFinished:(NSUUID * _Nonnull)threadID;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Describes the source of the transaction name.
/// This is used to indicate how the transaction name was determined, which affects
/// how Sentry processes and groups transactions.
typedef SWIFT_ENUM(NSInteger, SentryTransactionNameSource, open) {
/// The name was set manually by the user.
  kSentryTransactionNameSourceCustom SWIFT_COMPILE_NAME("custom") = 0,
/// The name was derived from the request URL.
  kSentryTransactionNameSourceUrl SWIFT_COMPILE_NAME("url") = 1,
/// The name was derived from a routing framework.
  kSentryTransactionNameSourceRoute SWIFT_COMPILE_NAME("route") = 2,
/// The name was derived from a UI view or screen.
  kSentryTransactionNameSourceView SWIFT_COMPILE_NAME("view") = 3,
/// The name was derived from a UI component.
  kSentryTransactionNameSourceComponent SWIFT_COMPILE_NAME("component") = 4,
/// The name was derived from a background task.
  kSentryTransactionNameSourceTask SWIFT_COMPILE_NAME("sourceTask") = 5,
};

/// Use this protocol to customize the name used in the automatic
/// UIViewController performance tracker, view hierarchy, and breadcrumbs.
SWIFT_PROTOCOL("_TtP6Sentry32SentryUIViewControllerDescriptor_")
@protocol SentryUIViewControllerDescriptor <NSObject>
/// The custom name of the UIViewController
/// that the Sentry SDK uses for transaction names, breadcrumbs, and
/// view hierarchy.
@property (nonatomic, readonly, copy) NSString * _Nonnull sentryName;
@end

SWIFT_CLASS("_TtC6Sentry15SentryVideoInfo")
@interface SentryVideoInfo : NSObject
@property (nonatomic, readonly, copy) NSURL * _Nonnull path;
@property (nonatomic, readonly, copy) NSDate * _Nonnull start;
@property (nonatomic, readonly, copy) NSDate * _Nonnull end;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry27SentryViewScreenshotOptions")
@interface SentryViewScreenshotOptions : NSObject <SentryRedactOptions>
/// Enables the up to 5x faster new view renderer.
/// Enabling this flag will reduce the amount of time it takes to render the screenshot on the main thread, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// <em>up to 4-5x faster rendering</em> (reducing <code>~160ms</code> to <code>~36ms</code>) on older devices.
/// experiment:
/// In case you are noticing issues with the new view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>.
/// Eventually, we will remove this feature flag and use the new view renderer by default.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL enableViewRendererV2;
/// Enables up to 5x faster but incomplete view rendering.
/// Enabling this flag will reduce the amount of time it takes to render the screenshot, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// up to <em>5x faster render times</em> (reducing <code>~160ms</code> to <code>~30ms</code>) on older devices.
/// This flag controls the way the view hierarchy is drawn into a graphics context. By default, the view hierarchy is drawn using
/// the <code>UIView.drawHierarchy(in:afterScreenUpdates:)</code> method, which is the most complete way to render the view hierarchy. However,
/// this method can be slow, especially when rendering complex views, therefore enabling this flag will switch to render the underlying <code>CALayer</code> instead.
/// note:
/// This flag can only be used together with <code>enableViewRendererV2</code> with up to 20% faster render times.
/// warning:
/// Rendering the view hierarchy using the <code>CALayer.render(in:)</code> method can lead to rendering issues, especially when using custom views.
/// For complete rendering, it is recommended to set this option to <code>false</code>. In case you prefer performance over completeness, you can
/// set this option to <code>true</code>.
/// experiment:
/// This is an experimental feature and is therefore disabled by default. In case you are noticing issues with the experimental
/// view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>. Eventually, we will
/// mark this feature as stable and remove the experimental flag, but will keep it disabled by default.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL enableFastViewRendering;
/// Indicates whether the screenshot should redact all non-bundled image
/// in the app by drawing a black rectangle over it.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL maskAllImages;
/// Indicates whether the screenshot should redact all text in the app
/// by drawing a black rectangle over it.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL maskAllText;
/// A list of custom UIView subclasses that need
/// to be masked during the screenshot.
/// By default Sentry already mask text and image elements from UIKit
/// Every child of a view that is redacted will also be redacted.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull maskedViewClasses;
/// A list of custom UIView subclasses to be ignored
/// during masking step of the screenshot.
/// The views of given classes will not be redacted but their children may be.
/// This property has precedence over <code>redactViewTypes</code>.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies (e.g., views that activate internal CoreAnimation
/// animations when their layers are accessed).
/// Matching uses partial string containment: if a view’s class name (from <code>type(of: view).description()</code>)
/// contains any of these strings, the subtree will be ignored. For example, “MyView” will match
/// “MyApp.MyView”, “MyViewSubclass”, “Some.MyView.Container”, etc.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing their subtrees
/// to be traversed even if they would otherwise be excluded by default or via <code>excludedViewClasses</code>.
/// Matching uses exact string matching: the view’s class name (from <code>type(of: view).description()</code>)
/// must exactly equal one of these strings. For example, “MyApp.MyView” will only match exactly “MyApp.MyView”,
/// not “MyApp.MyViewSubclass”.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+
/// by calling <code>includeViewTypeInSubtreeTraversal("CameraUI.ChromeSwiftUIView")</code>.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches. For example,
/// if “ChromeCameraUI” is excluded and “Camera” is included, “ChromeCameraUI” will still be excluded
/// because “Camera” doesn’t exactly match “ChromeCameraUI”.
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
/// Adds a view type pattern to the excluded set, preventing matching views’ subtrees from being traversed.
/// note:
/// This method adds the pattern to <code>excludedViewClasses</code>, which is then combined with
/// default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and filtered by <code>includedViewClasses</code>
/// to produce the final set.
/// \param viewType The view type identifier pattern (as a string) to exclude from subtree traversal.
/// Matching uses partial string containment: if a view’s class name contains this string,
/// the subtree will be ignored. For example, “MyView” will match “MyApp.MyView”,
/// “MyViewSubclass”, etc.
///
- (void)excludeViewTypeFromSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Adds a view type to the included set, allowing its subtree to be traversed.
/// note:
/// This method adds the view type to <code>includedViewClasses</code>, which filters the combined set
/// of default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and <code>excludedViewClasses</code>.
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches.
/// \param viewType The view type identifier (as a string) to include in subtree traversal.
/// Must exactly match the result of <code>type(of: view).description()</code>.
/// For example, “MyApp.MyView” will only match exactly “MyApp.MyView”.
///
- (void)includeViewTypeInSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Initialize screenshot options disabled
/// note:
/// This initializer is added for Objective-C compatibility, as constructors with default values
/// are not supported in Objective-C.
/// note:
/// See <code>SentryViewScreenshotOptions.DefaultValues</code> for the default values of each parameter.
- (nonnull instancetype)init;
/// Initializes a new instance of <code>SentryViewScreenshotOptions</code> with the specified parameters.
/// note:
/// See <code>SentryViewScreenshotOptions.DefaultValues</code> for the default values of each parameter.
/// \param enableViewRendererV2 Enables the up to 5x faster view renderer.
///
/// \param enableFastViewRendering Enables faster but incomplete view rendering. See <code>SentryViewScreenshotOptions.enableFastViewRendering</code> for more information.
///
/// \param maskAllText Flag to redact all text in the app by drawing a rectangle over it.
///
/// \param maskAllImages Flag to redact all images in the app by drawing a rectangle over it.
///
/// \param maskedViewClasses A list of custom UIView subclasses that need to be masked during the screenshot.
///
/// \param unmaskedViewClasses A list of custom UIView subclasses to be ignored during masking step of the screenshot.
///
/// \param excludedViewClasses A set of view type identifiers that should be excluded from subtree traversal.
///
/// \param includedViewClasses A set of view type identifiers that should be included in subtree traversal.
///
- (nonnull instancetype)initWithEnableViewRendererV2:(BOOL)enableViewRendererV2 enableFastViewRendering:(BOOL)enableFastViewRendering maskAllText:(BOOL)maskAllText maskAllImages:(BOOL)maskAllImages maskedViewClasses:(NSArray<Class> * _Nonnull)maskedViewClasses unmaskedViewClasses:(NSArray<Class> * _Nonnull)unmaskedViewClasses excludedViewClasses:(NSSet<NSString *> * _Nonnull)excludedViewClasses includedViewClasses:(NSSet<NSString *> * _Nonnull)includedViewClasses OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
@end

SWIFT_CLASS("_TtC6Sentry44SentryWatchdogTerminationAttributesProcessor")
@interface SentryWatchdogTerminationAttributesProcessor : NSObject
- (void)clear;
- (void)setContext:(NSDictionary<NSString *, NSDictionary<NSString *, id> *> * _Nullable)context;
- (void)setUser:(SentryUser * _Nullable)user;
- (void)setDist:(NSString * _Nullable)dist;
- (void)setEnvironment:(NSString * _Nullable)environment;
- (void)setTags:(NSDictionary<NSString *, NSString *> * _Nullable)tags;
- (void)setExtras:(NSDictionary<NSString *, id> * _Nullable)extras;
- (void)setFingerprint:(NSArray<NSString *> * _Nullable)fingerprint;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry34SentryWatchdogTerminationConstants")
@interface SentryWatchdogTerminationConstants : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ExceptionType;)
+ (NSString * _Nonnull)ExceptionType SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ExceptionValue;)
+ (NSString * _Nonnull)ExceptionValue SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull MechanismType;)
+ (NSString * _Nonnull)MechanismType SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry15SwiftDescriptor")
@interface SwiftDescriptor : NSObject
+ (NSString * _Nonnull)getObjectClassName:(id _Nonnull)object SWIFT_WARN_UNUSED_RESULT;
+ (NSString * _Nullable)getSwiftErrorDescription:(NSError * _Nonnull)error SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSURLSessionTask;
SWIFT_CLASS("_TtC6Sentry20URLSessionTaskHelper")
@interface URLSessionTaskHelper : NSObject
+ (NSString * _Nullable)getGraphQLOperationNameFrom:(NSURLSessionTask * _Nullable)task SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSURLQueryItem;
SWIFT_CLASS("_TtC6Sentry12UrlSanitized")
@interface UrlSanitized : NSObject
@property (nonatomic, readonly, copy) NSString * _Nullable query;
@property (nonatomic, readonly, copy) NSArray<NSURLQueryItem *> * _Nullable queryItems;
@property (nonatomic, readonly, copy) NSString * _Nullable fragment;
- (nonnull instancetype)initWithURL:(NSURL * _Nonnull)url OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, copy) NSString * _Nullable sanitizedUrl;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Global function to finish and save transaction when a crash occurs.
/// This function is called from C crash reporting code.
SWIFT_EXTERN void sentry_finishAndSaveTransaction(void) SWIFT_NOEXCEPT;

/// Recursively sanitizes an NSDictionary, converting non-serializable values to strings.
SWIFT_EXTERN NSDictionary * _Nullable sentry_sanitize_dictionary(NSDictionary * _Nullable dictionary) SWIFT_NOEXCEPT SWIFT_WARN_UNUSED_RESULT;

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

#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 6.1.2 effective-5.10 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)
#ifndef SENTRY_SWIFT_H
#define SENTRY_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 AppKit;
@import CoreFoundation;
@import Dispatch;
@import Foundation;
@import ObjectiveC;
#endif

#import <Sentry/Sentry.h>

#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="Sentry",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__OBJC__)

@class NSHTTPURLResponse;
/// Parses HTTP responses from the Sentry server for rate limits.
/// When a rate limit is reached, the SDK should stop data transmission
/// until the rate limit has expired.
SWIFT_PROTOCOL_NAMED("RateLimits")
@protocol SentryRateLimits <NSObject>
/// Check if a data category has reached a rate limit.
/// \param category the type e.g. event, error, session, transaction, etc.
///
///
/// returns:
/// <code>true</code> if limit is reached, <code>false</code> otherwise.
- (BOOL)isRateLimitActive:(NSUInteger)category SWIFT_WARN_UNUSED_RESULT;
/// Should be called for each HTTP response of the Sentry server. It checks the response for any
/// communicated rate limits.
/// \param response The response from the server
///
- (void)update:(NSHTTPURLResponse * _Nonnull)response;
@end

@class SentryRetryAfterHeaderParser;
@class SentryRateLimitParser;
@protocol SentryCurrentDateProvider;
/// Parses HTTP responses from the Sentry server for rate limits and stores them
/// in memory. The server can communicate a rate limit either through the 429
/// status code with a “Retry-After” header or through any response with a custom
/// “X-Sentry-Rate-Limits” header. This class is thread safe.
SWIFT_CLASS_NAMED("DefaultRateLimits")
@interface SentryDefaultRateLimits : NSObject <SentryRateLimits>
- (nonnull instancetype)initWithRetryAfterHeaderParser:(SentryRetryAfterHeaderParser * _Nonnull)retryAfterHeaderParser andRateLimitParser:(SentryRateLimitParser * _Nonnull)rateLimitParser currentDateProvider:(id <SentryCurrentDateProvider> _Nonnull)currentDateProvider OBJC_DESIGNATED_INITIALIZER;
/// <code>category: UInt</code> is the unsigned integer representation for SentryDataCategory since we cannot expose
/// functions written in Swift.
- (BOOL)isRateLimitActive:(NSUInteger)category SWIFT_WARN_UNUSED_RESULT;
- (void)update:(NSHTTPURLResponse * _Nonnull)response;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol SentryRandomProtocol;
@class SentryThreadWrapper;
@protocol SentryProcessInfoSource;
@class SentryDispatchQueueWrapper;
@protocol SentryNSNotificationCenterWrapper;
@class SentryBinaryImageCache;
@class SentryDebugImageProvider;
@class SentrySysctl;
@class SentryDefaultCurrentDateProvider;
SWIFT_CLASS_NAMED("Dependencies")
@interface SentryDependencies : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentryRandomProtocol> _Nonnull random;)
+ (id <SentryRandomProtocol> _Nonnull)random SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryThreadWrapper * _Nonnull threadWrapper;)
+ (SentryThreadWrapper * _Nonnull)threadWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;)
+ (id <SentryProcessInfoSource> _Nonnull)processInfoWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryDispatchQueueWrapper * _Nonnull dispatchQueueWrapper;)
+ (SentryDispatchQueueWrapper * _Nonnull)dispatchQueueWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentryNSNotificationCenterWrapper> _Nonnull notificationCenterWrapper;)
+ (id <SentryNSNotificationCenterWrapper> _Nonnull)notificationCenterWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryBinaryImageCache * _Nonnull binaryImageCache;)
+ (SentryBinaryImageCache * _Nonnull)binaryImageCache SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryDebugImageProvider * _Nonnull debugImageProvider;)
+ (SentryDebugImageProvider * _Nonnull)debugImageProvider SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentrySysctl * _Nonnull sysctlWrapper;)
+ (SentrySysctl * _Nonnull)sysctlWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryDefaultCurrentDateProvider * _Nonnull dateProvider;)
+ (SentryDefaultCurrentDateProvider * _Nonnull)dateProvider SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@interface SentryEvent (SWIFT_EXTENSION(Sentry))
- (BOOL)isMetricKitEvent SWIFT_WARN_UNUSED_RESULT;
@end

@class NSString;
SWIFT_CLASS("_TtC6Sentry19HTTPHeaderSanitizer")
@interface HTTPHeaderSanitizer : NSObject
+ (NSDictionary<NSString *, NSString *> * _Nonnull)sanitizeHeaders:(NSDictionary<NSString *, NSString *> * _Nonnull)headers SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSDate;
/// Parses a string in the format of http date to NSDate. For more details see:
/// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date.
/// SentryHttpDateParser is thread safe.
SWIFT_CLASS_NAMED("HttpDateParser")
@interface SentryHttpDateParser : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (NSDate * _Nullable)dateFromString:(NSString * _Nonnull)string SWIFT_WARN_UNUSED_RESULT;
@end

@class NSNumber;
@protocol SentryObjCRuntimeWrapper;
SWIFT_CLASS("_TtC6Sentry13LoadValidator")
@interface LoadValidator : NSObject
+ (void)checkForDuplicatedSDKWithImageName:(NSString * _Nonnull)imageName imageAddress:(NSNumber * _Nonnull)imageAddress imageSize:(NSNumber * _Nonnull)imageSize objcRuntimeWrapper:(id <SentryObjCRuntimeWrapper> _Nonnull)objcRuntimeWrapper dispatchQueueWrapper:(SentryDispatchQueueWrapper * _Nonnull)dispatchQueueWrapper;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry17SentryApplication_")
@protocol SentryApplication
@property (nonatomic, readonly) BOOL mainThread_isActive;
@end

@interface NSApplication (SWIFT_EXTENSION(Sentry)) <SentryApplication>
@property (nonatomic, readonly) BOOL mainThread_isActive;
@end

@class NSOperationQueue;
@class NSNotification;
SWIFT_PROTOCOL("_TtP6Sentry33SentryNSNotificationCenterWrapper_")
@protocol SentryNSNotificationCenterWrapper
- (void)addObserver:(id _Nonnull)observer selector:(SEL _Nonnull)aSelector name:(NSNotificationName _Nullable)aName object:(id _Nullable)anObject;
- (id <NSObject> _Nonnull)addObserverForName:(NSNotificationName _Nullable)name object:(id _Nullable)obj queue:(NSOperationQueue * _Nullable)queue usingBlock:(void (^ _Nonnull)(NSNotification * _Nonnull))block SWIFT_WARN_UNUSED_RESULT;
- (void)removeObserver:(id _Nonnull)observer name:(NSNotificationName _Nullable)aName object:(id _Nullable)anObject;
- (void)postNotification:(NSNotification * _Nonnull)notification;
@end

@interface NSNotificationCenter (SWIFT_EXTENSION(Sentry)) <SentryNSNotificationCenterWrapper>
@end

@class SentryDsn;
@class SentryLog;
enum SentryLastRunStatus : NSInteger;
@class SentryScope;
@protocol NSURLSessionDelegate;
@class NSURLSession;
@class SentryProfileOptions;
@class SentryHttpStatusCodeRange;
@class SentryExperimentalOptions;
/// Configuration options for the Sentry SDK.
SWIFT_CLASS_NAMED("Options")
@interface SentryOptions : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// The DSN tells the SDK where to send the events to. If this value is not provided, the SDK will
/// not send any events.
@property (nonatomic, copy) NSString * _Nullable dsn;
/// The parsed internal DSN.
@property (nonatomic, strong) SentryDsn * _Nullable parsedDsn;
/// Turns debug mode on or off. If debug is enabled SDK will attempt to print out useful debugging
/// information if something goes wrong.
/// @note Default is @c false.
@property (nonatomic) BOOL debug;
/// Minimum LogLevel to be used if debug is enabled.
/// @note Default is kSentryLevelDebug.
@property (nonatomic) SentryLevel diagnosticLevel;
/// This property will be filled before the event is sent.
@property (nonatomic, copy) NSString * _Nullable releaseName;
/// The distribution of the application.
/// @discussion Distributions are used to disambiguate build or deployment variants of the same
/// release of an application. For example, the dist can be the build number of an Xcode build.
@property (nonatomic, copy) NSString * _Nullable dist;
/// The environment used for events if no environment is set on the current scope.
/// @note Default value is “production”.
@property (nonatomic, copy) NSString * _Nonnull environment;
/// Specifies whether this SDK should send events to Sentry. If set to @c false events will be
/// dropped in the client and not sent to Sentry. Default is @c true.
@property (nonatomic) BOOL enabled;
/// Controls the flush duration when calling SentrySDK/close.
@property (nonatomic) NSTimeInterval shutdownTimeInterval;
/// When enabled, the SDK sends crashes to Sentry.
/// @note Disabling this feature disables the SentryWatchdogTerminationTrackingIntegration,
/// because SentryWatchdogTerminationTrackingIntegration would falsely report every crash as watchdog
/// termination.
/// @note Default value is @c true.
/// @note Crash reporting is automatically disabled if a debugger is attached.
@property (nonatomic) BOOL enableCrashHandler;
/// When enabled, the SDK captures uncaught NSExceptions. As this feature uses swizzling, disabling
/// enableSwizzling also disables this feature.
/// @discussion This option registers the <code>NSApplicationCrashOnExceptions</code> UserDefault,
/// so your macOS application crashes when an uncaught exception occurs. As the Cocoa Frameworks are
/// generally not exception-safe on macOS, we recommend this approach because the application could
/// otherwise end up in a corrupted state.
/// @warning Don’t use this in combination with <code>SentryCrashExceptionApplication</code>. Either enable this
/// feature or use the <code>SentryCrashExceptionApplication</code>. Having both enabled can lead to duplicated
/// reports.
/// @note Default value is @c false.
@property (nonatomic) BOOL enableUncaughtNSExceptionReporting;
/// When enabled, the SDK reports SIGTERM signals to Sentry.
/// It’s crucial for developers to understand that the OS sends a SIGTERM to their app as a prelude
/// to a graceful shutdown, before resorting to a SIGKILL. This SIGKILL, which your app can’t catch
/// or ignore, is a direct order to terminate your app’s process immediately. Developers should be
/// aware that their app can receive a SIGTERM in various scenarios, such as CPU or disk overuse,
/// watchdog terminations, or when the OS updates your app.
/// @note The default value is @c false.
@property (nonatomic) BOOL enableSigtermReporting;
/// How many breadcrumbs do you want to keep in memory?
/// @note Default is 100.
@property (nonatomic) NSUInteger maxBreadcrumbs;
/// When enabled, the SDK adds breadcrumbs for each network request. As this feature uses swizzling,
/// disabling enableSwizzling also disables this feature.
/// @discussion If you want to enable or disable network tracking for performance monitoring, please
/// use enableNetworkTracking instead.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableNetworkBreadcrumbs;
/// The maximum number of envelopes to keep in cache.
/// @note Default is 30.
@property (nonatomic) NSUInteger maxCacheItems;
/// This block can be used to modify the event before it will be serialized and sent.
@property (nonatomic, copy) SentryBeforeSendEventCallback _Nullable beforeSend;
/// Use this callback to drop or modify a span before the SDK sends it to Sentry. Return nil to
/// drop the span.
@property (nonatomic, copy) SentryBeforeSendSpanCallback _Nullable beforeSendSpan;
/// When enabled, the SDK sends logs to Sentry. Logs can be captured using the SentrySDK.logger
/// API, which provides structured logging with attributes.
/// @note Default value is @c false.
@property (nonatomic) BOOL enableLogs;
/// Use this callback to drop or modify a log before the SDK sends it to Sentry. Return nil to
/// drop the log.
@property (nonatomic, copy) SentryLog * _Nullable (^ _Nullable beforeSendLog)(SentryLog * _Nonnull);
/// This block can be used to modify the breadcrumb before it will be serialized and sent.
@property (nonatomic, copy) SentryBeforeBreadcrumbCallback _Nullable beforeBreadcrumb;
/// You can use this callback to decide if the SDK should capture a screenshot or not. Return @c true
/// if the SDK should capture a screenshot, return @c false if not. This callback doesn’t work for
/// crashes.
@property (nonatomic, copy) SentryBeforeCaptureScreenshotCallback _Nullable beforeCaptureScreenshot;
/// You can use this callback to decide if the SDK should capture a view hierarchy or not. Return
/// @c true if the SDK should capture a view hierarchy, return @c false if not. This callback doesn’t
/// work for crashes.
@property (nonatomic, copy) SentryBeforeCaptureScreenshotCallback _Nullable beforeCaptureViewHierarchy;
/// A block called shortly after the initialization of the SDK when the last program execution
/// terminated with a crash.
/// @discussion This callback is only executed once during the entire run of the program to avoid
/// multiple callbacks if there are multiple crash events to send. This can happen when the program
/// terminates with a crash before the SDK can send the crash event. You can look into beforeSend
/// if you prefer a callback for every event.
/// @warning It is not guaranteed that this is called on the main thread.
/// @note Crash reporting is automatically disabled if a debugger is attached.
@property (nonatomic, copy) SentryOnCrashedLastRunCallback _Nullable onCrashedLastRun SWIFT_DEPRECATED_MSG("Use onLastRunStatusDetermined instead, which is called regardless of whether the app crashed.");
/// A block called shortly after the initialization of the SDK when the crash status of the
/// last program execution has been determined.
/// This callback is invoked regardless of whether the app crashed or not:
/// <ul>
///   <li>
///     If the last run ended with a crash, <code>status</code> is <code>SentryLastRunStatus/didCrash</code> and
///     <code>crashEvent</code> contains the crash event.
///   </li>
///   <li>
///     If the last run did <em>not</em> end with a crash, <code>status</code> is
///     <code>SentryLastRunStatus/didNotCrash</code> and <code>crashEvent</code> is <code>nil</code>.
///   </li>
/// </ul>
/// This callback is only executed once per <code>SentrySDK/start(configureOptions:)</code> lifecycle.
/// warning:
/// It is not guaranteed that this is called on the main thread.
/// note:
/// Crashes that occur while a debugger is attached are not recorded.
/// In that case, the callback reports <code>SentryLastRunStatus/didNotCrash</code>
/// even though the app did crash.
@property (nonatomic, copy) void (^ _Nullable onLastRunStatusDetermined)(enum SentryLastRunStatus, SentryEvent * _Nullable);
/// Indicates the percentage of events being sent to Sentry.
/// @discussion Specifying 0 discards all events, 1.0 or nil sends all events, 0.01 collects 1% of
/// all events.
/// @note The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets
/// it to the default of 1.0.
/// @note The default is 1.
@property (nonatomic, strong) NSNumber * _Nullable sampleRate;
/// Whether to enable automatic session tracking or not.
/// @note Default is @c true.
@property (nonatomic) BOOL enableAutoSessionTracking;
/// Whether to attach the top level <code>operationName</code> node of HTTP json requests to HTTP breadcrumbs
/// @note Default is @c false.
@property (nonatomic) BOOL enableGraphQLOperationTracking;
/// Whether to enable Watchdog Termination tracking or not.
/// @note This feature requires the SentryCrashIntegration being enabled, otherwise it would
/// falsely report every crash as watchdog termination.
/// @note Default is @c true.
@property (nonatomic) BOOL enableWatchdogTerminationTracking;
/// The interval to end a session after the App goes to the background.
/// @note The default is 30 seconds.
@property (nonatomic) NSUInteger sessionTrackingIntervalMillis;
/// When enabled, stack traces are automatically attached to all messages logged. Stack traces are
/// always attached to exceptions but when this is set stack traces are also sent with messages.
/// Stack traces are only attached for the current thread.
/// @note This feature is enabled by default.
@property (nonatomic) BOOL attachStacktrace;
/// When enabled, all threads are attached with full stack traces to all captured events.
/// This requires suspending all threads briefly to collect their stack traces.
/// When disabled (the default), only the current thread gets a stack trace.
/// @note <code>attachStacktrace</code> must also be enabled for this to have any effect.
/// @note Default is <code>false</code>.
@property (nonatomic) BOOL attachAllThreads;
/// The maximum size for each attachment in bytes.
/// @note Default is 200 MiB (200 ✕ 1024 ✕ 1024 bytes).
/// @note Please also check the maximum attachment size of relay to make sure your attachments don’t
/// get discarded there:
/// https://docs.sentry.io/product/relay/options/
@property (nonatomic) NSUInteger maxAttachmentSize;
/// When enabled, the SDK sends personal identifiable along with events.
/// @note The default is @c false.
/// @discussion When the user of an event doesn’t contain an IP address, and this flag is @c true, the
/// SDK sets sdk.settings.infer_ip to auto to instruct the server to use the connection IP address as
/// the user address. Due to backward compatibility concerns, Sentry sets sdk.settings.infer_ip to
/// auto out of the box for Cocoa. If you want to stop Sentry from using the connections IP address,
/// you have to enable Prevent Storing of IP Addresses in your project settings in Sentry.
@property (nonatomic) BOOL sendDefaultPii;
/// When enabled, the SDK tracks performance for UIViewController subclasses and HTTP requests
/// automatically. It also measures the app start and slow and frozen frames.
/// @note The default is @c true.
/// @note Performance Monitoring must be enabled for this flag to take effect. See:
/// https://docs.sentry.io/platforms/apple/performance/
@property (nonatomic) BOOL enableAutoPerformanceTracing;
/// WARNING: This is an experimental feature and may still have bugs.
/// When enabled, the SDK finishes the ongoing transaction bound to the scope and links them to the
/// crash event when your app crashes. The SDK skips adding profiles to increase the chance of
/// keeping the transaction.
/// @note The default is @c false.
@property (nonatomic) BOOL enablePersistingTracesWhenCrashing;
/// A block that configures the initial scope when starting the SDK.
/// @discussion The block receives a suggested default scope. You can either configure and return
/// this, or create your own scope instead.
/// @note The default simply returns the passed in scope.
@property (nonatomic, copy) SentryScope * _Nonnull (^ _Nonnull initialScope)(SentryScope * _Nonnull);
/// When enabled, the SDK tracks performance for HTTP requests if auto performance tracking and
/// @c enableSwizzling are enabled.
/// @note The default is @c true.
/// @discussion If you want to enable or disable network breadcrumbs, please use
/// @c enableNetworkBreadcrumbs instead.
@property (nonatomic) BOOL enableNetworkTracking;
/// When enabled, the SDK tracks performance for file IO reads and writes with NSData if auto
/// performance tracking and enableSwizzling are enabled.
/// @note The default is @c true.
@property (nonatomic) BOOL enableFileIOTracing;
/// When enabled, the SDK tracks performance for file IO reads and writes with NSData if auto
/// performance tracking and enableSwizzling are enabled.
/// @note The default is @c true.
@property (nonatomic) BOOL enableDataSwizzling;
/// When enabled, the SDK tracks performance for file IO operations with NSFileManager if auto
/// performance tracking and enableSwizzling are enabled.
/// @note The default is @c false.
@property (nonatomic) BOOL enableFileManagerSwizzling;
/// Indicates the percentage of the tracing data that is collected.
/// @discussion Specifying @c 0 or @c nil discards all trace data, @c 1.0 collects all trace data,
/// @c 0.01 collects 1% of all trace data.
/// @note The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets it
/// to the default.
/// @note The default is @c 0 .
@property (nonatomic, strong) NSNumber * _Nullable tracesSampleRate;
/// A callback to a user defined traces sampler function.
/// @discussion Specifying @c 0 or @c nil discards all trace data, @c 1.0 collects all trace data,
/// @c 0.01 collects 1% of all trace data.
/// @note The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets it
/// to the default of @c 0 .
@property (nonatomic, copy) SentryTracesSamplerCallback _Nullable tracesSampler;
/// If tracing is enabled or not.
/// @discussion @c true if @c tracesSampleRate is > @c 0 and <= @c 1
/// or a @c tracesSampler is set, otherwise @c false.
@property (nonatomic, readonly) BOOL isTracingEnabled;
/// A list of string prefixes of framework names that belong to the app.
/// @note By default, this contains @c CFBundleExecutable to mark it as “in-app”.
@property (nonatomic, readonly, copy) NSArray<NSString *> * _Nonnull inAppIncludes;
/// Adds an item to the list of inAppIncludes.
/// \param inAppInclude The prefix of the framework name.
///
- (void)addInAppInclude:(NSString * _Nonnull)inAppInclude;
/// Set as delegate on the URLSession used for all network data-transfer tasks performed by Sentry.
/// The SDK ignores this option when using urlSession.
@property (nonatomic, weak) id <NSURLSessionDelegate> _Nullable urlSessionDelegate;
/// Use this property so the transport uses this URLSession with your configuration for
/// sending requests to Sentry. If not set, the SDK will create a new URLSession with
/// URLSessionConfiguration.ephemeral.
@property (nonatomic, strong) NSURLSession * _Nullable urlSession;
/// Whether the SDK should use swizzling or not.
/// When turned off the following features are disabled: breadcrumbs for touch events and
/// navigation with UIViewControllers, automatic instrumentation for UIViewControllers,
/// automatic instrumentation for HTTP requests, automatic instrumentation for file IO with
/// NSData, and automatically added sentry-trace header to HTTP requests for distributed tracing.
/// Default is @c true.
@property (nonatomic) BOOL enableSwizzling;
/// A set of class names to ignore for swizzling.
/// The SDK checks if a class name of a class to swizzle contains a class name of this array.
/// For example, if you add MyUIViewController to this list, the SDK excludes the following classes
/// from swizzling: YourApp.MyUIViewController, YourApp.MyUIViewControllerA, MyApp.MyUIViewController.
/// Default is an empty set.
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull swizzleClassNameExcludes;
/// When enabled, the SDK tracks the performance of Core Data operations. It requires enabling
/// performance monitoring. The default is @c true.
/// See: https://docs.sentry.io/platforms/apple/performance/
@property (nonatomic) BOOL enableCoreDataTracing;
/// Configuration for the Sentry profiler.
/// @warning: Continuous profiling is an experimental feature and may still contain bugs.
/// @warning: Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic, copy) void (^ _Nullable configureProfiling)(SentryProfileOptions * _Nonnull);
@property (nonatomic, strong) SentryProfileOptions * _Nullable profiling;
- (BOOL)isContinuousProfilingEnabled SWIFT_WARN_UNUSED_RESULT;
- (BOOL)isProfilingCorrelatedToTraces SWIFT_WARN_UNUSED_RESULT;
/// Whether to send client reports, which contain statistics about discarded events.
/// @note The default is @c true.
/// @see <a href="https://develop.sentry.dev/sdk/client-reports/">https://develop.sentry.dev/sdk/client-reports/</a>
@property (nonatomic) BOOL sendClientReports;
/// When enabled, the SDK tracks when the application stops responding for a specific amount of
/// time defined by the @c appHangTimeoutInterval option.
/// On iOS, tvOS and visionOS, the SDK can differentiate between fully-blocking and non-fully
/// blocking app hangs. Important: this feature can’t differentiate between fully-blocking and
/// non-fully-blocking app hangs on macOS.
/// A fully-blocking app hang is when the main thread is stuck completely, and the app can’t render a
/// single frame. A non-fully-blocking app hang is when the app appears stuck to the user but can still
/// render a few frames. Fully-blocking app hangs are more actionable because the stacktrace shows the
/// exact blocking location on the main thread. As the main thread isn’t completely blocked,
/// non-fully-blocking app hangs can have a stacktrace that doesn’t highlight the exact blocking
/// location.
/// You can use @c enableReportNonFullyBlockingAppHangs to ignore non-fully-blocking app hangs.
/// @note The default is @c true.
/// @note App Hang tracking is automatically disabled if a debugger is attached.
@property (nonatomic) BOOL enableAppHangTracking;
/// The minimum amount of time an app should be unresponsive to be classified as an App Hanging.
/// @note The actual amount may be a little longer.
/// @note Avoid using values lower than 100ms, which may cause a lot of app hangs events being
/// transmitted.
/// @note The default value is 2 seconds.
@property (nonatomic) NSTimeInterval appHangTimeoutInterval;
/// When enabled, the SDK adds breadcrumbs for various system events.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableAutoBreadcrumbTracking;
/// When enabled, the SDK propagates the W3C Trace Context HTTP header traceparent on outgoing HTTP
/// requests.
/// @discussion This is useful when the receiving services only support OTel/W3C propagation. The
/// traceparent header is only sent when this option is @c true and the request matches @c
/// tracePropagationTargets.
/// @note Default value is @c false.
@property (nonatomic) BOOL enablePropagateTraceparent;
/// An array of hosts or regexes that determines if outgoing HTTP requests will get
/// extra @c trace_id and @c baggage headers added.
/// @discussion This array can contain instances of @c NSString which should match the URL (using
/// @c contains ), and instances of @c NSRegularExpression, which will be used to check the whole
/// URL.
/// @note The default value adds the header to all outgoing requests.
/// @see https://docs.sentry.io/platforms/apple/configuration/options/#trace-propagation-targets
@property (nonatomic, copy) NSArray * _Nonnull tracePropagationTargets;
/// When enabled, the SDK captures HTTP Client errors.
/// @note This feature requires @c enableSwizzling enabled as well.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableCaptureFailedRequests;
/// The SDK will only capture HTTP Client errors if the HTTP Response status code is within the
/// defined range.
/// @note Defaults to 500 - 599.
/// SentryHttpStatusCodeRange *defaultHttpStatusCodeRange =
@property (nonatomic, copy) NSArray<SentryHttpStatusCodeRange *> * _Nonnull failedRequestStatusCodes;
/// An array of hosts or regexes that determines if HTTP Client errors will be automatically
/// captured.
/// @discussion This array can contain instances of @c NSString which should match the URL (using
/// @c contains ), and instances of @c NSRegularExpression, which will be used to check the whole
/// URL.
/// @note The default value automatically captures HTTP Client errors of all outgoing requests.
@property (nonatomic, copy) NSArray * _Nonnull failedRequestTargets;
/// Use this feature to enable the Sentry MetricKit integration.
/// @brief When enabled, the SDK sends @c MXDiskWriteExceptionDiagnostic, @c MXCPUExceptionDiagnostic
/// and
/// @c MXHangDiagnostic to Sentry. The SDK supports this feature from iOS 15 and later and macOS 12
/// and later because, on these versions, @c MetricKit delivers diagnostic reports immediately, which
/// allows the Sentry SDK to apply the current data from the scope.
/// @note This feature is disabled by default.
@property (nonatomic) BOOL enableMetricKit;
/// When enabled, the SDK adds the raw MXDiagnosticPayloads as an attachment to the converted
/// SentryEvent. You need to enable @c enableMetricKit for this flag to work.
/// @note Default value is @c false.
@property (nonatomic) BOOL enableMetricKitRawPayload;
/// @warning This is an experimental feature and may still have bugs.
/// @brief By enabling this, every UIViewController tracing transaction will wait
/// for a call to @c SentrySDK.reportFullyDisplayed().
/// @discussion Use this in conjunction with @c enableUIViewControllerTracing.
/// If @c SentrySDK.reportFullyDisplayed() is not called, the transaction will finish
/// automatically after 30 seconds and the <code>Time to full display</code> Span will be
/// finished with @c DeadlineExceeded status.
/// @note Default value is <code>false</code>.
@property (nonatomic) BOOL enableTimeToFullDisplayTracing;
/// This feature is only available from Xcode 13 and from macOS 12.0, iOS 15.0, tvOS 15.0,
/// watchOS 8.0.
/// @warning This is an experimental feature and may still have bugs.
/// @brief Stitches the call to Swift Async functions in one consecutive stack trace.
/// @note Default value is @c false.
@property (nonatomic) BOOL swiftAsyncStacktraces;
/// The path to store SDK data, like events, transactions, profiles, raw crash data, etc. We
/// recommend only changing this when the default, e.g., in security environments, can’t be accessed.
/// @note The default is <code>NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, true)</code>.
@property (nonatomic, copy) NSString * _Nonnull cacheDirectoryPath;
/// Whether to enable Spotlight for local development. For more information see
/// https://spotlightjs.com/.
/// @note Only set this option to @c true while developing, not in production!
@property (nonatomic) BOOL enableSpotlight;
/// The Spotlight URL. Defaults to http://localhost:8969/stream. For more information see
/// https://spotlightjs.com/
@property (nonatomic, copy) NSString * _Nonnull spotlightUrl;
/// If set to <code>true</code>, the SDK will only continue a trace if the organization ID of the incoming
/// trace found in the baggage header matches the organization ID of the current Sentry client.
/// The client’s organization ID is extracted from the DSN or can be set with the <code>orgId</code> option.
/// If the organization IDs do not match, the SDK will start a new trace instead of continuing
/// the incoming one. This is useful to prevent traces of unknown third-party services from being
/// continued in your application.
/// @note Default value is @c false.
@property (nonatomic) BOOL strictTraceContinuation;
/// The organization ID for your Sentry project.
/// The SDK will try to extract the organization ID from the DSN. If it cannot be found, or if
/// you need to override it, you can provide the ID with this option. The organization ID is used
/// for trace propagation and for features like <code>strictTraceContinuation</code>.
@property (nonatomic, copy) NSString * _Nullable orgId;
/// Returns the effective organization ID, preferring the explicit <code>orgId</code> option over the
/// DSN-extracted value.
@property (nonatomic, readonly, copy) NSString * _Nullable effectiveOrgId;
/// Options for experimental features that are subject to change.
@property (nonatomic, strong) SentryExperimentalOptions * _Nonnull experimental;
+ (BOOL)isValidSampleRate:(NSNumber * _Nonnull)rate SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull defaultEnvironment;)
+ (NSString * _Nonnull)defaultEnvironment SWIFT_WARN_UNUSED_RESULT;
/// When enabled, the SDK sends metrics to Sentry. Metrics can be captured using the <code>SentrySDK/metrics</code>
/// API, which allows you to send, view and query counters, gauges and measurements.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableMetrics;
@end

SWIFT_CLASS("_TtC6Sentry27PlaceholderProcessInfoClass")
@interface PlaceholderProcessInfoClass : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry28PlaceholderSentryApplication")
@interface PlaceholderSentryApplication : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry23SentryProcessInfoSource_")
@protocol SentryProcessInfoSource
@property (nonatomic, readonly, copy) NSString * _Nonnull processDirectoryPath;
@property (nonatomic, readonly, copy) NSString * _Nullable processPath;
@property (nonatomic, readonly) NSInteger processorCount;
@property (nonatomic, readonly) NSProcessInfoThermalState thermalState;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, NSString *> * _Nonnull environment;
@property (nonatomic, readonly) BOOL isiOSAppOnMac SWIFT_AVAILABILITY(macos,introduced=12.0);
@property (nonatomic, readonly) BOOL isMacCatalystApp SWIFT_AVAILABILITY(macos,introduced=12.0);
@property (nonatomic, readonly) BOOL isiOSAppOnVisionOS;
@property (nonatomic, readonly) BOOL isLowPowerModeEnabled SWIFT_AVAILABILITY(macos,introduced=12.0);
@end

@interface NSProcessInfo (SWIFT_EXTENSION(Sentry)) <SentryProcessInfoSource>
@property (nonatomic, readonly, copy) NSString * _Nonnull processDirectoryPath;
@property (nonatomic, readonly, copy) NSString * _Nullable processPath;
@property (nonatomic, readonly) BOOL isiOSAppOnVisionOS;
@end

/// Parses the custom X-Sentry-Rate-Limits header.
/// This header exists of a multiple quotaLimits separated by “,”.
/// Each quotaLimit exists of retry_after:categories:scope.
/// retry_after: seconds until the rate limit expires.
/// categories: semicolon separated list of categories. If empty, this limit
/// applies to all categories. scope: This can be ignored by SDKs.
SWIFT_CLASS_NAMED("RateLimitParser")
@interface SentryRateLimitParser : NSObject
- (nonnull instancetype)initWithCurrentDateProvider:(id <SentryCurrentDateProvider> _Nonnull)currentDateProvider OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSNumber *, NSDate *> * _Nonnull)parse:(NSString * _Nonnull)header SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Parses value of HTTP header “Retry-After” which in most cases is sent in
/// combination with HTTP status 429 Too Many Requests.
/// For more details see: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.37
SWIFT_CLASS_NAMED("RetryAfterHeaderParser")
@interface SentryRetryAfterHeaderParser : NSObject
/// Parses the HTTP header into a NSDate.
/// \param retryAfterHeader The header value.
///
///
/// returns:
/// NSDate representation of Retry-After. If the date can’t be parsed nil is returned.
- (NSDate * _Nullable)parse:(NSString * _Nullable)retryAfterHeader SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry22SentryANRStoppedResult")
@interface SentryANRStoppedResult : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol SentryANRTrackerDelegate;
SWIFT_CLASS("_TtC6Sentry16SentryANRTracker")
@interface SentryANRTracker : NSObject
- (void)addListener:(id <SentryANRTrackerDelegate> _Nonnull)listener;
- (void)removeListener:(id <SentryANRTrackerDelegate> _Nonnull)listener;
- (void)clear;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

enum SentryANRType : NSInteger;
/// The  methods are called from a  background thread.
SWIFT_PROTOCOL("_TtP6Sentry24SentryANRTrackerDelegate_")
@protocol SentryANRTrackerDelegate
- (void)anrDetectedWithType:(enum SentryANRType)type;
- (void)anrStoppedWithResult:(SentryANRStoppedResult * _Nullable)result;
@end

typedef SWIFT_ENUM(NSInteger, SentryANRType, open) {
  SentryANRTypeFatalFullyBlocking = 0,
  SentryANRTypeFatalNonFullyBlocking = 1,
  SentryANRTypeFullyBlocking = 2,
  SentryANRTypeNonFullyBlocking = 3,
  SentryANRTypeUnknown = 4,
};

SWIFT_CLASS("_TtC6Sentry23SentryAppHangTypeMapper")
@interface SentryAppHangTypeMapper : NSObject
+ (NSString * _Nonnull)getExceptionTypeWithAnrType:(enum SentryANRType)anrType SWIFT_WARN_UNUSED_RESULT;
+ (NSString * _Nonnull)getFatalExceptionTypeWithNonFatalErrorType:(NSString * _Nonnull)nonFatalErrorType SWIFT_WARN_UNUSED_RESULT;
+ (BOOL)isExceptionTypeAppHangWithExceptionType:(NSString * _Nonnull)exceptionType SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry14SentryAppState")
@interface SentryAppState : NSObject <SentrySerializable>
@property (nonatomic, readonly, copy) NSString * _Nullable releaseName;
@property (nonatomic, readonly, copy) NSString * _Nonnull osVersion;
@property (nonatomic, readonly, copy) NSString * _Nullable vendorId;
@property (nonatomic, readonly) BOOL isDebugging;
/// The boot time of the system rounded down to seconds. As the precision of the serialization is
/// only milliseconds and a precision of seconds is enough we round down to seconds. With this we
/// avoid getting different dates before and after serialization.
/// warning:
/// We must not send this information off device because Apple forbids that.
/// We are allowed send the amount of time that has elapsed between events that occurred within the
/// app though. For more information see
/// https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api#4278394.
@property (nonatomic, readonly, copy) NSDate * _Nonnull systemBootTimestamp;
@property (nonatomic) BOOL isActive;
@property (nonatomic) BOOL wasTerminated;
@property (nonatomic) BOOL isANROngoing;
@property (nonatomic) BOOL isSDKRunning;
- (nonnull instancetype)initWithReleaseName:(NSString * _Nullable)releaseName osVersion:(NSString * _Nonnull)osVersion vendorId:(NSString * _Nullable)vendorId isDebugging:(BOOL)isDebugging systemBootTimestamp:(NSDate * _Nonnull)systemBootTimestamp OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithJSONObject:(NSDictionary<NSString *, id> * _Nonnull)jsonObject OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry21SentryAppStateManager")
@interface SentryAppStateManager : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// A typed attribute that can be attached to structured item entries used by Logs & Metrics
/// <code>Attribute</code> provides a type-safe way to store structured data alongside item messages.
/// Supports String, Bool, Int, and Double types.
/// This class exists primarily for Objective-C compatibility, inheriting from <code>NSObject</code> and
/// using <code>@objcMembers</code> to ensure it can be used from Objective-C code. For Swift code, prefer
/// using the <code>SentryAttributeValue</code> protocol instead, which provides a more idiomatic Swift API
/// and allows you to pass native Swift types (String, Bool, Int, Double, Float, and their arrays)
/// directly without wrapping them in a class instance. This Objective-C-compatible class will be
/// removed in a future major version release.
SWIFT_CLASS("_TtC6Sentry15SentryAttribute")
@interface SentryAttribute : NSObject
/// The type identifier for this attribute
/// Can be any of the following:
/// <ul>
///   <li>
///     <code>string</code>
///   </li>
///   <li>
///     <code>boolean</code>
///   </li>
///   <li>
///     <code>integer</code>
///   </li>
///   <li>
///     <code>double</code>
///   </li>
///   <li>
///     <code>string[]</code>
///   </li>
///   <li>
///     <code>boolean[]</code>
///   </li>
///   <li>
///     <code>integer[]</code>
///   </li>
///   <li>
///     <code>double[]</code>
///   </li>
/// </ul>
@property (nonatomic, readonly, copy) NSString * _Nonnull type;
/// The actual value stored in this attribute
@property (nonatomic, readonly) id _Nonnull value;
/// Creates a string attribute with the specified value.
/// \param value The string value to store in the attribute.
///
- (nonnull instancetype)initWithString:(NSString * _Nonnull)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a boolean attribute with the specified value.
/// \param value The boolean value to store in the attribute.
///
- (nonnull instancetype)initWithBoolean:(BOOL)value OBJC_DESIGNATED_INITIALIZER;
/// Creates an integer attribute with the specified value.
/// \param value The integer value to store in the attribute.
///
- (nonnull instancetype)initWithInteger:(NSInteger)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a double attribute with the specified value.
/// \param value The double value to store in the attribute.
///
- (nonnull instancetype)initWithDouble:(double)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a double attribute from a float value
/// \param value The float value to store in the attribute.
///
- (nonnull instancetype)initWithFloat:(float)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a string array attribute with the specified values.
/// \param values The array of string values to store in the attribute.
///
- (nonnull instancetype)initWithStringArray:(NSArray<NSString *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates a boolean array attribute with the specified values.
/// \param values The array of boolean values to store in the attribute.
///
- (nonnull instancetype)initWithBooleanArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates an integer array attribute with the specified values.
/// \param values The array of integer values to store in the attribute.
///
- (nonnull instancetype)initWithIntegerArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates a double array attribute with the specified values.
/// \param values The array of double values to store in the attribute.
///
- (nonnull instancetype)initWithDoubleArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates a double attribute from a float value
/// \param values The array of float values to store in the attribute.
///
- (nonnull instancetype)initWithFloatArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry26SentryBaggageSerialization")
@interface SentryBaggageSerialization : NSObject
+ (NSString * _Nonnull)encodeDictionary:(NSDictionary<NSString *, NSString *> * _Nonnull)dictionary SWIFT_WARN_UNUSED_RESULT;
+ (NSDictionary<NSString *, NSString *> * _Nonnull)decode:(NSString * _Nonnull)baggage SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryBinaryImageInfo;
/// This class listens to <code>SentryCrashBinaryImageCache</code> to keep a copy of the loaded binaries
/// information in a sorted collection that will be used to symbolicate frames with better
/// performance.
SWIFT_CLASS_NAMED("SentryBinaryImageCache")
@interface SentryBinaryImageCache : NSObject
@property (nonatomic, readonly, copy) NSArray<SentryBinaryImageInfo *> * _Nullable cache;
- (void)start:(BOOL)isDebug;
- (void)stop;
- (void)binaryImageAdded:(char const * _Nullable)imageName vmAddress:(uint64_t)vmAddress address:(uint64_t)address size:(uint64_t)size uuid:(uint8_t const * _Nullable)uuid;
- (SentryBinaryImageInfo * _Nullable)imageByAddress:(uint64_t)address SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS_NAMED("SentryBinaryImageInfo")
@interface SentryBinaryImageInfo : NSObject
@property (nonatomic, copy) NSString * _Nonnull name;
@property (nonatomic, copy) NSString * _Nullable uuid;
@property (nonatomic) uint64_t vmAddress;
@property (nonatomic) uint64_t address;
@property (nonatomic) uint64_t size;
- (nonnull instancetype)initWithName:(NSString * _Nonnull)name uuid:(NSString * _Nullable)uuid vmAddress:(uint64_t)vmAddress address:(uint64_t)address size:(uint64_t)size OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryBreadcrumb;
SWIFT_PROTOCOL("_TtP6Sentry24SentryBreadcrumbDelegate_")
@protocol SentryBreadcrumbDelegate <NSObject>
- (void)addBreadcrumb:(SentryBreadcrumb * _Nonnull)crumb;
@end

SWIFT_CLASS("_TtC6Sentry23SentryBreadcrumbTracker")
@interface SentryBreadcrumbTracker : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry26SentryReachabilityObserver_")
@protocol SentryReachabilityObserver <NSObject>
- (void)connectivityChanged:(BOOL)connected typeDescription:(NSString * _Nonnull)typeDescription;
@end

@interface SentryBreadcrumbTracker (SWIFT_EXTENSION(Sentry)) <SentryReachabilityObserver>
- (void)connectivityChanged:(BOOL)connected typeDescription:(NSString * _Nonnull)typeDescription;
@end

/// A custom byte count formatter that provides locale-independent formatting.
/// We need to have a standard description for byte counts but NSByteCountFormatter
/// does not allow choosing a locale, and the result changes according to the device
/// configuration. With our own formatter we can control the result.
SWIFT_CLASS("_TtC6Sentry24SentryByteCountFormatter")
@interface SentryByteCountFormatter : NSObject
/// Returns a human-readable string representation of the given byte count.
/// \param bytes The number of bytes to format.
///
///
/// returns:
/// A formatted string like “1,024 KB” or “512 MB”.
+ (NSString * _Nonnull)bytesCountDescription:(NSUInteger)bytes SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryId;
@class NSException;
@class SentryFeedback;
/// The Sentry client is responsible for capturing events and sending them to Sentry.
SWIFT_CLASS("_TtC6Sentry12SentryClient")
@interface SentryClient : NSObject
/// Initializes a <code>SentryClient</code>. Pass in a dictionary of options.
/// \param options Options dictionary
///
///
/// returns:
/// An initialized <code>SentryClient</code> or <code>nil</code> if an error occurred.
- (nullable instancetype)initWithOptions:(SentryOptions * _Nonnull)options OBJC_DESIGNATED_INITIALIZER;
/// Indicates whether the client is enabled and will send events to Sentry.
@property (nonatomic, readonly) BOOL isEnabled;
/// The options used to configure this client.
@property (nonatomic, strong) SentryOptions * _Nonnull options;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScope:(SentryScope * _Nonnull)scope;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScope:(SentryScope * _Nonnull)scope;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScope:(SentryScope * _Nonnull)scope;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScope:(SentryScope * _Nonnull)scope;
/// Captures a new-style user feedback and sends it to Sentry.
/// \param feedback The user feedback to send to Sentry.
///
/// \param scope The current scope from which to gather contextual information.
///
- (void)captureFeedback:(SentryFeedback * _Nonnull)feedback withScope:(SentryScope * _Nonnull)scope;
/// Captures a log entry and sends it to Sentry.
/// \param log The log entry to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
- (void)captureLog:(SentryLog * _Nonnull)log withScope:(SentryScope * _Nonnull)scope;
/// Waits synchronously for the SDK to flush out all queued and cached items for up to the specified timeout in seconds.
/// If there is no internet connection, the function returns immediately. The SDK doesn’t dispose the client or the hub.
/// \param timeout The time to wait for the SDK to complete the flush.
///
- (void)flush:(NSTimeInterval)timeout;
/// Disables the client and calls flush with <code>SentryOptions.shutdownTimeInterval</code>.
- (void)close;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryDiscardedEvent;
SWIFT_CLASS("_TtC6Sentry18SentryClientReport")
@interface SentryClientReport : NSObject <SentrySerializable>
- (nonnull instancetype)initWithDiscardedEvents:(NSArray<SentryDiscardedEvent *> * _Nonnull)discardedEvents dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryCrashSwift;
/// Facade that bridges the Sentry SDK layer to the SentryCrash subsystem.
/// <code>SentryCrashBridge</code> is the single entry point through which SentryCrash
/// accesses SDK services. It replaces direct <code>SentryDependencyContainer</code>
/// look-ups inside the crash reporter, keeping the dependency direction
/// one-way: <em>Sentry → SentryCrash</em>, never the reverse.
/// <h2>Isolation boundary</h2>
/// This bridge is the first step toward fully isolating SentryCrash from the
/// SDK. Today the two layers still share a handful of model types (e.g.
/// <code>SentryCrashSwift</code>, notification-center wrappers). Future work will replace
/// those shared types with protocol abstractions so that SentryCrash can be
/// built and tested independently.
/// <h2>Exposed services</h2>
/// | Service                        | Used by SentryCrash for                                 |
/// |––––––––––––––––|———————————————————|
/// | <code>notificationCenterWrapper</code>    | Observing app-lifecycle events (foreground, background)  |
/// | <code>dateProvider</code>                 | Timestamping crash reports and session boundaries        |
/// | <code>crashReporter</code>                | Reading system info, crash state, and launch metadata    |
/// | <code>uncaughtExceptionHandler</code>     | Installing / reading the NSException handler             |
/// | <code>activeScreenSize()</code> (UIKit)   | Recording screen dimensions in device context            |
/// <h2>Threading</h2>
/// The bridge is created once during <code>SentryCrashIntegration.install(with:)</code> and
/// is safe to read from any thread after initialization. The
/// <code>uncaughtExceptionHandler</code> property may be written from the SentryCrash
/// installation path and read from the crash-time exception handler.
/// <h2>Usage</h2>
/// The bridge is created by the integration layer and passed down:
/// \code
/// let bridge = SentryCrashBridge(
///     notificationCenterWrapper: notificationCenter,
///     dateProvider: dateProvider,
///     crashReporter: crashReporter
/// )
/// // Passed to SentryCrashWrapper, SentryCrashIntegrationSessionHandler,
/// // and the underlying SentryCrash / SentryCrashInstallation instances.
///
/// \endcode
SWIFT_CLASS("_TtC6Sentry17SentryCrashBridge")
@interface SentryCrashBridge : NSObject
/// Wrapper around <code>NSNotificationCenter</code> used by SentryCrash to observe
/// app-lifecycle transitions (e.g. <code>UIApplicationDidBecomeActiveNotification</code>).
@property (nonatomic, readonly, strong) id <SentryNSNotificationCenterWrapper> _Nonnull notificationCenterWrapper;
/// Provides the current date/time. Used for timestamping crash reports and
/// computing session durations.
@property (nonatomic, readonly, strong) id <SentryCurrentDateProvider> _Nonnull dateProvider;
/// The crash reporter instance that owns system info, crash state, and the
/// on-disk report store. This is the main object SentryCrash interacts with.
@property (nonatomic, readonly, strong) SentryCrashSwift * _Nonnull crashReporter;
/// The C-convention uncaught-exception handler installed by SentryCrash.
/// This is a convenience proxy for <code>crashReporter.uncaughtExceptionHandler</code>.
/// The NSException monitor (<code>SentryCrashMonitor_NSException</code>) writes this
/// during installation so it can be restored if monitoring is later disabled.
@property (nonatomic) void (* _Nullable uncaughtExceptionHandler)(NSException * _Nonnull);
/// Creates a bridge with the SDK services that SentryCrash requires.
/// \param notificationCenterWrapper Wrapper for subscribing to app-lifecycle
/// notifications.
///
/// \param dateProvider Provider for current timestamps.
///
/// \param crashReporter The crash reporter that manages on-disk reports and
/// system info.
///
- (nonnull instancetype)initWithNotificationCenterWrapper:(id <SentryNSNotificationCenterWrapper> _Nonnull)notificationCenterWrapper dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider crashReporter:(SentryCrashSwift * _Nonnull)crashReporter OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry28SentryCrashReportFilterSwift")
@interface SentryCrashReportFilterSwift : NSObject
- (nonnull instancetype)initWithFilterReports:(void (^ _Nonnull)(NSArray * _Nonnull, void (^ _Nonnull)(NSArray * _Nullable, BOOL, NSError * _Nullable)))filter OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry19SentryCrashReporter_")
@protocol SentryCrashReporter <NSObject>
@property (nonatomic, readonly) BOOL crashedLastLaunch;
@property (nonatomic, readonly) NSTimeInterval durationFromCrashStateInitToLastCrash;
@property (nonatomic, readonly) NSTimeInterval activeDurationSinceLastCrash;
@property (nonatomic, readonly) BOOL isBeingTraced;
@property (nonatomic, readonly) BOOL isSimulatorBuild;
@property (nonatomic, readonly) BOOL isApplicationInForeground;
@property (nonatomic, readonly) uint64_t freeMemorySize;
@property (nonatomic, readonly) uint64_t appMemorySize;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nonnull systemInfo;
@property (nonatomic, readonly, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;
- (void)startBinaryImageCache;
- (void)stopBinaryImageCache;
- (void)enrichScope:(SentryScope * _Nonnull)scope;
@end

SWIFT_CLASS("_TtC6Sentry16SentryCrashSwift")
@interface SentryCrashSwift : NSObject
@property (nonatomic, readonly) BOOL crashedLastLaunch;
@property (nonatomic, readonly) NSTimeInterval activeDurationSinceLastCrash;
- (void)setSink:(SentryCrashReportFilterSwift * _Nullable)newValue;
- (void)setupOnCrash;
- (void)removeOnCrash;
@property (nonatomic) void (* _Nullable uncaughtExceptionHandler)(NSException * _Nonnull);
- (void)setBridge:(SentryCrashBridge * _Nonnull)bridge;
@property (nonatomic, copy) NSString * _Nonnull basePath;
- (void)install;
- (void)uninstall;
@property (nonatomic, readonly, copy) NSDictionary * _Nullable systemInfo;
@property (nonatomic, copy) NSDictionary * _Nonnull userInfo;
- (void)sendAllReportsWithCompletion:(void (^ _Nonnull)(NSArray * _Nullable, BOOL, NSError * _Nullable))completion;
@property (nonatomic, readonly) uint32_t monitoring;
- (BOOL)hasOnCrash SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// We need a protocol to expose SentryCurrentDateProvider to tests.
/// Mocking the previous private class from <code>SentryTestUtils</code> stopped working in Xcode 16.
SWIFT_PROTOCOL("_TtP6Sentry25SentryCurrentDateProvider_")
@protocol SentryCurrentDateProvider
- (NSDate * _Nonnull)date SWIFT_WARN_UNUSED_RESULT;
- (NSInteger)timezoneOffset SWIFT_WARN_UNUSED_RESULT;
- (uint64_t)systemTime SWIFT_WARN_UNUSED_RESULT;
- (NSTimeInterval)systemUptime SWIFT_WARN_UNUSED_RESULT;
- (uint64_t)getAbsoluteTime SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry14SentryDateUtil")
@interface SentryDateUtil : NSObject
- (nonnull instancetype)initWithCurrentDateProvider:(id <SentryCurrentDateProvider> _Nonnull)currentDateProvider OBJC_DESIGNATED_INITIALIZER;
- (BOOL)isInFuture:(NSDate * _Nullable)date SWIFT_WARN_UNUSED_RESULT;
+ (NSDate * _Nullable)getMaximumDate:(NSDate * _Nullable)first andOther:(NSDate * _Nullable)second SWIFT_WARN_UNUSED_RESULT;
+ (NSInteger)millisecondsSince1970:(NSDate * _Nonnull)date SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryFrame;
@class SentryDebugMeta;
@class SentryThread;
SWIFT_CLASS("_TtC6Sentry24SentryDebugImageProvider")
@interface SentryDebugImageProvider : NSObject
/// Returns a list of debug images that are being referenced by the given frames.
/// This function uses the @c SentryBinaryImageCache which is significantly faster than @c
/// SentryCrashDefaultBinaryImageProvider for retrieving binary image information.
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesFromCacheForFrames:(NSArray<SentryFrame *> * _Nonnull)frames SWIFT_WARN_UNUSED_RESULT;
/// Returns a list of debug images that are being referenced in the given threads.
/// This function uses the @c SentryBinaryImageCache which is significantly faster than @c
/// SentryCrashDefaultBinaryImageProvider for retrieving binary image information.
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesFromCacheForThreads:(NSArray<SentryThread *> * _Nonnull)threads SWIFT_WARN_UNUSED_RESULT;
/// Returns a list of debug images that are being referenced in the given image addresses.
/// This function uses the @c SentryBinaryImageCache which is significantly faster than @c
/// SentryCrashDefaultBinaryImageProvider for retrieving binary image information.
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesForImageAddressesFromCache:(NSSet<NSString *> * _Nonnull)imageAddresses SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesFromCache SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry26SentryDefaultCrashReporter")
@interface SentryDefaultCrashReporter : NSObject <SentryCrashReporter>
@property (nonatomic, readonly, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nonnull systemInfo;
- (nonnull instancetype)initWithProcessInfoWrapper:(id <SentryProcessInfoSource> _Nonnull)processInfoWrapper bridge:(SentryCrashBridge * _Nonnull)bridge OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@interface SentryDefaultCrashReporter (SWIFT_EXTENSION(Sentry))
- (void)startBinaryImageCache;
- (void)stopBinaryImageCache;
@property (nonatomic, readonly) BOOL crashedLastLaunch;
@property (nonatomic, readonly) NSTimeInterval durationFromCrashStateInitToLastCrash;
@property (nonatomic, readonly) NSTimeInterval activeDurationSinceLastCrash;
@property (nonatomic, readonly) BOOL isBeingTraced;
@property (nonatomic, readonly) BOOL isSimulatorBuild;
@property (nonatomic, readonly) BOOL isApplicationInForeground;
@property (nonatomic, readonly) uint64_t freeMemorySize;
@property (nonatomic, readonly) uint64_t appMemorySize;
- (void)enrichScope:(SentryScope * _Nonnull)scope;
@end

SWIFT_CLASS("_TtC6Sentry32SentryDefaultCurrentDateProvider")
@interface SentryDefaultCurrentDateProvider : NSObject <SentryCurrentDateProvider>
- (NSDate * _Nonnull)date SWIFT_WARN_UNUSED_RESULT;
- (NSInteger)timezoneOffset SWIFT_WARN_UNUSED_RESULT;
/// Returns the absolute timestamp, which has no defined reference point or unit
/// as it is platform dependent.
- (uint64_t)systemTime SWIFT_WARN_UNUSED_RESULT;
- (NSTimeInterval)systemUptime SWIFT_WARN_UNUSED_RESULT;
- (uint64_t)getAbsoluteTime SWIFT_WARN_UNUSED_RESULT;
+ (uint64_t)getAbsoluteTime SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Required because we need to call this from Objective-C. It’s just a wrapper around the TelemetryScopeApplier protocol for Objective-C.
SWIFT_PROTOCOL("_TtP6Sentry21SentryLogScopeApplier_")
@protocol SentryLogScopeApplier
- (SentryLog * _Nonnull)applyScope:(SentryScope * _Nonnull)scope toLog:(SentryLog * _Nonnull)log SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry28SentryDefaultLogScopeApplier")
@interface SentryDefaultLogScopeApplier : NSObject <SentryLogScopeApplier>
- (nonnull instancetype)initWithEnvironment:(NSString * _Nonnull)environment releaseName:(NSString * _Nullable)releaseName cacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath sendDefaultPii:(BOOL)sendDefaultPii OBJC_DESIGNATED_INITIALIZER;
- (SentryLog * _Nonnull)applyScope:(SentryScope * _Nonnull)scope toLog:(SentryLog * _Nonnull)log SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry24SentryObjCRuntimeWrapper_")
@protocol SentryObjCRuntimeWrapper
- (char const * _Nonnull * _Nullable)copyClassNamesForImage:(char const * _Nonnull)image amount:(uint32_t * _Nullable)outCount SWIFT_WARN_UNUSED_RESULT;
- (char const * _Nullable)class_getImageName:(Class _Nonnull)cls SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry31SentryDefaultObjCRuntimeWrapper")
@interface SentryDefaultObjCRuntimeWrapper : NSObject <SentryObjCRuntimeWrapper>
- (char const * _Nonnull * _Nullable)copyClassNamesForImage:(char const * _Nonnull)image amount:(uint32_t * _Nullable)outCount SWIFT_WARN_UNUSED_RESULT;
- (char const * _Nullable)class_getImageName:(Class _Nonnull)cls SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryDispatchFactory;
@class SentryNSTimerFactory;
@class SentryFileIOTracker;
@class SentryThreadInspector;
@class SentryReachability;
@class SentryExtraContextProvider;
@protocol SentryEventContextEnricher;
@class SentryFileManager;
@class SentryScopePersistentStore;
@class SentryGlobalEventProcessor;
SWIFT_CLASS("_TtC6Sentry25SentryDependencyContainer")
@interface SentryDependencyContainer : NSObject
@property (nonatomic, strong) SentryOptions * _Nullable startOptions;
+ (SentryDependencyContainer * _Nonnull)sharedInstance SWIFT_WARN_UNUSED_RESULT;
/// Resets all dependencies.
+ (void)reset;
- (id <SentryApplication> _Nullable)application SWIFT_WARN_UNUSED_RESULT;
@property (nonatomic, strong) SentryDispatchQueueWrapper * _Nonnull dispatchQueueWrapper;
@property (nonatomic, strong) id <SentryRandomProtocol> _Nonnull random;
@property (nonatomic, strong) SentryThreadWrapper * _Nonnull threadWrapper;
@property (nonatomic, strong) SentryBinaryImageCache * _Nonnull binaryImageCache;
@property (nonatomic, strong) id <SentryCurrentDateProvider> _Nonnull dateProvider;
@property (nonatomic, strong) id <SentryNSNotificationCenterWrapper> _Nonnull notificationCenterWrapper;
@property (nonatomic, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;
@property (nonatomic, strong) id <SentryCrashReporter> _Nonnull crashWrapper;
@property (nonatomic, strong) SentryDispatchFactory * _Nonnull dispatchFactory;
@property (nonatomic, strong) SentryNSTimerFactory * _Nonnull timerFactory;
@property (nonatomic, strong) SentryFileIOTracker * _Nonnull fileIOTracker;
@property (nonatomic, strong) SentryThreadInspector * _Nonnull threadInspector;
@property (nonatomic, strong) id <SentryRateLimits> _Nonnull rateLimits;
@property (nonatomic, strong) SentryReachability * _Nonnull reachability;
@property (nonatomic, strong) SentrySysctl * _Nonnull sysctlWrapper;
@property (nonatomic, strong) SentryDebugImageProvider * _Nonnull debugImageProvider;
@property (nonatomic, strong) id <SentryObjCRuntimeWrapper> _Nonnull objcRuntimeWrapper;
@property (nonatomic, strong) SentryExtraContextProvider * _Nonnull extraContextProvider;
@property (nonatomic, readonly, strong) id <SentryEventContextEnricher> _Nonnull eventContextEnricher;
@property (nonatomic, strong) SentryFileManager * _Nullable fileManager;
@property (nonatomic, strong) SentryScopePersistentStore * _Nullable scopePersistentStore;
@property (nonatomic, strong) SentryGlobalEventProcessor * _Nonnull globalEventProcessor;
@property (nonatomic, strong) SentryAppStateManager * _Nonnull appStateManager;
@property (nonatomic, strong) SentryCrashSwift * _Nonnull crashReporter;
- (SentryANRTracker * _Nonnull)getANRTracker:(NSTimeInterval)timeout SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry20SentryDiscardedEvent")
@interface SentryDiscardedEvent : NSObject <SentrySerializable>
@property (nonatomic, readonly) NSUInteger quantity;
- (nonnull instancetype)initWithReason:(NSString * _Nonnull)reason category:(NSString * _Nonnull)category quantity:(NSUInteger)quantity OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryDispatchSourceWrapper;
SWIFT_CLASS("_TtC6Sentry21SentryDispatchFactory")
@interface SentryDispatchFactory : NSObject
/// Generate a new @c SentryDispatchQueueWrapper .
- (SentryDispatchQueueWrapper * _Nonnull)queueWithName:(char const * _Nonnull)name attributes:(dispatch_queue_attr_t _Nonnull)attributes SWIFT_WARN_UNUSED_RESULT;
/// Creates a utility QoS queue with the given name and relative priority, wrapped in a @c
/// SentryDispatchQueueWrapper.
/// @note This method is only a factory method and does not keep a reference to the created queue.
/// @param name The name of the queue.
/// @param relativePriority A negative offset from the maximum supported scheduler priority for the
/// given quality-of-service class. This value must be less than 0 and greater than or equal to @c
/// QOS_MIN_RELATIVE_PRIORITY, otherwise throws an assertion and returns an unspecified
/// quality-of-service.
/// @return Unretained reference to the created queue.
- (SentryDispatchQueueWrapper * _Nonnull)createUtilityQueue:(char const * _Nonnull)name relativePriority:(int32_t)relativePriority SWIFT_WARN_UNUSED_RESULT;
/// Generate a @c dispatch_source_t by internally vending the required @c SentryDispatchQueueWrapper.
- (SentryDispatchSourceWrapper * _Nonnull)sourceWithInterval:(NSInteger)interval leeway:(NSInteger)leeway queueName:(char const * _Nonnull)queueName attributes:(dispatch_queue_attr_t _Nonnull)attributes eventHandler:(void (^ _Nonnull)(void))eventHandler SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry26SentryDispatchQueueWrapper")
@interface SentryDispatchQueueWrapper : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithName:(char const * _Nonnull)name OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithName:(char const * _Nonnull)name relativePriority:(int32_t)relativePriority OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithName:(char const * _Nonnull)name attributes:(dispatch_queue_attr_t _Nullable)attributes OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithHighPriority:(char const * _Nonnull)name OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, strong) dispatch_queue_t _Nonnull queue;
- (void)dispatchAsyncWithBlock:(void (^ _Nonnull)(void))block;
- (void)dispatchAsyncOnMainQueueIfNotMainThread:(void (^ _Nonnull)(void))block;
- (void)dispatchSyncOnMainQueue:(void (^ _Nonnull)(void))block;
- (void)dispatchSyncOnMainQueue:(void (^ _Nonnull)(void))block timeout:(double)timeout;
- (void)dispatchAfter:(NSTimeInterval)interval block:(void (^ _Nonnull)(void))block;
- (void)dispatchOnce:(long * _Nonnull)predicate block:(void (^ _Nonnull)(void))block;
@property (nonatomic, readonly) BOOL shouldDispatchCancel;
@property (nonatomic, readonly) BOOL shouldCreateDispatchBlock;
@end

/// A wrapper around a dispatch timer source that can be subclassed for mocking in tests.
SWIFT_CLASS("_TtC6Sentry27SentryDispatchSourceWrapper")
@interface SentryDispatchSourceWrapper : NSObject
- (nonnull instancetype)initWithInterval:(NSInteger)interval leeway:(NSInteger)leeway queue:(SentryDispatchQueueWrapper * _Nonnull)queueWrapper eventHandler:(void (^ _Nonnull)(void))eventHandler OBJC_DESIGNATED_INITIALIZER;
- (void)cancel;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSURL;
@class NSError;
/// Represents a Sentry Data Source Name (DSN) which identifies a Sentry project.
SWIFT_CLASS_NAMED("SentryDsn")
@interface SentryDsn : NSObject
/// The parsed URL from the DSN string.
@property (nonatomic, readonly, copy) NSURL * _Nonnull url;
/// Initializes a SentryDsn from a DSN string.
/// \param dsnString The DSN string to parse.
///
/// \param error An optional error pointer that will be set if the DSN is invalid.
///
///
/// returns:
/// A new SentryDsn instance, or nil if the DSN string is invalid.
- (nullable instancetype)initWithString:(NSString * _Nullable)dsnString didFailWithError:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Generates a SHA1 hash of the DSN URL.
/// note:
/// This is internal SDK API, not for public use.
///
/// returns:
/// A hexadecimal string representation of the hash.
- (NSString * _Nonnull)getHash SWIFT_WARN_UNUSED_RESULT;
/// Returns the envelope endpoint URL for this DSN.
///
/// returns:
/// The envelope endpoint URL.
- (NSURL * _Nonnull)getEnvelopeEndpoint SWIFT_WARN_UNUSED_RESULT;
/// Extracts the organization ID from the DSN host.
/// For example, given a DSN with host <code>o123.ingest.sentry.io</code>, this returns <code>"123"</code>.
/// Returns <code>nil</code> if the host does not match the expected pattern.
@property (nonatomic, readonly, copy) NSString * _Nullable orgId;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry28SentryEnabledFeaturesBuilder")
@interface SentryEnabledFeaturesBuilder : NSObject
+ (NSArray<NSString *> * _Nonnull)getEnabledFeaturesWithOptions:(SentryOptions * _Nullable)options SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryEnvelopeItem;
@class SentryEnvelopeHeader;
SWIFT_CLASS("_TtC6Sentry14SentryEnvelope")
@interface SentryEnvelope : NSObject
- (nonnull instancetype)initWithId:(SentryId * _Nullable)id singleItem:(SentryEnvelopeItem * _Nonnull)item;
- (nonnull instancetype)initWithHeader:(SentryEnvelopeHeader * _Nonnull)header singleItem:(SentryEnvelopeItem * _Nonnull)item;
- (nonnull instancetype)initWithId:(SentryId * _Nullable)id items:(NSArray<SentryEnvelopeItem *> * _Nonnull)items;
- (nonnull instancetype)initWithHeader:(SentryEnvelopeHeader * _Nonnull)header items:(NSArray<SentryEnvelopeItem *> * _Nonnull)items OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, strong) SentryEnvelopeHeader * _Nonnull header;
@property (nonatomic, readonly, copy) NSArray<SentryEnvelopeItem *> * _Nonnull items;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryTraceContext;
SWIFT_CLASS("_TtC6Sentry20SentryEnvelopeHeader")
@interface SentryEnvelopeHeader : NSObject
/// Initializes a @c SentryEnvelopeHeader object with the specified @c eventId and @c traceContext.
/// @param eventId The identifier of the event. Can be @c nil if no event in the envelope or
/// attachment related to event.
/// @param traceContext Current trace state.
- (nonnull instancetype)initWithId:(SentryId * _Nullable)eventId traceContext:(SentryTraceContext * _Nullable)traceContext;
- (nonnull instancetype)initWithId:(SentryId * _Nullable)eventId sdkInfo:(NSDictionary * _Nullable)sdkInfo;
+ (nonnull instancetype)empty SWIFT_WARN_UNUSED_RESULT;
/// The event identifier, if available.
/// An event id exist if the envelope contains an event of items within it are related. i.e
/// Attachments
@property (nonatomic, readonly, strong) SentryId * _Nullable eventId;
@property (nonatomic, readonly, strong) SentryTraceContext * _Nullable traceContext;
/// The timestamp when the event was sent from the SDK as string in RFC 3339 format. Used
/// for clock drift correction of the event timestamp. The time zone must be UTC.
/// The timestamp should be generated as close as possible to the transmision of the event,
/// so that the delay between sending the envelope and receiving it on the server-side is
/// minimized.
@property (nonatomic, copy) NSDate * _Nullable sentAt;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSData;
@class SentrySession;
@class SentryAttachment;
@class SentryReplayEvent;
@class SentryReplayRecording;
SWIFT_CLASS("_TtC6Sentry18SentryEnvelopeItem")
@interface SentryEnvelopeItem : NSObject
/// The envelope payload.
@property (nonatomic, readonly, copy) NSData * _Nullable data;
- (nonnull instancetype)initWithType:(NSString * _Nonnull)type data:(NSData * _Nullable)data contentType:(NSString * _Nonnull)contentType itemCount:(NSNumber * _Nonnull)itemCount;
- (nonnull instancetype)initWithType:(NSString * _Nonnull)type data:(NSData * _Nullable)data addPlatform:(BOOL)addPlatform;
/// Initializes an envelope item with an event.
- (nonnull instancetype)initWithEvent:(SentryEvent * _Nonnull)event;
/// Initializes an envelope item with a session.
- (nonnull instancetype)initWithSession:(SentrySession * _Nonnull)session;
/// Initializes an envelope item with an attachment.
/// @param attachment The attachment to create the envelope item from.
/// @param maxAttachmentSize The maximum allowed size for the attachment.
/// @return The envelope item or nil if the attachment is too large or cannot be processed.
- (nullable instancetype)initWithAttachment:(SentryAttachment * _Nonnull)attachment maxAttachmentSize:(NSUInteger)maxAttachmentSize;
/// Initializes an envelope item with a client report.
- (nonnull instancetype)initWithClientReport:(SentryClientReport * _Nonnull)clientReport;
/// Initializes an envelope item with replay event and recording data.
- (nullable instancetype)initWithReplayEvent:(SentryReplayEvent * _Nonnull)replayEvent replayRecording:(SentryReplayRecording * _Nonnull)replayRecording video:(NSURL * _Nonnull)video;
- (NSString * _Nonnull)type SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Each item type must have a data category name mapped to it; see SentryDataCategoryMapper
/// While these envelope item types might look similar to the data categories,
/// they are not identical, and have slight differences.
SWIFT_CLASS("_TtC6Sentry23SentryEnvelopeItemTypes")
@interface SentryEnvelopeItemTypes : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull event;)
+ (NSString * _Nonnull)event SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull session;)
+ (NSString * _Nonnull)session SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull feedback;)
+ (NSString * _Nonnull)feedback SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull transaction;)
+ (NSString * _Nonnull)transaction SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull attachment;)
+ (NSString * _Nonnull)attachment SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull clientReport;)
+ (NSString * _Nonnull)clientReport SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull profile;)
+ (NSString * _Nonnull)profile SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull replayVideo;)
+ (NSString * _Nonnull)replayVideo SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull statsd;)
+ (NSString * _Nonnull)statsd SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull profileChunk;)
+ (NSString * _Nonnull)profileChunk SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull log;)
+ (NSString * _Nonnull)log SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull traceMetric;)
+ (NSString * _Nonnull)traceMetric SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Enriches the event context by adding app state information.
SWIFT_PROTOCOL("_TtP6Sentry26SentryEventContextEnricher_")
@protocol SentryEventContextEnricher
/// Enriches the event context dictionary with app state fields (in_foreground and is_active).
/// \param context The current event context dictionary.
///
///
/// returns:
/// The enriched context dictionary with app state information added.
- (NSDictionary<NSString *, id> * _Nonnull)enrichWithAppState:(NSDictionary<NSString *, id> * _Nonnull)context SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry18SentryEventDecoder")
@interface SentryEventDecoder : NSObject
+ (SentryEvent * _Nullable)decodeEventWithJsonData:(NSData * _Nonnull)jsonData SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Options for experimental features that are subject to change or may be removed in future versions.
SWIFT_CLASS("_TtC6Sentry25SentryExperimentalOptions")
@interface SentryExperimentalOptions : NSObject
/// A more reliable way to report unhandled C++ exceptions.
/// This approach hooks into all instances of the <code>__cxa_throw</code> function, which provides a more comprehensive and consistent exception handling across an app’s runtime, regardless of the number of C++ modules or how they’re linked. It helps in obtaining accurate stack traces.
/// note:
/// The mechanism of hooking into <code>__cxa_throw</code> could cause issues with symbolication on iOS due to caching of symbol references.
/// experiment:
/// This is an experimental feature and is therefore disabled by default. We’ll enable it by default in a future major release.
@property (nonatomic) BOOL enableUnhandledCPPExceptionsV2;
/// When enabled, the SDK uses a more efficient mechanism for detecting watchdog terminations.
@property (nonatomic) BOOL enableWatchdogTerminationsV2;
/// Enables network detail capture for Session Replay.
/// When enabled, the SDK can capture request and response headers and bodies for network
/// requests during session replay. You must also configure
/// <code>options.sessionReplay.networkDetailAllowUrls</code> with URL patterns to specify which
/// requests should be captured.
@property (nonatomic) BOOL enableReplayNetworkDetailsCapturing;
/// When enabled, the SDK sends a standalone app start transaction instead of attaching app
/// start data to the first UIViewController transaction.
@property (nonatomic) BOOL enableStandaloneAppStartTracing;
- (void)validateOptions:(NSDictionary<NSString *, id> * _Nullable)options;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Extension point identifiers for common iOS extension types
typedef SWIFT_ENUM(NSInteger, SentryExtensionType, open) {
/// WidgetKit extensions (includes Widgets and Live Activities)
  SentryExtensionTypeWidget = 0,
/// Intents extensions
  SentryExtensionTypeIntent = 1,
/// Action extensions (share, today, etc.)
  SentryExtensionTypeAction = 2,
/// Share extensions
  SentryExtensionTypeShare = 3,
/// Notification Service extensions
  SentryExtensionTypeNotificationService = 4,
};

SWIFT_CLASS("_TtC6Sentry26SentryExtraContextProvider")
@interface SentryExtraContextProvider : NSObject
- (NSDictionary<NSString *, id> * _Nonnull)getExtraContext SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry19SentryExtraPackages")
@interface SentryExtraPackages : NSObject
+ (void)addPackageName:(NSString * _Nullable)name version:(NSString * _Nullable)version;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS_NAMED("SentryFeatureFlagBufferWrapper")
@interface SentryFeatureFlagBufferWrapper : NSObject
+ (SentryFeatureFlagBufferWrapper * _Nonnull)scopeBuffer SWIFT_WARN_UNUSED_RESULT;
+ (SentryFeatureFlagBufferWrapper * _Nonnull)spanBuffer SWIFT_WARN_UNUSED_RESULT;
- (void)removeAll;
- (SentryFeatureFlagBufferWrapper * _Nonnull)copyBuffer SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, id> * _Nullable)serializeForContext SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, id> * _Nonnull)serializeForSpanData SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

enum SentryFeedbackSource : NSInteger;
SWIFT_CLASS("_TtC6Sentry14SentryFeedback")
@interface SentryFeedback : NSObject
@property (nonatomic, readonly, strong) SentryId * _Nonnull eventId;
/// \param associatedEventId The ID for an event you’d like associated with the feedback. 
///
/// \param attachments Attachment objects for any files to include with the feedback. 
///
- (nonnull instancetype)initWithMessage:(NSString * _Nonnull)message name:(NSString * _Nullable)name email:(NSString * _Nullable)email source:(enum SentryFeedbackSource)source associatedEventId:(SentryId * _Nullable)associatedEventId attachments:(NSArray<SentryAttachment *> * _Nullable)attachments OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

typedef SWIFT_ENUM(NSInteger, SentryFeedbackSource, open) {
  SentryFeedbackSourceWidget = 0,
  SentryFeedbackSourceCustom = 1,
};

@interface SentryFeedback (SWIFT_EXTENSION(Sentry)) <SentrySerializable>
@end

@interface SentryFeedback (SWIFT_EXTENSION(Sentry))
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
@end

@interface SentryFeedback (SWIFT_EXTENSION(Sentry))
/// Returns all attachments for inclusion in the feedback envelope.
- (NSArray<SentryAttachment *> * _Nonnull)attachmentsForEnvelope SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry18SentryFileContents")
@interface SentryFileContents : NSObject
@property (nonatomic, readonly, copy) NSString * _Nonnull path;
@property (nonatomic, readonly, copy) NSData * _Nonnull contents;
- (nonnull instancetype)initWithPath:(NSString * _Nonnull)path contents:(NSData * _Nonnull)contents OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry19SentryFileIOTracker")
@interface SentryFileIOTracker : NSObject
- (nonnull instancetype)initWithThreadInspector:(SentryThreadInspector * _Nonnull)threadInspector processInfoWrapper:(id <SentryProcessInfoSource> _Nonnull)processInfoWrapper OBJC_DESIGNATED_INITIALIZER;
- (void)enable;
- (void)disable;
- (BOOL)measureNSData:(NSData * _Nonnull)data writeToFile:(NSString * _Nonnull)path atomically:(BOOL)atomically origin:(NSString * _Nonnull)origin method:(BOOL (^ _Nonnull)(NSString * _Nonnull, BOOL))method;
- (BOOL)measureNSData:(NSData * _Nonnull)data writeToFile:(NSString * _Nonnull)path options:(NSDataWritingOptions)writeOptionsMask origin:(NSString * _Nonnull)origin error:(NSError * _Nullable * _Nullable)error method:(BOOL (^ _Nonnull)(NSString * _Nonnull, NSDataWritingOptions, NSError * _Nullable * _Nullable))method;
- (NSData * _Nullable)measureNSDataFromFile:(NSString * _Nonnull)path origin:(NSString * _Nonnull)origin method:(NSData * _Nullable (^ _Nonnull)(NSString * _Nonnull))method SWIFT_WARN_UNUSED_RESULT;
- (NSData * _Nullable)measureNSDataFromFile:(NSString * _Nonnull)path options:(NSDataReadingOptions)readOptionsMask origin:(NSString * _Nonnull)origin error:(NSError * _Nullable * _Nullable)error method:(NSData * _Nullable (^ _Nonnull)(NSString * _Nonnull, NSDataReadingOptions, NSError * _Nullable * _Nullable))method SWIFT_WARN_UNUSED_RESULT;
- (NSData * _Nullable)measureNSDataFromURL:(NSURL * _Nonnull)url options:(NSDataReadingOptions)readOptionsMask origin:(NSString * _Nonnull)origin error:(NSError * _Nullable * _Nullable)error method:(NSData * _Nullable (^ _Nonnull)(NSURL * _Nonnull, NSDataReadingOptions, NSError * _Nullable * _Nullable))method SWIFT_WARN_UNUSED_RESULT;
- (BOOL)measureNSFileManagerCreateFileAtPath:(NSString * _Nonnull)path data:(NSData * _Nonnull)data attributes:(NSDictionary<NSFileAttributeKey, id> * _Nonnull)attributes origin:(NSString * _Nonnull)origin method:(BOOL (^ _Nonnull)(NSString * _Nonnull, NSData * _Nonnull, NSDictionary<NSFileAttributeKey, id> * _Nonnull))method;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry17SentryFileManager")
@interface SentryFileManager : NSObject
@property (nonatomic, copy) void (^ _Nullable envelopeDeletedCallback)(SentryEnvelopeItem * _Nonnull, NSUInteger);
@property (nonatomic, readonly, copy) NSString * _Nonnull basePath;
@property (nonatomic, readonly, copy) NSString * _Nonnull sentryPath;
@property (nonatomic, readonly, copy) NSString * _Nonnull breadcrumbsFilePathOne;
@property (nonatomic, readonly, copy) NSString * _Nonnull breadcrumbsFilePathTwo;
@property (nonatomic, readonly, copy) NSString * _Nonnull previousBreadcrumbsFilePathOne;
@property (nonatomic, readonly, copy) NSString * _Nonnull previousBreadcrumbsFilePathTwo;
- (nullable instancetype)initWithOptions:(SentryOptions * _Nullable)options dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider dispatchQueueWrapper:(SentryDispatchQueueWrapper * _Nonnull)dispatchQueueWrapper error:(NSError * _Nullable * _Nullable)error;
- (NSString * _Nullable)storeEnvelope:(SentryEnvelope * _Nonnull)envelope;
- (NSString * _Nullable)getEnvelopesPath:(NSString * _Nonnull)filePath SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryFileContents *> * _Nonnull)getAllEnvelopes SWIFT_WARN_UNUSED_RESULT;
- (SentryFileContents * _Nullable)getOldestEnvelope SWIFT_WARN_UNUSED_RESULT;
- (void)deleteOldEnvelopeItems;
- (void)deleteAllEnvelopes;
- (NSURL * _Nonnull)getSentryPathAsURL SWIFT_WARN_UNUSED_RESULT;
- (void)moveState:(NSString * _Nonnull)stateFilePath toPreviousState:(NSString * _Nonnull)previousStateFilePath;
- (void)storeCurrentSession:(SentrySession * _Nonnull)session;
- (SentrySession * _Nullable)readCurrentSession SWIFT_WARN_UNUSED_RESULT;
- (void)deleteCurrentSession;
- (void)storeCrashedSession:(SentrySession * _Nonnull)session;
- (SentrySession * _Nullable)readCrashedSession SWIFT_WARN_UNUSED_RESULT;
- (void)deleteCrashedSession;
- (void)storeAbnormalSession:(SentrySession * _Nonnull)session;
- (SentrySession * _Nullable)readAbnormalSession SWIFT_WARN_UNUSED_RESULT;
- (void)deleteAbnormalSession;
- (void)storeTimestampLastInForeground:(NSDate * _Nonnull)timestamp;
- (NSDate * _Nullable)readTimestampLastInForeground SWIFT_WARN_UNUSED_RESULT;
- (void)deleteTimestampLastInForeground;
- (void)storeAppState:(SentryAppState * _Nonnull)appState;
- (void)moveAppStateToPreviousAppState;
- (SentryAppState * _Nullable)readAppState SWIFT_WARN_UNUSED_RESULT;
- (SentryAppState * _Nullable)readPreviousAppState SWIFT_WARN_UNUSED_RESULT;
- (void)deleteAppState;
- (void)moveBreadcrumbsToPreviousBreadcrumbs;
- (NSArray * _Nonnull)readPreviousBreadcrumbs SWIFT_WARN_UNUSED_RESULT;
- (NSNumber * _Nullable)readTimezoneOffset SWIFT_WARN_UNUSED_RESULT;
- (void)storeTimezoneOffset:(NSInteger)offset;
- (void)deleteTimezoneOffset;
- (void)storeAppHangEvent:(SentryEvent * _Nonnull)event;
- (SentryEvent * _Nullable)readAppHangEvent SWIFT_WARN_UNUSED_RESULT;
- (BOOL)appHangEventExists SWIFT_WARN_UNUSED_RESULT;
- (void)deleteAppHangEvent;
+ (BOOL)createDirectoryAtPath:(NSString * _Nonnull)path error:(NSError * _Nullable * _Nullable)error;
- (void)deleteAllFolders;
- (void)removeFileAtPath:(NSString * _Nonnull)path;
- (NSArray<NSString *> * _Nonnull)allFilesInFolder:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT;
- (BOOL)isDirectory:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT;
- (NSData * _Nullable)readDataFromPath:(NSString * _Nonnull)path error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (BOOL)writeData:(NSData * _Nonnull)data toPath:(NSString * _Nonnull)toPath;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry25SentryFileManagerProtocol_")
@protocol SentryFileManagerProtocol
- (void)moveState:(NSString * _Nonnull)stateFilePath toPreviousState:(NSString * _Nonnull)previousStateFilePath;
- (NSData * _Nullable)readDataFromPath:(NSString * _Nonnull)path error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (BOOL)writeData:(NSData * _Nonnull)data toPath:(NSString * _Nonnull)path;
- (void)removeFileAtPath:(NSString * _Nonnull)path;
- (NSURL * _Nonnull)getSentryPathAsURL SWIFT_WARN_UNUSED_RESULT;
@end

@interface SentryFileManager (SWIFT_EXTENSION(Sentry)) <SentryFileManagerProtocol>
@end

SWIFT_CLASS("_TtC6Sentry18SentryFrameRemover")
@interface SentryFrameRemover : NSObject
/// Removes Sentry SDK frames until a frame from a different package is found.
/// @discussion When a user includes Sentry as a static library, the package is the same as the
/// application. Therefore removing frames with a package containing “sentry” doesn’t work. We can’t
/// look into the function name as in release builds, the function name can be obfuscated, or we
/// remove functions that are not from this SDK and contain “sentry”. Therefore this logic only works
/// for apps including Sentry dynamically.
+ (NSArray<SentryFrame *> * _Nonnull)removeNonSdkFrames:(NSArray<SentryFrame *> * _Nonnull)frames SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry26SentryFramesDelayResultSPI")
@interface SentryFramesDelayResultSPI : NSObject
@property (nonatomic, readonly) CFTimeInterval delayDuration;
@property (nonatomic, readonly) NSUInteger framesContributingToDelayCount;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry26SentryGlobalEventProcessor")
@interface SentryGlobalEventProcessor : NSObject
- (void)addEventProcessor:(SentryEvent * _Nullable (^ _Nonnull)(SentryEvent * _Nonnull))newProcessor;
- (SentryEvent * _Nullable)reportAll:(SentryEvent * _Nonnull)event;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry32SentryHangTrackerIntegrationObjC")
@interface SentryHangTrackerIntegrationObjC : NSObject
- (void)pauseAppHangTracking;
- (void)resumeAppHangTracking;
- (void)uninstall;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// HTTP status codes used by the Sentry SDK.
/// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status
typedef SWIFT_ENUM_NAMED(NSInteger, SentryHttpStatusCode, "SentryHttpStatusCode", open) {
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200
  SentryHttpStatusCodeOk = 200,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/201
  SentryHttpStatusCodeCreated = 201,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400
  SentryHttpStatusCodeBadRequest = 400,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/412
  SentryHttpStatusCodePreconditionFailed = 412,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/413
  SentryHttpStatusCodeContentTooLarge = 413,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429
  SentryHttpStatusCodeTooManyRequests = 429,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500
  SentryHttpStatusCodeInternalServerError = 500,
};

@class NSURLRequest;
/// Logs error messages for HTTP transport failures.
/// See https://develop.sentry.dev/sdk/expected-features/#dealing-with-network-failures
SWIFT_CLASS_NAMED("SentryHttpTransportHttpStatusCodeLogger")
@interface SentryHttpTransportHttpStatusCodeLogger : NSObject
/// Logs an error if the HTTP status code requires specific error messaging.
/// Currently handles HTTP 413 (Content Too Large) by logging envelope size and item types.
+ (void)logHttpResponseErrorWithStatusCode:(NSInteger)statusCode envelope:(SentryEnvelope * _Nonnull)envelope request:(NSURLRequest * _Nonnull)request;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@protocol SentrySpan;
@class SentryTransactionContext;
@class SentryLogger;
@class SentryUser;
/// The hub is the central manager for SDK configuration, error capture, and scope management.
SWIFT_CLASS("_TtC6Sentry9SentryHub")
@interface SentryHub : NSObject
/// Initializes a <code>SentryHub</code> with the given client and scope.
/// \param client The client to bind to the hub.
///
/// \param scope The scope to use for the hub.
///
- (nonnull instancetype)initWithClient:(SentryClient * _Nullable)client andScope:(SentryScope * _Nullable)scope OBJC_DESIGNATED_INITIALIZER;
/// Starts a new <code>SentrySession</code>. If there’s a running <code>SentrySession</code>, it ends it before starting the new one.
/// You can use this method in combination with <code>endSession</code> to manually track <code>SentrySession</code>s.
/// The SDK uses <code>SentrySession</code> to inform Sentry about release and project associated project health.
- (void)startSession;
/// Ends the current <code>SentrySession</code>. You can use this method in combination with <code>startSession</code> to
/// manually track <code>SentrySession</code>s. The SDK uses <code>SentrySession</code> to inform Sentry about release and
/// project associated project health.
- (void)endSession;
/// Ends the current session with the given timestamp.
/// \param timestamp The timestamp to end the session with.
///
- (void)endSessionWithTimestamp:(NSDate * _Nonnull)timestamp;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScope:(SentryScope * _Nonnull)scope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScope:(SentryScope * _Nonnull)scope;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScope:(SentryScope * _Nonnull)scope;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScope:(SentryScope * _Nonnull)scope;
/// Captures a new-style user feedback and sends it to Sentry.
/// \param feedback The user feedback to send to Sentry.
///
- (void)captureFeedback:(SentryFeedback * _Nonnull)feedback;
/// Use this method to modify the <code>Scope</code> of the Hub. The SDK uses the <code>Scope</code> to attach
/// contextual data to events.
/// \param callback The callback for configuring the <code>Scope</code> of the Hub.
///
- (void)configureScope:(void (^ _Nonnull)(SentryScope * _Nonnull))callback;
/// Adds a breadcrumb to the <code>Scope</code> of the Hub.
/// \param crumb The <code>Breadcrumb</code> to add to the <code>Scope</code> of the Hub.
///
- (void)addBreadcrumb:(SentryBreadcrumb * _Nonnull)crumb;
/// Returns a client if there is a bound client on the Hub.
- (SentryClient * _Nullable)getClient SWIFT_WARN_UNUSED_RESULT;
/// Returns either the current scope or a new one if it was <code>nil</code>.
@property (nonatomic, readonly, strong) SentryScope * _Nonnull scope;
/// Returns the logger associated with this Hub.
@property (nonatomic, readonly, strong) SentryLogger * _Nonnull logger;
/// Binds a different client to the hub.
- (void)bindClient:(SentryClient * _Nullable)client;
/// Checks if integration is activated.
- (BOOL)hasIntegration:(NSString * _Nonnull)integrationName SWIFT_WARN_UNUSED_RESULT;
/// Checks if a specific Integration (<code>integrationClass</code>) has been installed.
///
/// returns:
/// <code>true</code> if an instance of <code>integrationClass</code> exists within <code>SentryHub.installedIntegrations</code>.
- (BOOL)isIntegrationInstalled:(Class _Nonnull)integrationClass SWIFT_WARN_UNUSED_RESULT;
/// Set user to the <code>Scope</code> of the Hub.
/// \param user The user to set to the <code>Scope</code>.
///
- (void)setUser:(SentryUser * _Nullable)user;
/// Reports to the ongoing <code>UIViewController</code> transaction that the screen contents are fully loaded and displayed,
/// which will create a new span.
- (void)reportFullyDisplayed;
/// Waits synchronously for the SDK to flush out all queued and cached items for up to the specified timeout in seconds.
/// If there is no internet connection, the function returns immediately. The SDK doesn’t dispose the client or the hub.
/// \param timeout The time to wait for the SDK to complete the flush.
///
- (void)flush:(NSTimeInterval)timeout;
/// Calls flush with <code>SentryOptions/shutdownTimeInterval</code>.
- (void)close;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// This class detects whether a framework belongs to the app or not. We differentiate between three
/// different types of frameworks.
/// First, the main executable of the app, which’s name can be retrieved by @c CFBundleExecutable. To
/// mark this framework as “in-app” the caller needs to pass in the @c CFBundleExecutable to
/// @c inAppIncludes.
/// Next, there are private frameworks embedded in the application bundle. Both app supporting
/// frameworks as CocoaLumberJack, Sentry, RXSwift, etc., and frameworks written by the user fall
/// into this category. These frameworks can be both “in-app” or not. As we expect most frameworks of
/// this category to be supporting frameworks, we mark them not as “in-app”. If a user wants such a
/// framework to be “in-app”, they need to pass the name into @c inAppIncludes. For dynamic
/// frameworks, the location is usually in the bundle under
/// /Frameworks/FrameworkName.framework/FrameworkName. As for static frameworks, the location is the
/// same as the main executable; this class marks all static frameworks as “in-app”. To remove static
/// frameworks from being “in-app”, Sentry uses stack trace grouping rules on the server.
/// Last, this class marks all public frameworks as not “in-app”. Such frameworks are bound
/// dynamically and are usually located at /Library/Frameworks or ~/Library/Frameworks. For
/// simulators, the location can be something like
/// /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/…
SWIFT_CLASS("_TtC6Sentry16SentryInAppLogic")
@interface SentryInAppLogic : NSObject
/// A list of string prefixes of framework names that belong to the app, stored in lowercase.
@property (nonatomic, readonly, copy) NSArray<NSString *> * _Nonnull inAppIncludes;
/// Initializes @c SentryInAppLogic with @c inAppIncludes.
/// To work properly for Apple applications the @c inAppIncludes should contain the
/// @c CFBundleExecutable, which is the name of the bundle’s executable file.
/// @param inAppIncludes A list of string prefixes of framework names that belong to the app.
- (nonnull instancetype)initWithInAppIncludes:(NSArray<NSString *> * _Nonnull)inAppIncludes OBJC_DESIGNATED_INITIALIZER;
/// Determines if the framework belongs to the app by using @c inAppIncludes.
/// Before checking this method lowercases the strings and uses only the @c lastPathComponent of the
/// @c imagePath.
/// @param imagePath the full path of the binary image.
/// @return @c YES if the framework located at the @c imagePath starts with a prefix of
/// @c inAppIncludes. @c NO if the framework located at the @c imagePath doesn’t start with a prefix of
/// @c inAppIncludes.
- (BOOL)isInApp:(NSString * _Nullable)imagePath SWIFT_WARN_UNUSED_RESULT;
/// Determines if the class belongs to the app by getting its framework and checking with
/// @c -[isInApp:]
/// @param targetClass the class to check.
/// @return @c YES if the @c targetClass belongs to a framework included in @c inAppIncludes.
/// @c NO if targetClass does not belong to a framework in @c inAppIncludes.
- (BOOL)isClassInApp:(Class _Nonnull)targetClass SWIFT_WARN_UNUSED_RESULT;
/// Determines if an image name matches a given in-app include prefix.
/// \param imageName The full path of the binary image.
///
/// \param inAppInclude The prefix to check against.
///
///
/// returns:
/// <code>true</code> if the image name’s last path component starts with the given prefix.
+ (BOOL)isImageNameInApp:(NSString * _Nonnull)imageName inAppInclude:(NSString * _Nonnull)inAppInclude SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Manages the installation ID for the Sentry SDK.
/// The installation ID is a unique identifier for the SDK installation,
/// stored in a file in the cache directory. It’s used to identify the
/// device/installation across app launches.
SWIFT_CLASS("_TtC6Sentry18SentryInstallation")
@interface SentryInstallation : NSObject
/// Returns the installation ID for the given cache directory path.
/// If the installation ID is cached in memory, returns it immediately.
/// Otherwise, reads it from disk or generates a new one if it doesn’t exist.
+ (NSString * _Nonnull)idWithCacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath SWIFT_WARN_UNUSED_RESULT;
/// Returns the installation ID from disk without using the cache.
+ (NSString * _Nullable)idWithCacheDirectoryPathNonCached:(NSString * _Nonnull)cacheDirectoryPath SWIFT_WARN_UNUSED_RESULT;
/// Caches the installation ID asynchronously.
/// This method dispatches the ID retrieval to a background queue to avoid
/// blocking the main thread with file I/O operations.
+ (void)cacheIDAsyncWithCacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath;
/// Returns the cached installation ID if it exists in memory.
+ (NSString * _Nullable)cachedIdWithCacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry25SentryIntegrationProtocol_")
@protocol SentryIntegrationProtocol <NSObject>
- (void)uninstall;
@end

/// Represents the crash status of the last program execution.
/// Use <code>SentrySDK/lastRunStatus</code> to check if the previous app execution
/// terminated with a crash. Before the SDK is fully initialized, the status
/// is <code>unknown</code> because the crash reporter hasn’t loaded its state yet.
/// note:
/// This enum replaces the <code>crashedLastRun</code> boolean property, which
/// could not distinguish between “did not crash” and “not yet known.”
typedef SWIFT_ENUM(NSInteger, SentryLastRunStatus, open) {
/// The SDK hasn’t determined the crash status yet.
/// This is the value returned before <code>SentrySDK/start(configureOptions:)</code>
/// finishes initializing the crash reporter.
  SentryLastRunStatusUnknown = 0,
/// The last program execution did <em>not</em> end with a crash.
  SentryLastRunStatusDidNotCrash = 1,
/// The last program execution ended with a crash.
  SentryLastRunStatusDidCrash = 2,
};

SWIFT_CLASS("_TtC6Sentry17SentryLevelHelper")
@interface SentryLevelHelper : NSObject
+ (NSString * _Nonnull)nameForLevel:(SentryLevel)level SWIFT_WARN_UNUSED_RESULT;
+ (SentryLevel)levelForName:(NSString * _Nullable)name SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Utility class for locale-related functionality.
SWIFT_CLASS("_TtC6Sentry12SentryLocale")
@interface SentryLocale : NSObject
/// Determines if the current locale uses 24-hour time format.
///
/// returns:
/// <code>true</code> if 24-hour format is used, <code>false</code> if 12-hour (AM/PM) format is used.
+ (BOOL)timeIs24HourFormat SWIFT_WARN_UNUSED_RESULT;
/// Determines if the current locale’s language is a right-to-left language.
///
/// returns:
/// <code>true</code> if the language is RTL, <code>false</code> otherwise.
+ (BOOL)isRightToLeftLanguage SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentrySpanId;
enum SentryLogLevel : NSInteger;
/// A structured log entry that captures log data with associated attribute metadata.
/// Use the <code>options.beforeSendLog</code> callback to modify or filter log data.
SWIFT_CLASS("_TtC6Sentry9SentryLog")
@interface SentryLog : NSObject
/// The timestamp when the log event occurred
@property (nonatomic, copy) NSDate * _Nonnull timestamp;
/// The trace ID to associate this log with distributed tracing. This will be set to a valid non-empty value during processing.
@property (nonatomic, strong) SentryId * _Nonnull traceId;
/// The span ID of the span that was active when the log was collected.
@property (nonatomic, strong) SentrySpanId * _Nullable spanId;
/// The severity level of the log entry
@property (nonatomic) enum SentryLogLevel level;
/// The main log message content
@property (nonatomic, copy) NSString * _Nonnull body;
/// A dictionary of structured attributes added to the log entry
@property (nonatomic, copy) NSDictionary<NSString *, SentryAttribute *> * _Nonnull attributes;
/// Numeric representation of the severity level (Int)
@property (nonatomic, strong) NSNumber * _Nullable severityNumber;
/// Creates a log entry with the specified level and message.
/// \param level The severity level of the log entry
///
/// \param body The main log message content
///
- (nonnull instancetype)initWithLevel:(enum SentryLogLevel)level body:(NSString * _Nonnull)body;
/// Creates a log entry with the specified level, message, and attributes.
/// \param level The severity level of the log entry
///
/// \param body The main log message content
///
/// \param attributes A dictionary of structured attributes to add to the log entry
///
- (nonnull instancetype)initWithLevel:(enum SentryLogLevel)level body:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, SentryAttribute *> * _Nonnull)attributes;
/// Adds or updates an attribute in the log entry.
/// \param attribute The attribute value to add
///
/// \param key The key for the attribute
///
- (void)setAttribute:(SentryAttribute * _Nullable)attribute forKey:(NSString * _Nonnull)key;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@interface SentryLog (SWIFT_EXTENSION(Sentry))
@end

/// Represents the severity level of a structured log entry.
/// Log levels are ordered by severity from least (<code>trace</code>) to most severe (<code>fatal</code>).
/// Each level corresponds to a numeric severity value following the OpenTelemetry specification.
typedef SWIFT_ENUM_NAMED(NSInteger, SentryLogLevel, "Level", open) {
/// Trace level for very detailed diagnostic information.
  SentryLogLevelTrace = 0,
/// Debug level for diagnostic information useful during development.
  SentryLogLevelDebug = 1,
/// Info level for general informational messages.
  SentryLogLevelInfo = 2,
/// Warn level for potentially harmful situations.
  SentryLogLevelWarn = 3,
/// Error level for error events that might still allow the application to continue running.
  SentryLogLevelError = 4,
/// Fatal level for severe error events that will presumably lead the application to abort.
  SentryLogLevelFatal = 5,
};

@protocol SentryLoggerDelegate;
/// <code>SentryLogger</code> provides a structured logging interface that captures log entries
/// and sends them to Sentry. Supports multiple log levels (trace, debug, info, warn,
/// error, fatal) and allows attaching arbitrary attributes for enhanced context.
/// <h2>Supported Attribute Types</h2>
/// <ul>
///   <li>
///     <code>String</code>, <code>Bool</code>, <code>Int</code>, <code>Double</code>
///   </li>
///   <li>
///     <code>Float</code> (converted to <code>Double</code>)
///   </li>
///   <li>
///     Other types (converted to string)
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// \code
/// let logger = SentrySDK.logger
/// logger.info("User logged in", attributes: ["userId": "12345"])
/// logger.error("Payment failed", attributes: ["errorCode": 500])
///
/// // Structured string interpolation with automatic type detection
/// logger.info("User \(userId) processed \(count) items with \(percentage)% success")
/// logger.debug("Processing \(itemCount) items, active: \(isActive)")
/// logger.warn("Retry attempt \(currentAttempt) of \(maxAttempts) failed")
///
/// \endcode
SWIFT_CLASS("_TtC6Sentry12SentryLogger")
@interface SentryLogger : NSObject
/// Initializes a logger with the given delegate and date provider.
/// \param delegate The delegate that receives captured log entries.
///
/// \param dateProvider The date provider used to timestamp log entries.
///
- (nonnull instancetype)initWithDelegate:(id <SentryLoggerDelegate> _Nonnull)delegate dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider OBJC_DESIGNATED_INITIALIZER;
/// Logs a trace-level message.
- (void)trace:(NSString * _Nonnull)body;
/// Logs a trace-level message with additional attributes.
- (void)trace:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs a debug-level message.
- (void)debug:(NSString * _Nonnull)body;
/// Logs a debug-level message with additional attributes.
- (void)debug:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs an info-level message.
- (void)info:(NSString * _Nonnull)body;
/// Logs an info-level message with additional attributes.
- (void)info:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs a warning-level message.
- (void)warn:(NSString * _Nonnull)body;
/// Logs a warning-level message with additional attributes.
- (void)warn:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs an error-level message.
- (void)error:(NSString * _Nonnull)body;
/// Logs an error-level message with additional attributes.
- (void)error:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs a fatal-level message.
- (void)fatal:(NSString * _Nonnull)body;
/// Logs a fatal-level message with additional attributes.
- (void)fatal:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// A delegate that receives captured log entries from <code>SentryLogger</code>.
SWIFT_PROTOCOL("_TtP6Sentry20SentryLoggerDelegate_")
@protocol SentryLoggerDelegate
/// Captures a log entry and sends it to Sentry.
/// \param log The log entry to capture.
///
- (void)captureLog:(SentryLog * _Nonnull)log;
@end

@class SentryMeasurementUnit;
SWIFT_CLASS("_TtC6Sentry22SentryMeasurementValue")
@interface SentryMeasurementValue : NSObject
@property (nonatomic, readonly, strong) NSNumber * _Nonnull value;
@property (nonatomic, readonly, strong) SentryMeasurementUnit * _Nullable unit;
- (nonnull instancetype)initWithValue:(NSNumber * _Nonnull)value OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithValue:(NSNumber * _Nonnull)value unit:(SentryMeasurementUnit * _Nonnull)unit OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// For proper statistics in release health, we need to make sure we don’t send session updates
/// without sending a session init first. In other words, we can’t drop a session init. The
/// @c SentryFileManager deletes an envelope once the maximum amount of envelopes is stored. When
/// this happens and the envelope to delete contains a session init we look for the next envelope
/// containing a session update for the same session. If such a session envelope is found we migrate
/// the init flag. If none is found we delete the envelope. We don’t migrate other envelope items as
/// events.
SWIFT_CLASS("_TtC6Sentry24SentryMigrateSessionInit")
@interface SentryMigrateSessionInit : NSObject
/// Checks if the envelope of the passed file path contains an envelope item with a session init. If
/// it does it iterates over all envelopes and looks for a session with the same session id. If such
/// a session is found the init flag is set to @c true, the envelope is updated with keeping other
/// envelope items and headers, and the updated envelope is stored to the disk keeping its path.
/// @param envelope The envelope to delete
/// @param envelopesDirPath The path of the directory where the envelopes are stored.
/// @param envelopeFilePaths An array containing the file paths of envelopes to check if they contain
/// a session init.
/// @return @c true if the function migrated the session init. @c false if not.
+ (BOOL)migrateSessionInit:(SentryEnvelope * _Nullable)envelope envelopesDirPath:(NSString * _Nonnull)envelopesDirPath envelopeFilePaths:(NSArray<NSString *> * _Nonnull)envelopeFilePaths;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry27SentryMobileProvisionParser")
@interface SentryMobileProvisionParser : NSObject
@property (nonatomic, readonly) BOOL mobileProvisionProfileProvisionsAllDevices;
/// Whether the provisioning profile allows debugging (<code>get-task-allow</code> entitlement).
/// Its boolean value determines whether a debugger can attach to the app.
/// Development profiles set this to <code>true</code>; distribution profiles set it to <code>false</code>.
/// See: https://developer.apple.com/library/archive/technotes/tn2415/_index.html
/// See: https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles
@property (nonatomic, readonly) BOOL mobileProvisionProfileAllowsDebugging;
- (nonnull instancetype)init;
- (BOOL)hasEmbeddedMobileProvisionProfile SWIFT_WARN_UNUSED_RESULT;
@end

@class NSTimer;
SWIFT_CLASS("_TtC6Sentry20SentryNSTimerFactory")
@interface SentryNSTimerFactory : NSObject
- (NSTimer * _Nonnull)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^ _Nonnull)(NSTimer * _Nonnull))block;
- (NSTimer * _Nonnull)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id _Nonnull)aTarget selector:(SEL _Nonnull)aSelector userInfo:(id _Nullable)userInfo repeats:(BOOL)yesOrNo;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry25SentryNSURLRequestBuilder")
@interface SentryNSURLRequestBuilder : NSObject
- (NSURLRequest * _Nullable)createEnvelopeRequest:(SentryEnvelope * _Nonnull)envelope dsn:(SentryDsn * _Nonnull)dsn error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (NSURLRequest * _Nullable)createEnvelopeRequest:(SentryEnvelope * _Nonnull)envelope url:(NSURL * _Nonnull)url error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// The Telemetry processor is sitting between the client and transport to efficiently deliver telemetry to Sentry (as of 2026-02-04).
/// Currently used for logs and metrics only; planned to cover all telemetry with buffering, rate limiting, client reports, and priority-based sending.
/// Offline caching is still handled by the transport today, but the long-term goal is to move it here so the transport focuses on sending only.
/// This is an Objective-C compatible subset of the telemetry processor protocol.
/// Use <code>SentryTelemetryProcessor</code> instead when working in Swift, which adds support for
/// Swift-only types like <code>SentryMetric</code>.
/// See dev docs for details (work in progress): https://develop.sentry.dev/sdk/telemetry/telemetry-processor/
SWIFT_PROTOCOL("_TtP6Sentry28SentryObjCTelemetryProcessor_")
@protocol SentryObjCTelemetryProcessor
- (void)addLog:(SentryLog * _Nonnull)log;
/// Forwards buffered telemetry data to the transport for sending.
- (NSTimeInterval)forwardTelemetryData SWIFT_WARN_UNUSED_RESULT;
@end

@class NSPredicate;
/// Used to transform an NSPredicate into a human-friendly string.
/// This class is used for CoreData and omits variable values
/// and doesn’t convert CoreData unsupported instructions.
SWIFT_CLASS("_TtC6Sentry25SentryPredicateDescriptor")
@interface SentryPredicateDescriptor : NSObject
- (NSString * _Nonnull)predicateDescription:(NSPredicate * _Nonnull)predicate SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

enum SentryProfileLifecycle : NSInteger;
/// An object containing configuration for the Sentry profiler.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// If either <code>SentryOptions.profilesSampleRate</code> or <code>SentryOptions.profilesSampler</code> are
/// set to a non-nil value such that transaction-based profiling is being used, these settings
/// will have no effect, nor will <code>SentrySDK.startProfiler()</code> or <code>SentrySDK.stopProfiler()</code>.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
SWIFT_CLASS("_TtC6Sentry20SentryProfileOptions")
@interface SentryProfileOptions : NSObject
/// The mode to use for starting and stopping the profiler, either manually or automatically.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// Default: <code>SentryProfileLifecycleManual</code>.
/// note:
/// If either <code>SentryOptions.profilesSampleRate</code> or <code>SentryOptions.profilesSampler</code> are
/// set to a non-nil value such that transaction-based profiling is being used, then setting
/// this property has no effect.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic) enum SentryProfileLifecycle lifecycle;
/// The % of user sessions in which to enable profiling.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// The decision whether or not to sample profiles is computed using this sample rate
/// when the SDK is started, and applies to any requests to start the profiler–regardless of
/// <code>lifecycle</code>– until the app resigns its active status. It is then reevaluated on subsequent
/// foreground events. The duration of time that a sample decision prevails between
/// launch/foreground and background is referred to as a profile session.
/// note:
/// Backgrounding and foregrounding the app starts a new user session and sampling is
/// re-evaluated. If there is no active trace when the app is backgrounded, profiling stops
/// before the app backgrounds. If there is an active trace and profiling is in-flight when the
/// app is foregrounded again, the same profiling session should continue until the last root
/// span in that trace finishes — this means that the re-evaluated sample rate does not actually
/// take effect until the profiler is started again.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic) float sessionSampleRate;
/// Start the profiler as early as possible during the app lifecycle to capture more activity
/// during your app’s launch.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// <code>sessionSampleRate</code> is evaluated on the previous launch and only takes effect when
/// app start profiling activates on the next launch.
/// note:
/// If <code>lifecycle</code> is <code>manual</code>, profiling is started automatically on startup, but you
/// must manually call <code>SentrySDK.stopProfiler()</code> whenever you app startup to be complete. If
/// <code>lifecycle</code> is <code>trace</code>, profiling is started automatically on startup, and will
/// automatically be stopped when the root span that is associated with app startup ends.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic) BOOL profileAppStarts;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Different modes for starting and stopping the profiler.
typedef SWIFT_ENUM(NSInteger, SentryProfileLifecycle, open) {
/// Profiling is controlled manually, and is independent of transactions & spans. Developers
/// must use<code>SentrySDK.startProfiler()</code> and <code>SentrySDK.stopProfiler()</code> to manage the profile
/// session. If the session is sampled, <code>SentrySDK.startProfiler()</code> will always start
/// profiling.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
  SentryProfileLifecycleManual = 0,
/// Profiling is automatically started when there is at least 1 active root span, and
/// automatically stopped when there are 0 root spans.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// This mode only works if tracing is enabled.
/// note:
/// Profiling respects both <code>SentryProfileOptions.profileSessionSampleRate</code> and
/// the existing sampling configuration for tracing
/// (<code>SentryOptions.tracesSampleRate</code>/<code>SentryOptions.tracesSampler</code>). Sampling will be
/// re-evaluated on a per root span basis.
/// note:
/// If there are multiple overlapping root spans, where some are sampled and some or
/// not, profiling will continue until the end of the last sampled root span. Profiling data
/// will not be linked with spans that are not sampled.
/// note:
/// When the last root span finishes, the profiler will continue running until the
/// end of the current timed interval. If a new root span starts before this interval
/// completes, the profiler will instead continue running until the next root span stops, at
/// which time it will attempt to stop again in the same way.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
  SentryProfileLifecycleTrace = 1,
};

@class SentryTraceHeader;
SWIFT_CLASS("_TtC6Sentry24SentryPropagationContext")
@interface SentryPropagationContext : NSObject
@property (nonatomic, readonly, strong) SentryId * _Nonnull traceId;
@property (nonatomic, readonly, strong) SentryTraceHeader * _Nonnull traceHeader;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithTraceId:(SentryId * _Nonnull)traceId spanId:(SentrySpanId * _Nonnull)spanId OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, NSString *> * _Nonnull)traceContextForEvent SWIFT_WARN_UNUSED_RESULT;
/// Determines whether a trace should be continued based on the incoming baggage org ID
/// and the SDK options.
/// This method is intentionally not called from the Cocoa SDK’s own production code because
/// the Cocoa SDK is a mobile client SDK that does not receive incoming HTTP requests with
/// trace headers. It is exposed as a public utility for:
/// <ul>
///   <li>
///     Hybrid SDKs (React Native, Flutter, Capacitor) that handle inbound trace validation
///     in their JS/Dart layer and use the Cocoa SDK for options storage and outbound propagation
///   </li>
///   <li>
///     Any consumer that needs to validate incoming traces against org ID
///   </li>
/// </ul>
/// Decision matrix:
/// | Baggage org | SDK org | strict=false | strict=true |
/// |———––|———|———––|———––|
/// | 1           | 1       | Continue    | Continue    |
/// | None        | 1       | Continue    | New trace   |
/// | 1           | None    | Continue    | New trace   |
/// | None        | None    | Continue    | Continue    |
/// | 1           | 2       | New trace   | New trace   |
+ (BOOL)shouldContinueTraceWithOptions:(SentryOptions * _Nonnull)options baggageOrgId:(NSString * _Nullable)baggageOrgId SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_PROTOCOL_NAMED("SentryRRWebEventProtocol")
@protocol SentryRRWebEvent <SentrySerializable>
@end

SWIFT_CLASS("_TtC6Sentry16SentryRRWebEvent")
@interface SentryRRWebEvent : NSObject <SentryRRWebEvent>
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nullable data;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry22SentryRRWebCustomEvent")
@interface SentryRRWebCustomEvent : SentryRRWebEvent
@end

SWIFT_CLASS("_TtC6Sentry26SentryRRWebBreadcrumbEvent")
@interface SentryRRWebBreadcrumbEvent : SentryRRWebCustomEvent
- (nonnull instancetype)initWithTimestamp:(NSDate * _Nonnull)timestamp category:(NSString * _Nonnull)category message:(NSString * _Nullable)message data:(NSDictionary<NSString *, id> * _Nullable)data;
- (nonnull instancetype)initWithTimestamp:(NSDate * _Nonnull)timestamp category:(NSString * _Nonnull)category message:(NSString * _Nullable)message level:(SentryLevel)level data:(NSDictionary<NSString *, id> * _Nullable)data OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry20SentryRRWebSpanEvent")
@interface SentryRRWebSpanEvent : SentryRRWebCustomEvent
- (nonnull instancetype)initWithTimestamp:(NSDate * _Nonnull)timestamp endTimestamp:(NSDate * _Nonnull)endTimestamp operation:(NSString * _Nonnull)operation description:(NSString * _Nonnull)description data:(NSDictionary<NSString *, id> * _Nonnull)data OBJC_DESIGNATED_INITIALIZER;
@end

/// Protocol for generating random numbers.
SWIFT_PROTOCOL("_TtP6Sentry20SentryRandomProtocol_")
@protocol SentryRandomProtocol
/// Returns a random number uniformly distributed over the interval [0.0 , 1.0].
- (double)nextNumber SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry12SentryRandom")
@interface SentryRandom : NSObject <SentryRandomProtocol>
/// Returns a random number uniformly distributed over the interval [0.0 , 1.0].
- (double)nextNumber SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry18SentryReachability")
@interface SentryReachability : NSObject
- (void)addObserver:(id <SentryReachabilityObserver> _Nonnull)observer;
- (void)removeObserver:(id <SentryReachabilityObserver> _Nonnull)observer;
- (void)removeAllObservers;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Options for configuring what content should be redacted in session replays.
SWIFT_PROTOCOL("_TtP6Sentry19SentryRedactOptions_")
@protocol SentryRedactOptions
/// Whether all text content should be masked. Defaults to <code>true</code>.
@property (nonatomic, readonly) BOOL maskAllText;
/// Whether all images should be masked. Defaults to <code>true</code>.
@property (nonatomic, readonly) BOOL maskAllImages;
/// Additional view classes that should always be masked.
@property (nonatomic, readonly, copy) NSArray<Class> * _Nonnull maskedViewClasses;
/// View classes that should never be masked, overriding default masking behavior.
@property (nonatomic, readonly, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies.
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing
/// their subtrees to be traversed even if they would otherwise be excluded.
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
@end

SWIFT_CLASS("_TtC6Sentry26SentryRedactDefaultOptions")
@interface SentryRedactDefaultOptions : NSObject <SentryRedactOptions>
@property (nonatomic) BOOL maskAllText;
@property (nonatomic) BOOL maskAllImages;
@property (nonatomic, copy) NSArray<Class> * _Nonnull maskedViewClasses;
@property (nonatomic, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies (e.g., views that activate internal CoreAnimation
/// animations when their layers are accessed).
/// Matching uses partial string containment: if a view’s class name (from <code>type(of: view).description()</code>)
/// contains any of these strings, the subtree will be ignored. For example, “MyView” will match
/// “MyApp.MyView”, “MyViewSubclass”, “Some.MyView.Container”, etc.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing their subtrees
/// to be traversed even if they would otherwise be excluded by default or via <code>excludedViewClasses</code>.
/// Matching uses exact string matching: the view’s class name (from <code>type(of: view).description()</code>)
/// must exactly equal one of these strings. For example, “MyApp.MyView” will only match exactly “MyApp.MyView”,
/// not “MyApp.MyViewSubclass”.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches. For example,
/// if “ChromeCameraUI” is excluded and “Camera” is included, “ChromeCameraUI” will still be excluded
/// because “Camera” doesn’t exactly match “ChromeCameraUI”.
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry31SentryReplayBreadcrumbConverter_")
@protocol SentryReplayBreadcrumbConverter <NSObject>
- (id <SentryRRWebEvent> _Nullable)convertFrom:(SentryBreadcrumb * _Nonnull)breadcrumb SWIFT_WARN_UNUSED_RESULT;
@end

enum SentryReplayType : NSInteger;
SWIFT_CLASS("_TtC6Sentry17SentryReplayEvent")
@interface SentryReplayEvent : SentryEvent
@property (nonatomic, readonly, copy) NSDate * _Nonnull replayStartTimestamp;
@property (nonatomic, readonly) enum SentryReplayType replayType;
/// Number of the segment in the replay.
/// This is an incremental number
@property (nonatomic, readonly) NSInteger segmentId;
/// This will be used to store the name of the screens
/// that appear during the duration of the replay segment.
@property (nonatomic, copy) NSArray<NSString *> * _Nullable urls;
- (nonnull instancetype)initWithEventId:(SentryId * _Nonnull)eventId replayStartTimestamp:(NSDate * _Nonnull)replayStartTimestamp replayType:(enum SentryReplayType)replayType segmentId:(NSInteger)segmentId OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
- (nonnull instancetype)initWithLevel:(SentryLevel)level SWIFT_UNAVAILABLE;
@end

/// Main container for network request/response tracking.
/// ObjC callers (SentryNetworkTracker) create this object and populate it
/// via <code>setRequest</code>/<code>setResponse</code>. Swift callers (SentrySRDefaultBreadcrumbConverter)
/// consume it via <code>serialize()</code>.
/// important:
/// <code>setRequest</code> and <code>setResponse</code> can be called concurrently from
/// <code>SentryNetworkTracker</code> because they write to independent properties.
/// Adding shared mutable state between will require adding synchronization.
SWIFT_CLASS("_TtC6Sentry26SentryReplayNetworkDetails")
@interface SentryReplayNetworkDetails : NSObject
/// Key used to store network details in breadcrumb data dictionary.
/// The __sentry key prefix strips this from event serialization.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull replayNetworkDetailsKey;)
+ (NSString * _Nonnull)replayNetworkDetailsKey SWIFT_WARN_UNUSED_RESULT;
/// Creates a new instance with the given HTTP method.
- (nonnull instancetype)initWithMethod:(NSString * _Nullable)method OBJC_DESIGNATED_INITIALIZER;
/// Sets request details from raw body data.
/// Parses the body data based on content type (JSON, form-urlencoded, text)
/// and applies size limits and truncation warnings automatically.
/// \param size Request body size in bytes, or nil if unknown.
///
/// \param bodyData Raw body bytes, or nil if body capture is disabled or unavailable.
///
/// \param contentType MIME content type for body parsing (e.g. “application/json”).
///
/// \param allHeaders All headers from the request (e.g. from <code>NSURLRequest.allHTTPHeaderFields</code>).
///
/// \param configuredHeaders Header names to extract, matched case-insensitively.
///
- (void)setRequestWithSize:(NSNumber * _Nullable)size bodyData:(NSData * _Nullable)bodyData contentType:(NSString * _Nullable)contentType allHeaders:(NSDictionary<NSString *, id> * _Nullable)allHeaders configuredHeaders:(NSArray<NSString *> * _Nullable)configuredHeaders;
/// Sets response details from raw body data.
/// Parses the body data based on content type (JSON, form-urlencoded, text)
/// and applies size limits and truncation warnings automatically.
/// \param statusCode HTTP status code.
///
/// \param size Response body size in bytes, or nil if unknown.
///
/// \param bodyData Raw body bytes, or nil if body capture is disabled or unavailable.
///
/// \param contentType MIME content type for body parsing (e.g. “application/json”).
///
/// \param allHeaders All headers from the response (e.g. from <code>NSHTTPURLResponse.allHeaderFields</code>).
///
/// \param configuredHeaders Header names to extract, matched case-insensitively.
///
- (void)setResponseWithStatusCode:(NSInteger)statusCode size:(NSNumber * _Nullable)size bodyData:(NSData * _Nullable)bodyData contentType:(NSString * _Nullable)contentType allHeaders:(NSDictionary<NSString *, id> * _Nullable)allHeaders configuredHeaders:(NSArray<NSString *> * _Nullable)configuredHeaders;
/// Serializes to dictionary for inclusion in breadcrumb data.
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

enum SentryReplayQuality : NSInteger;
SWIFT_CLASS("_TtC6Sentry19SentryReplayOptions")
@interface SentryReplayOptions : NSObject <SentryRedactOptions>
/// Indicates the percentage in which the replay for the session will be created.
/// note:
/// The value needs to be <code>>= 0.0</code> and <code><= 1.0</code>. When setting a value out of range the SDK sets it
/// to the default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.sessionSegmentDuration</code> for the default duration of the replay.
/// <ul>
///   <li>
///     Specifying @c 0 means never, @c 1.0 means always.
///   </li>
/// </ul>
@property (nonatomic) float sessionSampleRate;
/// Indicates the percentage in which a 30 seconds replay will be send with error events.
/// note:
/// The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets it
/// to the default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.errorReplayDuration</code> for the default duration of the replay.
/// <ul>
///   <li>
///     Specifying 0 means never, 1.0 means always.
///   </li>
/// </ul>
@property (nonatomic) float onErrorSampleRate;
/// Indicates whether session replay should redact all text in the app
/// by drawing a black rectangle over it.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.maskAllText</code> for the default value.
@property (nonatomic) BOOL maskAllText;
/// Indicates whether session replay should redact all non-bundled image
/// in the app by drawing a black rectangle over it.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.maskAllImages</code> for the default value.
@property (nonatomic) BOOL maskAllImages;
/// Indicates the quality of the replay.
/// The higher the quality, the higher the CPU and bandwidth usage.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.quality</code> for the default value.
@property (nonatomic) enum SentryReplayQuality quality;
/// A list of custom UIView subclasses that need
/// to be masked during session replay.
/// By default Sentry already mask text and image elements from UIKit
/// Every child of a view that is redacted will also be redacted.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.maskedViewClasses</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull maskedViewClasses;
/// A list of custom UIView subclasses to be ignored
/// during masking step of the session replay.
/// The views of given classes will not be redacted but their children may be.
/// This property has precedence over <code>redactViewTypes</code>.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.unmaskedViewClasses</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies (e.g., views that activate internal CoreAnimation
/// animations when their layers are accessed).
/// Matching uses partial string containment: if a view’s class name (from <code>type(of: view).description()</code>)
/// contains any of these strings, the subtree will be ignored. For example, “MyView” will match
/// “MyApp.MyView”, “MyViewSubclass”, “Some.MyView.Container”, etc.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing their subtrees
/// to be traversed even if they would otherwise be excluded by default or via <code>excludedViewClasses</code>.
/// Matching uses exact string matching: the view’s class name (from <code>type(of: view).description()</code>)
/// must exactly equal one of these strings. For example, “MyApp.MyView” will only match exactly “MyApp.MyView”,
/// not “MyApp.MyViewSubclass”.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+
/// by calling <code>includeViewTypeInSubtreeTraversal("CameraUI.ChromeSwiftUIView")</code>.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches. For example,
/// if “ChromeCameraUI” is excluded and “Camera” is included, “ChromeCameraUI” will still be excluded
/// because “Camera” doesn’t exactly match “ChromeCameraUI”.
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
/// Adds a view type pattern to the excluded set, preventing matching views’ subtrees from being traversed.
/// note:
/// This method adds the pattern to <code>excludedViewClasses</code>, which is then combined with
/// default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and filtered by <code>includedViewClasses</code>
/// to produce the final set.
/// \param viewType The view type identifier pattern (as a string) to exclude from subtree traversal.
/// Matching uses partial string containment: if a view’s class name contains this string,
/// the subtree will be ignored. For example, “MyView” will match “MyApp.MyView”,
/// “MyViewSubclass”, etc.
///
- (void)excludeViewTypeFromSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Adds a view type to the included set, allowing its subtree to be traversed.
/// note:
/// This method adds the view type to <code>includedViewClasses</code>, which filters the combined set
/// of default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and <code>excludedViewClasses</code>.
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches.
/// \param viewType The view type identifier (as a string) to include in subtree traversal.
/// Must exactly match the result of <code>type(of: view).description()</code>.
/// For example, “MyApp.MyView” will only match exactly “MyApp.MyView”.
///
- (void)includeViewTypeInSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Alias for <code>enableViewRendererV2</code>.
/// This flag is deprecated and will be removed in a future version.
/// Please use <code>enableViewRendererV2</code> instead.
@property (nonatomic) BOOL enableExperimentalViewRenderer SWIFT_DEPRECATED_MSG("", "enableViewRendererV2");
/// Enables the up to 5x faster new view renderer used by the Session Replay integration.
/// Enabling this flag will reduce the amount of time it takes to render each frame of the session replay on the main thread, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// <em>up to 4-5x faster rendering</em> (reducing <code>~160ms</code> to <code>~36ms</code> per frame) on older devices.
/// experiment:
/// In case you are noticing issues with the new view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>.
/// Eventually, we will remove this feature flag and use the new view renderer by default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.enableViewRendererV2</code> for the default value.
@property (nonatomic) BOOL enableViewRendererV2;
/// Enables up to 5x faster but incomplete view rendering used by the Session Replay integration.
/// Enabling this flag will reduce the amount of time it takes to render each frame of the session replay on the main thread, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// up to <em>5x faster render times</em> (reducing <code>~160ms</code> to <code>~30ms</code> per frame).
/// This flag controls the way the view hierarchy is drawn into a graphics context for the session replay. By default, the view hierarchy is drawn using
/// the <code>UIView.drawHierarchy(in:afterScreenUpdates:)</code> method, which is the most complete way to render the view hierarchy. However,
/// this method can be slow, especially when rendering complex views, therefore enabling this flag will switch to render the underlying <code>CALayer</code> instead.
/// note:
/// This flag can only be used together with <code>enableViewRendererV2</code> with up to 20% faster render times.
/// warning:
/// Rendering the view hiearchy using the <code>CALayer.render(in:)</code> method can lead to rendering issues, especially when using custom views.
/// For complete rendering, it is recommended to set this option to <code>false</code>. In case you prefer performance over completeness, you can
/// set this option to <code>true</code>.
/// experiment:
/// This is an experimental feature and is therefore disabled by default. In case you are noticing issues with the experimental
/// view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>. Eventually, we will
/// mark this feature as stable and remove the experimental flag, but will keep it disabled by default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.enableFastViewRendering</code> for the default value.
@property (nonatomic) BOOL enableFastViewRendering;
/// Whether to capture request and response bodies for allowed URLs.
/// When <code>true</code> (default), bodies will be captured and parsed (JSON bodies are
/// parsed for structured display in the Sentry UI).
/// When <code>false</code>, only headers and metadata will be captured for allowed URLs.
/// Default: <code>true</code>
/// note:
/// This setting only applies when <code>networkDetailAllowUrls</code> is non-empty.
/// note:
/// Bodies are automatically truncated to 150KB to prevent excessive memory usage.
/// note:
/// Requires <code>options.experimental.enableReplayNetworkDetailsCapturing</code> to be <code>true</code>.
@property (nonatomic) BOOL networkCaptureBodies;
/// Request headers to capture for allowed URLs during session replay.
/// Specifies which HTTP request headers should be captured and included in session replay
/// network details. Header matching is case-insensitive (e.g., “content-type”, “Content-Type”,
/// and “CoNtEnT-tYpE” are all equivalent).
/// Default (always included): <code>["Content-Type", "Content-Length", "Accept"]</code>
/// Example:
/// \code
/// options.sessionReplay.networkRequestHeaders = [
///     "Authorization",
///     "User-Agent"
/// ]
///
/// \endcodenote:
/// This setting only applies when <code>networkDetailAllowUrls</code> is non-empty.
/// note:
/// Header names preserve the case seen on the request, not the case specified here.
/// note:
/// Requires <code>options.experimental.enableReplayNetworkDetailsCapturing</code> to be <code>true</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nonnull networkRequestHeaders;
/// Response headers to capture for allowed URLs during session replay.
/// Specifies which HTTP response headers should be captured and included in session replay
/// network details. Header matching is case-insensitive (e.g., “content-type”, “Content-Type”,
/// and “CoNtEnT-tYpE” are all equivalent).
/// Default (always included): <code>["Content-Type", "Content-Length", "Accept"]</code>
/// Example:
/// \code
/// options.sessionReplay.networkResponseHeaders = [
///     "Cache-Control",    // Custom header
///     "Set-Cookie"        // Custom header
/// ]
///
/// \endcodenote:
/// This setting only applies when <code>networkDetailAllowUrls</code> is non-empty.
/// note:
/// Header names preserve the case seen on the response, not the case specified here.
/// note:
/// Requires <code>options.experimental.enableReplayNetworkDetailsCapturing</code> to be <code>true</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nonnull networkResponseHeaders;
/// Defines the quality of the session replay.
/// Higher bit rates better quality, but also bigger files to transfer.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.quality</code> for the default value.
@property (nonatomic, readonly) NSInteger replayBitRate;
/// The scale related to the window size at which the replay will be created
/// note:
/// The scale is used to reduce the size of the replay.
@property (nonatomic, readonly) float sizeScale;
/// Number of frames per second of the replay.
/// The more the havier the process is.
/// The minimum is 1, if set to zero this will change to 1.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.frameRate</code> for the default value.
@property (nonatomic) NSUInteger frameRate;
/// The maximum duration of replays for error events.
@property (nonatomic) NSTimeInterval errorReplayDuration;
/// The maximum duration of the segment of a session replay.
@property (nonatomic) NSTimeInterval sessionSegmentDuration;
/// The maximum duration of a replay session.
/// note:
/// See  <code>SentryReplayOptions.DefaultValues.maximumDuration</code> for the default value.
@property (nonatomic) NSTimeInterval maximumDuration;
/// Determines if network detail capture is enabled for a given URL.
/// \param urlString The URL string to check
///
///
/// returns:
/// <code>true</code> if network details should be captured for this URL, <code>false</code> otherwise
- (BOOL)isNetworkDetailCaptureEnabledFor:(NSString * _Nonnull)urlString SWIFT_WARN_UNUSED_RESULT;
/// Initialize session replay options disabled
/// note:
/// This initializer is added for Objective-C compatibility, as constructors with default values
/// are not supported in Objective-C.
/// note:
/// See <code>SentryReplayOptions.DefaultValues</code> for the default values of each parameter.
- (nonnull instancetype)init;
/// Initializes a new instance of <code>SentryReplayOptions</code> using a dictionary.
/// warning:
/// This initializer is primarily used by Hybrid SDKs and is not intended for public use.
/// \param dictionary A dictionary containing the configuration options for the session replay.
///
- (nonnull instancetype)initWithDictionary:(NSDictionary<NSString *, id> * _Nonnull)dictionary;
/// Initializes a new instance of <code>SentryReplayOptions</code> with the specified parameters.
/// note:
/// See <code>SentryReplayOptions.DefaultValues</code> for the default values of each parameter.
/// \param sessionSampleRate Sample rate used to determine the percentage of replays of sessions that will be uploaded.
///
/// \param onErrorSampleRate Sample rate used to determine the percentage of replays of error events that will be uploaded.
///
/// \param maskAllText Flag to redact all text in the app by drawing a rectangle over it.
///
/// \param maskAllImages Flag to redact all images in the app by drawing a rectangle over it.
///
/// \param enableViewRendererV2 Enables the up to 5x faster view renderer.
///
/// \param enableFastViewRendering Enables faster but incomplete view rendering. See <code>SentryReplayOptions.enableFastViewRendering</code> for more information.
///
- (nonnull instancetype)initWithSessionSampleRate:(float)sessionSampleRate onErrorSampleRate:(float)onErrorSampleRate maskAllText:(BOOL)maskAllText maskAllImages:(BOOL)maskAllImages enableViewRendererV2:(BOOL)enableViewRendererV2 enableFastViewRendering:(BOOL)enableFastViewRendering;
@end

/// Enum to define the quality of the session replay.
typedef SWIFT_ENUM(NSInteger, SentryReplayQuality, open) {
/// Video Scale: 80%
/// Bit Rate: 20.000
  SentryReplayQualityLow = 0,
/// Video Scale: 100%
/// Bit Rate: 40.000
  SentryReplayQualityMedium = 1,
/// Video Scale: 100%
/// Bit Rate: 60.000
  SentryReplayQualityHigh = 2,
};

@class SentryVideoInfo;
SWIFT_CLASS("_TtC6Sentry21SentryReplayRecording")
@interface SentryReplayRecording : NSObject
- (nonnull instancetype)initWithSegmentId:(NSInteger)segmentId video:(SentryVideoInfo * _Nonnull)video extraEvents:(NSArray<id <SentryRRWebEvent>> * _Nonnull)extraEvents;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

typedef SWIFT_ENUM(NSInteger, SentryReplayType, open) {
  SentryReplayTypeSession = 0,
  SentryReplayTypeBuffer = 1,
};

/// The main entry point for the Sentry SDK.
/// We recommend using <code>start(configureOptions:)</code> to initialize Sentry.
SWIFT_CLASS("_TtC6Sentry9SentrySDK")
@interface SentrySDK : NSObject
/// The current active transaction or span bound to the scope.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentrySpan> _Nullable span;)
+ (id <SentrySpan> _Nullable)span SWIFT_WARN_UNUSED_RESULT;
/// Indicates whether the Sentry SDK is enabled.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) BOOL isEnabled;)
+ (BOOL)isEnabled SWIFT_WARN_UNUSED_RESULT;
/// API to access Sentry logs
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryLogger * _Nonnull logger;)
+ (SentryLogger * _Nonnull)logger SWIFT_WARN_UNUSED_RESULT;
/// Inits and configures Sentry (<code>SentryHub</code>, <code>SentryClient</code>) and sets up all integrations. Make sure to
/// set a valid DSN.
/// note:
/// Call this method on the main thread. When calling it from a background thread, the
/// SDK starts on the main thread async.
+ (void)startWithOptions:(SentryOptions * _Nonnull)options;
/// Inits and configures Sentry (<code>SentryHub</code>, <code>SentryClient</code>) and sets up all integrations. Make sure to
/// set a valid DSN.
/// note:
/// Call this method on the main thread. When calling it from a background thread, the
/// SDK starts on the main thread async.
+ (void)startWithConfigureOptions:(void (^ _Nonnull)(SentryOptions * _Nonnull))configureOptions;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event;
/// Captures a manually created event and sends it to Sentry. Only the data in this scope object will
/// be added to the event. The global scope will be ignored.
/// \param event The event to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScope:(SentryScope * _Nonnull)scope;
/// Captures a manually created event and sends it to Sentry. Maintains the global scope but mutates
/// scope data for only this call.
/// \param event The event to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures a manually created event and sends it to Sentry, with a per-call override for
/// attaching all threads with stack traces.
/// \param event The event to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event attachAllThreads:(BOOL)attachAllThreads;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error;
/// Captures an error event and sends it to Sentry. Only the data in this scope object will be added
/// to the event. The global scope will be ignored.
/// \param error The error to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScope:(SentryScope * _Nonnull)scope;
/// Captures an error event and sends it to Sentry. Maintains the global scope but mutates scope data
/// for only this call.
/// \param error The error to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures an error event and sends it to Sentry, with a per-call override for attaching all
/// threads with stack traces.
/// \param error The error to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error attachAllThreads:(BOOL)attachAllThreads;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception;
/// Captures an exception event and sends it to Sentry. Only the data in this scope object will be
/// added to the event. The global scope will be ignored.
/// \param exception The exception to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScope:(SentryScope * _Nonnull)scope;
/// Captures an exception event and sends it to Sentry. Maintains the global scope but mutates scope
/// data for only this call.
/// \param exception The exception to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures an exception event and sends it to Sentry, with a per-call override for attaching
/// all threads with stack traces.
/// \param exception The exception to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception attachAllThreads:(BOOL)attachAllThreads;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message;
/// Captures a message event and sends it to Sentry. Only the data in this scope object will be added
/// to the event. The global scope will be ignored.
/// \param message The message to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScope:(SentryScope * _Nonnull)scope;
/// Captures a message event and sends it to Sentry. Maintains the global scope but mutates scope
/// data for only this call.
/// \param message The message to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures a message event and sends it to Sentry, with a per-call override for attaching all
/// threads with stack traces.
/// \param message The message to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message attachAllThreads:(BOOL)attachAllThreads;
/// Captures user feedback that was manually gathered and sends it to Sentry.
/// warning:
/// This is an experimental feature and may still have bugs.
/// note:
/// If you’d prefer not to build the UI required to gather the feedback from the user,
/// configure the managed form with <code>SentryOptions.configureUserFeedback</code> and present it with
/// <code>SentrySDK.feedback.show()</code>, <code>SentrySDK.FeedbackForm</code>, or SwiftUI’s
/// <code>sentryFeedback(isPresented:)</code>. See https://docs.sentry.io/platforms/apple/user-feedback/
/// for more information.
/// \param feedback The feedback to send to Sentry.
///
+ (void)captureFeedback:(SentryFeedback * _Nonnull)feedback;
/// Adds a <code>Breadcrumb</code> to the current <code>Scope</code> of the current <code>Hub</code>. If the total number of breadcrumbs
/// exceeds the <code>SentryOptions.maxBreadcrumbs</code> the SDK removes the oldest breadcrumb.
/// \param crumb The <code>Breadcrumb</code> to add to the current <code>Scope</code> of the current <code>Hub</code>.
///
+ (void)addBreadcrumb:(SentryBreadcrumb * _Nonnull)crumb;
/// Use this method to modify the current <code>Scope</code> of the current <code>Hub</code>. The SDK uses the <code>Scope</code> to attach
/// contextual data to events.
/// \param callback The callback for configuring the current <code>Scope</code> of the current <code>Hub</code>.
///
+ (void)configureScope:(void (^ _Nonnull)(SentryScope * _Nonnull))callback;
/// Checks if the last program execution terminated with a crash.
/// warning:
/// This property returns <code>false</code> both when the app did not crash <em>and</em> when
/// the crash status is not yet known (before the SDK finishes initialization). Use
/// <code>lastRunStatus</code> instead, which distinguishes between these cases.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) BOOL crashedLastRun SWIFT_DEPRECATED_MSG("Use lastRunStatus instead, which distinguishes between 'did not crash' and 'unknown'.");)
+ (BOOL)crashedLastRun SWIFT_WARN_UNUSED_RESULT;
/// Returns the crash status of the last program execution.
/// Before <code>SentrySDK/start(configureOptions:)</code> finishes initializing the crash reporter,
/// this property returns <code>SentryLastRunStatus/unknown</code>. After initialization it returns
/// either <code>SentryLastRunStatus/didCrash</code> or <code>SentryLastRunStatus/didNotCrash</code>.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) enum SentryLastRunStatus lastRunStatus;)
+ (enum SentryLastRunStatus)lastRunStatus SWIFT_WARN_UNUSED_RESULT;
/// Checks if the SDK detected a start-up crash during SDK initialization.
/// note:
/// The SDK init waits synchronously for up to 5 seconds to flush out events if the app crashes
/// within 2 seconds after the SDK init.
///
/// returns:
/// true if the SDK detected a start-up crash and false if not.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) BOOL detectedStartUpCrash;)
+ (BOOL)detectedStartUpCrash SWIFT_WARN_UNUSED_RESULT;
/// Set <code>user</code> to the current <code>Scope</code> of the current <code>Hub</code>.
/// note:
/// You must start the SDK before calling this method, otherwise it doesn’t set the user.
/// \param user The user to set to the current <code>Scope</code>.
///
+ (void)setUser:(SentryUser * _Nullable)user;
/// Starts a new <code>SentrySession</code>. If there’s a running <code>SentrySession</code>, it ends it before starting the
/// new one. You can use this method in combination with <code>endSession</code> to manually track
/// sessions. The SDK uses <code>SentrySession</code> to inform Sentry about release and project
/// associated project health.
+ (void)startSession;
/// Ends the current <code>SentrySession</code>. You can use this method in combination with <code>startSession</code> to
/// manually track <code>SentrySessions</code>. The SDK uses <code>SentrySession</code> to inform Sentry about release and
/// project associated project health.
+ (void)endSession;
/// This forces a crash, useful to test the <code>SentryCrash</code> integration.
/// note:
/// The SDK can’t report a crash when a debugger is attached. Your application needs to run
/// without a debugger attached to capture the crash and send it to Sentry the next time you launch
/// your application.
+ (void)crash;
/// Reports to the ongoing <code>UIViewController</code> transaction
/// that the screen contents are fully loaded and displayed,
/// which will create a new span.
/// seealso:
///
/// https://docs.sentry.io/platforms/cocoa/performance/instrumentation/automatic-instrumentation/#time-to-full-display
+ (void)reportFullyDisplayed;
/// Pauses sending detected app hangs to Sentry.
/// This method doesn’t close the detection of app hangs. Instead, the app hang detection
/// will ignore detected app hangs until you call <code>resumeAppHangTracking</code>.
+ (void)pauseAppHangTracking;
/// Resumes sending detected app hangs to Sentry.
+ (void)resumeAppHangTracking;
/// Waits synchronously for the SDK to flush out all queued and cached items for up to the specified
/// timeout in seconds. If there is no internet connection, the function returns immediately. The SDK
/// doesn’t dispose the client or the hub.
/// note:
/// This might take slightly longer than the specified timeout if there are many batched logs to capture.
/// \param timeout The time to wait for the SDK to complete the flush.
///
+ (void)flush:(NSTimeInterval)timeout;
/// Closes the SDK, uninstalls all the integrations, and calls <code>flush</code> with
/// <code>SentryOptions.shutdownTimeInterval</code>.
+ (void)close;
/// Start a new continuous profiling session if one is not already running.
/// warning:
/// Continuous profiling mode is experimental and may still contain bugs.
/// note:
/// Unlike transaction-based profiling, continuous profiling does not take into account
/// <code>SentryOptions.profilesSampleRate</code> or <code>SentryOptions.profilesSampler</code>. If either of those
/// options are set, this method does nothing.
/// note:
/// Taking into account the above note, if <code>SentryOptions.configureProfiling</code> is not set,
/// calls to this method will always start a profile if one is not already running.
/// note:
/// If neither <code>SentryOptions.profilesSampleRate</code> nor <code>SentryOptions.profilesSampler</code> are
/// set, and <code>SentryOptions.configureProfiling</code> is set, this method does nothing if the profiling
/// session is not sampled with respect to <code>SentryOptions.profileSessionSampleRate</code>, or if it is
/// sampled but the profiler is already running.
/// note:
/// If neither <code>SentryOptions.profilesSampleRate</code> nor <code>SentryOptions.profilesSampler</code> are
/// set, and <code>SentryOptions.configureProfiling</code> is set, this method does nothing if
/// <code>SentryOptions.profileLifecycle</code> is set to <code>trace</code>. In this scenario, the profiler is
/// automatically started and stopped depending on whether there is an active sampled span, so it is
/// not permitted to manually start profiling.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
/// seealso:
/// https://docs.sentry.io/platforms/apple/guides/ios/profiling/#continuous-profiling
+ (void)startProfiler;
/// Stop a continuous profiling session if there is one ongoing.
/// warning:
/// Continuous profiling mode is experimental and may still contain bugs.
/// note:
/// Does nothing if <code>SentryOptions.profileLifecycle</code> is set to <code>trace</code>.
/// note:
/// Does not immediately stop the profiler. Profiling data is uploaded at regular timed
/// intervals; when the current interval completes, then the profiler stops and the data gathered
/// during that last interval is uploaded.
/// note:
/// If a new call to <code>startProfiler</code> that would start the profiler is made before the last
/// interval completes, the profiler will continue running until another call to stop is made.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
/// seealso:
/// https://docs.sentry.io/platforms/apple/guides/ios/profiling/#continuous-profiling
+ (void)stopProfiler;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryOptions * _Nullable startOption;)
+ (SentryOptions * _Nullable)startOption SWIFT_WARN_UNUSED_RESULT;
+ (void)setStartWith:(SentryOptions * _Nullable)option;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// A note on the thread safety:
/// The methods configure and log don’t use synchronization mechanisms, meaning they aren’t strictly speaking thread-safe.
/// Still, you can use log from multiple threads. The problem is that when you call configure while
/// calling log from multiple threads, you experience a race condition. It can take a bit until all
/// threads know the new config. As the SDK should only call configure once when starting, we do accept
/// this race condition. Adding locks for evaluating the log level for every log invocation isn’t
/// acceptable, as this adds a significant overhead for every log call. Therefore, we exclude SentryLog
/// from the ThreadSanitizer as it produces false positives. The tests call configure multiple times,
/// and the thread sanitizer would surface these race conditions. We accept these race conditions for
/// the log messages in the tests over adding locking for all log messages.
SWIFT_CLASS("_TtC6Sentry12SentrySDKLog")
@interface SentrySDKLog : NSObject
+ (void)logWithMessage:(NSString * _Nonnull)message andLevel:(SentryLevel)level;
/// @return @c YES if the current logging configuration will log statements at the current level,
/// @c NO if not.
+ (BOOL)willLogAtLevel:(SentryLevel)level SWIFT_WARN_UNUSED_RESULT;
/// Sets a custom log output handler. This allows hybrid SDKs (React Native, Flutter, etc.)
/// to intercept SDK log messages and forward them to their respective consoles.
/// note:
/// Exposed through <code>PrivateSentrySDKOnly.setLogOutput</code> for hybrid SDK consumption.
/// \param output A closure to handle log output. If <code>nil</code> is passed (which can happen
/// from Objective-C callers despite nullability annotations), the default <code>print</code> handler is used.
///
+ (void)setOutput:(void (^ _Nullable)(NSString * _Nonnull))output;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry19SentrySDKLogSupport")
@interface SentrySDKLogSupport : NSObject
+ (void)configure:(BOOL)isDebug diagnosticLevel:(SentryLevel)diagnosticLevel;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry34SentrySRDefaultBreadcrumbConverter")
@interface SentrySRDefaultBreadcrumbConverter : NSObject <SentryReplayBreadcrumbConverter>
/// This function will convert the SDK breadcrumbs to session replay breadcrumbs in a format that the front-end understands.
/// Any deviation in the information will cause the breadcrumb or the information itself to be discarded
/// in order to avoid unknown behavior in the front-end.
- (id <SentryRRWebEvent> _Nullable)convertFrom:(SentryBreadcrumb * _Nonnull)breadcrumb SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// A storage class to hold the data associated with a single profiler sample.
SWIFT_CLASS("_TtC6Sentry12SentrySample")
@interface SentrySample : NSObject
@property (nonatomic) uint64_t absoluteTimestamp;
@property (nonatomic) NSTimeInterval absoluteNSDateInterval;
@property (nonatomic, strong) NSNumber * _Nonnull stackIndex;
@property (nonatomic) uint64_t threadID;
@property (nonatomic, copy) NSString * _Nullable queueAddress;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry21SentrySamplerDecision")
@interface SentrySamplerDecision : NSObject
@property (nonatomic, readonly) SentrySampleDecision decision;
@property (nonatomic, readonly, strong) NSNumber * _Nullable sampleRand;
@property (nonatomic, readonly, strong) NSNumber * _Nullable sampleRate;
- (nonnull instancetype)initWithDecision:(SentrySampleDecision)decision forSampleRate:(NSNumber * _Nullable)sampleRate withSampleRand:(NSNumber * _Nullable)sampleRand OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry19SentryScopeObserver_")
@protocol SentryScopeObserver <NSObject>
- (void)setUser:(SentryUser * _Nullable)user;
- (void)setTags:(NSDictionary<NSString *, NSString *> * _Nullable)tags;
- (void)setExtras:(NSDictionary<NSString *, id> * _Nullable)extras;
- (void)setContext:(NSDictionary<NSString *, NSDictionary<NSString *, id> *> * _Nullable)context;
- (void)setTraceContext:(NSDictionary<NSString *, id> * _Nullable)traceContext;
- (void)setDist:(NSString * _Nullable)dist;
- (void)setEnvironment:(NSString * _Nullable)environment;
- (void)setFingerprint:(NSArray<NSString *> * _Nullable)fingerprint;
- (void)setLevel:(SentryLevel)level;
- (void)setAttributes:(NSDictionary<NSString *, id> * _Nullable)attributes;
- (void)addSerializedBreadcrumb:(NSDictionary<NSString *, id> * _Nonnull)serializedBreadcrumb;
- (void)clearBreadcrumbs;
- (void)clear;
@optional
- (void)setCurrentScreen:(NSString * _Nullable)currentScreen;
@end

SWIFT_CLASS("_TtC6Sentry26SentryScopePersistentStore")
@interface SentryScopePersistentStore : NSObject
- (void)moveAllCurrentStateToPreviousState;
- (NSDictionary<NSString *, NSDictionary<NSString *, id> *> * _Nullable)readPreviousContextFromDisk SWIFT_WARN_UNUSED_RESULT;
- (SentryUser * _Nullable)readPreviousUserFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)readPreviousDistFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)readPreviousEnvironmentFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, NSString *> * _Nullable)readPreviousTagsFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, id> * _Nullable)readPreviousExtrasFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSArray<NSString *> * _Nullable)readPreviousFingerprintFromDisk SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry17SentrySdkInfoObjC")
@interface SentrySdkInfoObjC : NSObject
+ (NSDictionary<NSString *, id> * _Nonnull)optionsToDict:(SentryOptions * _Nonnull)options SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry16SentrySdkPackage")
@interface SentrySdkPackage : NSObject
+ (NSDictionary<NSString *, NSString *> * _Nullable)global SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry24SentrySerializationSwift")
@interface SentrySerializationSwift : NSObject
+ (SentrySession * _Nullable)sessionWithData:(NSData * _Nonnull)data SWIFT_WARN_UNUSED_RESULT;
+ (SentryAppState * _Nullable)appStateWithData:(NSData * _Nonnull)data SWIFT_WARN_UNUSED_RESULT;
+ (NSData * _Nullable)dataWithJSONObject:(id _Nonnull)jsonObject SWIFT_WARN_UNUSED_RESULT;
+ (NSData * _Nullable)dataWithEnvelope:(SentryEnvelope * _Nonnull)envelope SWIFT_WARN_UNUSED_RESULT;
+ (NSData * _Nullable)dataWithSession:(SentrySession * _Nonnull)session SWIFT_WARN_UNUSED_RESULT;
+ (SentryEnvelope * _Nullable)envelopeWithData:(NSData * _Nonnull)data SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSUUID;
/// The SDK uses SentrySession to inform Sentry about release and project associated project health.
SWIFT_CLASS("_TtC6Sentry13SentrySession")
@interface SentrySession : NSObject <NSCopying>
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// Designated initializer.
- (nonnull instancetype)initWithReleaseName:(NSString * _Nonnull)releaseName distinctId:(NSString * _Nonnull)distinctId OBJC_DESIGNATED_INITIALIZER;
/// Initializes @c SentrySession from a JSON object.
/// @param jsonObject The @c jsonObject containing the session.
/// @return The @c SentrySession or @c nil if @c jsonObject contains an error.
- (nullable instancetype)initWithJSONObject:(NSDictionary<NSString *, id> * _Nonnull)jsonObject OBJC_DESIGNATED_INITIALIZER;
- (void)endSessionExitedWithTimestamp:(NSDate * _Nonnull)timestamp;
- (void)endSessionCrashedWithTimestamp:(NSDate * _Nonnull)timestamp;
- (void)endSessionAbnormalWithTimestamp:(NSDate * _Nonnull)timestamp;
- (void)incrementErrors;
- (void)setFlagInit;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (id _Nonnull)copyWithZone:(struct _NSZone * _Nullable)zone SWIFT_WARN_UNUSED_RESULT;
@property (nonatomic, readonly, copy) NSUUID * _Nonnull sessionId;
@property (nonatomic, readonly, copy) NSDate * _Nonnull started;
@property (nonatomic) NSUInteger errors;
@property (nonatomic, readonly) NSUInteger sequence;
@property (nonatomic, readonly, copy) NSString * _Nonnull distinctId;
@property (nonatomic, readonly, strong) NSNumber * _Nullable flagInit;
@property (nonatomic, readonly, copy) NSDate * _Nullable timestamp;
@property (nonatomic, readonly, strong) NSNumber * _Nullable duration;
@property (nonatomic, readonly, copy) NSString * _Nullable releaseName;
@property (nonatomic, copy) NSString * _Nullable environment;
@property (nonatomic, copy) NSString * _Nullable abnormalMechanism;
@end

SWIFT_PROTOCOL("_TtP6Sentry21SentrySessionListener_")
@protocol SentrySessionListener
/// Called on the main thread when a session ends.
- (void)sentrySessionEndedWithSession:(SentrySession * _Nonnull)session;
/// Called on the main thread when a session starts.
- (void)sentrySessionStartedWithSession:(SentrySession * _Nonnull)session;
@end

/// Detects shake gestures by swizzling <code>UIWindow.motionEnded(_:with:)</code> on iOS/iPadOS.
/// When a shake gesture is detected, posts a <code>.SentryShakeDetected</code> notification.
/// Use <code>enable()</code> to start detection and <code>disable()</code> to stop it.
/// Swizzling is performed at most once regardless of how many times <code>enable()</code> is called.
/// On non-iOS platforms (macOS, tvOS, watchOS), these methods are no-ops.
SWIFT_CLASS_NAMED("SentryShakeDetector")
@interface SentryShakeDetector : NSObject
/// The notification name posted on shake, exposed for ObjC consumers.
/// In Swift, prefer using <code>.SentryShakeDetected</code> on <code>NSNotification.Name</code> directly.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) NSNotificationName _Nonnull shakeDetectedNotification;)
+ (NSNotificationName _Nonnull)shakeDetectedNotification SWIFT_WARN_UNUSED_RESULT;
/// No-op on non-iOS platforms.
+ (void)enable;
/// No-op on non-iOS platforms.
+ (void)disable;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry31SentrySwiftIntegrationInstaller")
@interface SentrySwiftIntegrationInstaller : NSObject
+ (void)installWith:(SentryOptions * _Nonnull)options;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry29SentrySwizzleClassNameExclude")
@interface SentrySwizzleClassNameExclude : NSObject
+ (BOOL)shouldExcludeClassWithClassName:(NSString * _Nonnull)className swizzleClassNameExcludes:(NSSet<NSString *> * _Nonnull)swizzleClassNameExcludes SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// A wrapper around sysctl for testability.
SWIFT_CLASS("_TtC6Sentry12SentrySysctl")
@interface SentrySysctl : NSObject
/// Returns the time the system was booted with a precision of microseconds.
/// @warning We must not send this information off device because Apple forbids that.
/// We are allowed send the amount of time that has elapsed between events that occurred within the
/// app though. For more information see
/// https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api#4278394.
@property (nonatomic, readonly, copy) NSDate * _Nonnull systemBootTimestamp;
@property (nonatomic, readonly, copy) NSDate * _Nonnull processStartTimestamp;
/// The system time that the process started, as measured in @c SentrySysctl.load, essentially the
/// earliest time we can record a system timestamp, which is the number of nanoseconds since the
/// device booted, which is why we can’t simply convert @c processStartTimestamp to the nanosecond
/// representation of its @c timeIntervalSinceReferenceDate .
@property (nonatomic, readonly) uint64_t runtimeInitSystemTimestamp;
@property (nonatomic, readonly, copy) NSDate * _Nonnull runtimeInitTimestamp;
@property (nonatomic, readonly, copy) NSDate * _Nonnull moduleInitializationTimestamp;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@protocol SentryTelemetryProcessorTransport;
/// Factory for creating telemetry processors.
/// Unlike integrations (e.g., <code>SentryMetricsIntegration</code>), this factory cannot yet use the full dependency injection pattern
/// because the <code>SentryTelemetryProcessorTransport</code> is created in <code>SentryClient</code> (Objective-C) and must be passed in explicitly.
/// <em>Current approach:</em>
/// <ul>
///   <li>
///     Public method: <code>getProcessor(transport:dependencies:)</code> - called from Objective-C with concrete <code>SentryDependencyContainer</code>
///   </li>
///   <li>
///     Internal method: <code>getProcessorInternal(transport:dependencies:)</code> - uses protocol-constrained generics for testability
///   </li>
/// </ul>
/// <em>Future migration path:</em>
/// Once the transport is resolved via DI, we can refactor to match the integration pattern:
/// \code
/// init?(transport: SentryTelemetryProcessorTransport, dependencies: Dependencies)
///
/// \endcodeThe internal method is already structured to make this transition straightforward.
SWIFT_CLASS("_TtC6Sentry31SentryTelemetryProcessorFactory")
@interface SentryTelemetryProcessorFactory : NSObject
+ (id <SentryObjCTelemetryProcessor> _Nonnull)getProcessorWithTransport:(id <SentryTelemetryProcessorTransport> _Nonnull)transport dependencies:(SentryDependencyContainer * _Nonnull)dependencies SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Lightweight transport abstraction used by the telemetry processor to send envelopes.
/// Exists because using the Objective-C <code>SentryTransport</code> adapter directly from Swift pulls in many ObjC dependencies
/// and caused build/compile issues; we only need envelope sending here, so this protocol keeps it minimal.
SWIFT_PROTOCOL("_TtP6Sentry33SentryTelemetryProcessorTransport_")
@protocol SentryTelemetryProcessorTransport
- (void)sendEnvelopeWithEnvelope:(SentryEnvelope * _Nonnull)envelope;
@end

SWIFT_PROTOCOL("_TtP6Sentry22SentryThreadInspecting_")
@protocol SentryThreadInspecting
- (NSArray<SentryThread *> * _Nonnull)getCurrentThreadsWithStackTrace SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)getThreadName:(NSUInteger)thread SWIFT_WARN_UNUSED_RESULT;
@end

@class SentryStacktrace;
SWIFT_CLASS("_TtC6Sentry21SentryThreadInspector")
@interface SentryThreadInspector : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
- (SentryStacktrace * _Nullable)stacktraceForCurrentThreadAsyncUnsafe SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryThread *> * _Nonnull)getCurrentThreadsWithStackTrace SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryThread *> * _Nonnull)getCurrentThreads SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)getThreadName:(NSUInteger)thread SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry19SentryThreadWrapper")
@interface SentryThreadWrapper : NSObject
- (void)sleepForTimeInterval:(NSTimeInterval)timeInterval;
- (void)threadStarted:(NSUUID * _Nonnull)threadID;
- (void)threadFinished:(NSUUID * _Nonnull)threadID;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Describes the source of the transaction name.
/// This is used to indicate how the transaction name was determined, which affects
/// how Sentry processes and groups transactions.
typedef SWIFT_ENUM(NSInteger, SentryTransactionNameSource, open) {
/// The name was set manually by the user.
  kSentryTransactionNameSourceCustom SWIFT_COMPILE_NAME("custom") = 0,
/// The name was derived from the request URL.
  kSentryTransactionNameSourceUrl SWIFT_COMPILE_NAME("url") = 1,
/// The name was derived from a routing framework.
  kSentryTransactionNameSourceRoute SWIFT_COMPILE_NAME("route") = 2,
/// The name was derived from a UI view or screen.
  kSentryTransactionNameSourceView SWIFT_COMPILE_NAME("view") = 3,
/// The name was derived from a UI component.
  kSentryTransactionNameSourceComponent SWIFT_COMPILE_NAME("component") = 4,
/// The name was derived from a background task.
  kSentryTransactionNameSourceTask SWIFT_COMPILE_NAME("sourceTask") = 5,
};

/// Use this protocol to customize the name used in the automatic
/// UIViewController performance tracker, view hierarchy, and breadcrumbs.
SWIFT_PROTOCOL("_TtP6Sentry32SentryUIViewControllerDescriptor_")
@protocol SentryUIViewControllerDescriptor <NSObject>
/// The custom name of the UIViewController
/// that the Sentry SDK uses for transaction names, breadcrumbs, and
/// view hierarchy.
@property (nonatomic, readonly, copy) NSString * _Nonnull sentryName;
@end

SWIFT_CLASS("_TtC6Sentry15SentryVideoInfo")
@interface SentryVideoInfo : NSObject
@property (nonatomic, readonly, copy) NSURL * _Nonnull path;
@property (nonatomic, readonly, copy) NSDate * _Nonnull start;
@property (nonatomic, readonly, copy) NSDate * _Nonnull end;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry27SentryViewScreenshotOptions")
@interface SentryViewScreenshotOptions : NSObject <SentryRedactOptions>
/// Enables the up to 5x faster new view renderer.
/// Enabling this flag will reduce the amount of time it takes to render the screenshot on the main thread, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// <em>up to 4-5x faster rendering</em> (reducing <code>~160ms</code> to <code>~36ms</code>) on older devices.
/// experiment:
/// In case you are noticing issues with the new view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>.
/// Eventually, we will remove this feature flag and use the new view renderer by default.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL enableViewRendererV2;
/// Enables up to 5x faster but incomplete view rendering.
/// Enabling this flag will reduce the amount of time it takes to render the screenshot, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// up to <em>5x faster render times</em> (reducing <code>~160ms</code> to <code>~30ms</code>) on older devices.
/// This flag controls the way the view hierarchy is drawn into a graphics context. By default, the view hierarchy is drawn using
/// the <code>UIView.drawHierarchy(in:afterScreenUpdates:)</code> method, which is the most complete way to render the view hierarchy. However,
/// this method can be slow, especially when rendering complex views, therefore enabling this flag will switch to render the underlying <code>CALayer</code> instead.
/// note:
/// This flag can only be used together with <code>enableViewRendererV2</code> with up to 20% faster render times.
/// warning:
/// Rendering the view hierarchy using the <code>CALayer.render(in:)</code> method can lead to rendering issues, especially when using custom views.
/// For complete rendering, it is recommended to set this option to <code>false</code>. In case you prefer performance over completeness, you can
/// set this option to <code>true</code>.
/// experiment:
/// This is an experimental feature and is therefore disabled by default. In case you are noticing issues with the experimental
/// view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>. Eventually, we will
/// mark this feature as stable and remove the experimental flag, but will keep it disabled by default.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL enableFastViewRendering;
/// Indicates whether the screenshot should redact all non-bundled image
/// in the app by drawing a black rectangle over it.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL maskAllImages;
/// Indicates whether the screenshot should redact all text in the app
/// by drawing a black rectangle over it.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL maskAllText;
/// A list of custom UIView subclasses that need
/// to be masked during the screenshot.
/// By default Sentry already mask text and image elements from UIKit
/// Every child of a view that is redacted will also be redacted.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull maskedViewClasses;
/// A list of custom UIView subclasses to be ignored
/// during masking step of the screenshot.
/// The views of given classes will not be redacted but their children may be.
/// This property has precedence over <code>redactViewTypes</code>.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies (e.g., views that activate internal CoreAnimation
/// animations when their layers are accessed).
/// Matching uses partial string containment: if a view’s class name (from <code>type(of: view).description()</code>)
/// contains any of these strings, the subtree will be ignored. For example, “MyView” will match
/// “MyApp.MyView”, “MyViewSubclass”, “Some.MyView.Container”, etc.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing their subtrees
/// to be traversed even if they would otherwise be excluded by default or via <code>excludedViewClasses</code>.
/// Matching uses exact string matching: the view’s class name (from <code>type(of: view).description()</code>)
/// must exactly equal one of these strings. For example, “MyApp.MyView” will only match exactly “MyApp.MyView”,
/// not “MyApp.MyViewSubclass”.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+
/// by calling <code>includeViewTypeInSubtreeTraversal("CameraUI.ChromeSwiftUIView")</code>.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches. For example,
/// if “ChromeCameraUI” is excluded and “Camera” is included, “ChromeCameraUI” will still be excluded
/// because “Camera” doesn’t exactly match “ChromeCameraUI”.
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
/// Adds a view type pattern to the excluded set, preventing matching views’ subtrees from being traversed.
/// note:
/// This method adds the pattern to <code>excludedViewClasses</code>, which is then combined with
/// default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and filtered by <code>includedViewClasses</code>
/// to produce the final set.
/// \param viewType The view type identifier pattern (as a string) to exclude from subtree traversal.
/// Matching uses partial string containment: if a view’s class name contains this string,
/// the subtree will be ignored. For example, “MyView” will match “MyApp.MyView”,
/// “MyViewSubclass”, etc.
///
- (void)excludeViewTypeFromSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Adds a view type to the included set, allowing its subtree to be traversed.
/// note:
/// This method adds the view type to <code>includedViewClasses</code>, which filters the combined set
/// of default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and <code>excludedViewClasses</code>.
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches.
/// \param viewType The view type identifier (as a string) to include in subtree traversal.
/// Must exactly match the result of <code>type(of: view).description()</code>.
/// For example, “MyApp.MyView” will only match exactly “MyApp.MyView”.
///
- (void)includeViewTypeInSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Initialize screenshot options disabled
/// note:
/// This initializer is added for Objective-C compatibility, as constructors with default values
/// are not supported in Objective-C.
/// note:
/// See <code>SentryViewScreenshotOptions.DefaultValues</code> for the default values of each parameter.
- (nonnull instancetype)init;
/// Initializes a new instance of <code>SentryViewScreenshotOptions</code> with the specified parameters.
/// note:
/// See <code>SentryViewScreenshotOptions.DefaultValues</code> for the default values of each parameter.
/// \param enableViewRendererV2 Enables the up to 5x faster view renderer.
///
/// \param enableFastViewRendering Enables faster but incomplete view rendering. See <code>SentryViewScreenshotOptions.enableFastViewRendering</code> for more information.
///
/// \param maskAllText Flag to redact all text in the app by drawing a rectangle over it.
///
/// \param maskAllImages Flag to redact all images in the app by drawing a rectangle over it.
///
/// \param maskedViewClasses A list of custom UIView subclasses that need to be masked during the screenshot.
///
/// \param unmaskedViewClasses A list of custom UIView subclasses to be ignored during masking step of the screenshot.
///
/// \param excludedViewClasses A set of view type identifiers that should be excluded from subtree traversal.
///
/// \param includedViewClasses A set of view type identifiers that should be included in subtree traversal.
///
- (nonnull instancetype)initWithEnableViewRendererV2:(BOOL)enableViewRendererV2 enableFastViewRendering:(BOOL)enableFastViewRendering maskAllText:(BOOL)maskAllText maskAllImages:(BOOL)maskAllImages maskedViewClasses:(NSArray<Class> * _Nonnull)maskedViewClasses unmaskedViewClasses:(NSArray<Class> * _Nonnull)unmaskedViewClasses excludedViewClasses:(NSSet<NSString *> * _Nonnull)excludedViewClasses includedViewClasses:(NSSet<NSString *> * _Nonnull)includedViewClasses OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
@end

SWIFT_CLASS("_TtC6Sentry44SentryWatchdogTerminationAttributesProcessor")
@interface SentryWatchdogTerminationAttributesProcessor : NSObject
- (void)clear;
- (void)setContext:(NSDictionary<NSString *, NSDictionary<NSString *, id> *> * _Nullable)context;
- (void)setUser:(SentryUser * _Nullable)user;
- (void)setDist:(NSString * _Nullable)dist;
- (void)setEnvironment:(NSString * _Nullable)environment;
- (void)setTags:(NSDictionary<NSString *, NSString *> * _Nullable)tags;
- (void)setExtras:(NSDictionary<NSString *, id> * _Nullable)extras;
- (void)setFingerprint:(NSArray<NSString *> * _Nullable)fingerprint;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry34SentryWatchdogTerminationConstants")
@interface SentryWatchdogTerminationConstants : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ExceptionType;)
+ (NSString * _Nonnull)ExceptionType SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ExceptionValue;)
+ (NSString * _Nonnull)ExceptionValue SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull MechanismType;)
+ (NSString * _Nonnull)MechanismType SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry15SwiftDescriptor")
@interface SwiftDescriptor : NSObject
+ (NSString * _Nonnull)getObjectClassName:(id _Nonnull)object SWIFT_WARN_UNUSED_RESULT;
+ (NSString * _Nullable)getSwiftErrorDescription:(NSError * _Nonnull)error SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSURLSessionTask;
SWIFT_CLASS("_TtC6Sentry20URLSessionTaskHelper")
@interface URLSessionTaskHelper : NSObject
+ (NSString * _Nullable)getGraphQLOperationNameFrom:(NSURLSessionTask * _Nullable)task SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSURLQueryItem;
SWIFT_CLASS("_TtC6Sentry12UrlSanitized")
@interface UrlSanitized : NSObject
@property (nonatomic, readonly, copy) NSString * _Nullable query;
@property (nonatomic, readonly, copy) NSArray<NSURLQueryItem *> * _Nullable queryItems;
@property (nonatomic, readonly, copy) NSString * _Nullable fragment;
- (nonnull instancetype)initWithURL:(NSURL * _Nonnull)url OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, copy) NSString * _Nullable sanitizedUrl;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Global function to finish and save transaction when a crash occurs.
/// This function is called from C crash reporting code.
SWIFT_EXTERN void sentry_finishAndSaveTransaction(void) SWIFT_NOEXCEPT;

/// Recursively sanitizes an NSDictionary, converting non-serializable values to strings.
SWIFT_EXTERN NSDictionary * _Nullable sentry_sanitize_dictionary(NSDictionary * _Nullable dictionary) SWIFT_NOEXCEPT SWIFT_WARN_UNUSED_RESULT;

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

#elif defined(__x86_64__) && __x86_64__
// Generated by Apple Swift version 6.1.2 effective-5.10 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)
#ifndef SENTRY_SWIFT_H
#define SENTRY_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 AppKit;
@import CoreFoundation;
@import Dispatch;
@import Foundation;
@import ObjectiveC;
#endif

#import <Sentry/Sentry.h>

#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="Sentry",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__OBJC__)

@class NSHTTPURLResponse;
/// Parses HTTP responses from the Sentry server for rate limits.
/// When a rate limit is reached, the SDK should stop data transmission
/// until the rate limit has expired.
SWIFT_PROTOCOL_NAMED("RateLimits")
@protocol SentryRateLimits <NSObject>
/// Check if a data category has reached a rate limit.
/// \param category the type e.g. event, error, session, transaction, etc.
///
///
/// returns:
/// <code>true</code> if limit is reached, <code>false</code> otherwise.
- (BOOL)isRateLimitActive:(NSUInteger)category SWIFT_WARN_UNUSED_RESULT;
/// Should be called for each HTTP response of the Sentry server. It checks the response for any
/// communicated rate limits.
/// \param response The response from the server
///
- (void)update:(NSHTTPURLResponse * _Nonnull)response;
@end

@class SentryRetryAfterHeaderParser;
@class SentryRateLimitParser;
@protocol SentryCurrentDateProvider;
/// Parses HTTP responses from the Sentry server for rate limits and stores them
/// in memory. The server can communicate a rate limit either through the 429
/// status code with a “Retry-After” header or through any response with a custom
/// “X-Sentry-Rate-Limits” header. This class is thread safe.
SWIFT_CLASS_NAMED("DefaultRateLimits")
@interface SentryDefaultRateLimits : NSObject <SentryRateLimits>
- (nonnull instancetype)initWithRetryAfterHeaderParser:(SentryRetryAfterHeaderParser * _Nonnull)retryAfterHeaderParser andRateLimitParser:(SentryRateLimitParser * _Nonnull)rateLimitParser currentDateProvider:(id <SentryCurrentDateProvider> _Nonnull)currentDateProvider OBJC_DESIGNATED_INITIALIZER;
/// <code>category: UInt</code> is the unsigned integer representation for SentryDataCategory since we cannot expose
/// functions written in Swift.
- (BOOL)isRateLimitActive:(NSUInteger)category SWIFT_WARN_UNUSED_RESULT;
- (void)update:(NSHTTPURLResponse * _Nonnull)response;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol SentryRandomProtocol;
@class SentryThreadWrapper;
@protocol SentryProcessInfoSource;
@class SentryDispatchQueueWrapper;
@protocol SentryNSNotificationCenterWrapper;
@class SentryBinaryImageCache;
@class SentryDebugImageProvider;
@class SentrySysctl;
@class SentryDefaultCurrentDateProvider;
SWIFT_CLASS_NAMED("Dependencies")
@interface SentryDependencies : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentryRandomProtocol> _Nonnull random;)
+ (id <SentryRandomProtocol> _Nonnull)random SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryThreadWrapper * _Nonnull threadWrapper;)
+ (SentryThreadWrapper * _Nonnull)threadWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;)
+ (id <SentryProcessInfoSource> _Nonnull)processInfoWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryDispatchQueueWrapper * _Nonnull dispatchQueueWrapper;)
+ (SentryDispatchQueueWrapper * _Nonnull)dispatchQueueWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentryNSNotificationCenterWrapper> _Nonnull notificationCenterWrapper;)
+ (id <SentryNSNotificationCenterWrapper> _Nonnull)notificationCenterWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryBinaryImageCache * _Nonnull binaryImageCache;)
+ (SentryBinaryImageCache * _Nonnull)binaryImageCache SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryDebugImageProvider * _Nonnull debugImageProvider;)
+ (SentryDebugImageProvider * _Nonnull)debugImageProvider SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentrySysctl * _Nonnull sysctlWrapper;)
+ (SentrySysctl * _Nonnull)sysctlWrapper SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryDefaultCurrentDateProvider * _Nonnull dateProvider;)
+ (SentryDefaultCurrentDateProvider * _Nonnull)dateProvider SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@interface SentryEvent (SWIFT_EXTENSION(Sentry))
- (BOOL)isMetricKitEvent SWIFT_WARN_UNUSED_RESULT;
@end

@class NSString;
SWIFT_CLASS("_TtC6Sentry19HTTPHeaderSanitizer")
@interface HTTPHeaderSanitizer : NSObject
+ (NSDictionary<NSString *, NSString *> * _Nonnull)sanitizeHeaders:(NSDictionary<NSString *, NSString *> * _Nonnull)headers SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSDate;
/// Parses a string in the format of http date to NSDate. For more details see:
/// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date.
/// SentryHttpDateParser is thread safe.
SWIFT_CLASS_NAMED("HttpDateParser")
@interface SentryHttpDateParser : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (NSDate * _Nullable)dateFromString:(NSString * _Nonnull)string SWIFT_WARN_UNUSED_RESULT;
@end

@class NSNumber;
@protocol SentryObjCRuntimeWrapper;
SWIFT_CLASS("_TtC6Sentry13LoadValidator")
@interface LoadValidator : NSObject
+ (void)checkForDuplicatedSDKWithImageName:(NSString * _Nonnull)imageName imageAddress:(NSNumber * _Nonnull)imageAddress imageSize:(NSNumber * _Nonnull)imageSize objcRuntimeWrapper:(id <SentryObjCRuntimeWrapper> _Nonnull)objcRuntimeWrapper dispatchQueueWrapper:(SentryDispatchQueueWrapper * _Nonnull)dispatchQueueWrapper;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry17SentryApplication_")
@protocol SentryApplication
@property (nonatomic, readonly) BOOL mainThread_isActive;
@end

@interface NSApplication (SWIFT_EXTENSION(Sentry)) <SentryApplication>
@property (nonatomic, readonly) BOOL mainThread_isActive;
@end

@class NSOperationQueue;
@class NSNotification;
SWIFT_PROTOCOL("_TtP6Sentry33SentryNSNotificationCenterWrapper_")
@protocol SentryNSNotificationCenterWrapper
- (void)addObserver:(id _Nonnull)observer selector:(SEL _Nonnull)aSelector name:(NSNotificationName _Nullable)aName object:(id _Nullable)anObject;
- (id <NSObject> _Nonnull)addObserverForName:(NSNotificationName _Nullable)name object:(id _Nullable)obj queue:(NSOperationQueue * _Nullable)queue usingBlock:(void (^ _Nonnull)(NSNotification * _Nonnull))block SWIFT_WARN_UNUSED_RESULT;
- (void)removeObserver:(id _Nonnull)observer name:(NSNotificationName _Nullable)aName object:(id _Nullable)anObject;
- (void)postNotification:(NSNotification * _Nonnull)notification;
@end

@interface NSNotificationCenter (SWIFT_EXTENSION(Sentry)) <SentryNSNotificationCenterWrapper>
@end

@class SentryDsn;
@class SentryLog;
enum SentryLastRunStatus : NSInteger;
@class SentryScope;
@protocol NSURLSessionDelegate;
@class NSURLSession;
@class SentryProfileOptions;
@class SentryHttpStatusCodeRange;
@class SentryExperimentalOptions;
/// Configuration options for the Sentry SDK.
SWIFT_CLASS_NAMED("Options")
@interface SentryOptions : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// The DSN tells the SDK where to send the events to. If this value is not provided, the SDK will
/// not send any events.
@property (nonatomic, copy) NSString * _Nullable dsn;
/// The parsed internal DSN.
@property (nonatomic, strong) SentryDsn * _Nullable parsedDsn;
/// Turns debug mode on or off. If debug is enabled SDK will attempt to print out useful debugging
/// information if something goes wrong.
/// @note Default is @c false.
@property (nonatomic) BOOL debug;
/// Minimum LogLevel to be used if debug is enabled.
/// @note Default is kSentryLevelDebug.
@property (nonatomic) SentryLevel diagnosticLevel;
/// This property will be filled before the event is sent.
@property (nonatomic, copy) NSString * _Nullable releaseName;
/// The distribution of the application.
/// @discussion Distributions are used to disambiguate build or deployment variants of the same
/// release of an application. For example, the dist can be the build number of an Xcode build.
@property (nonatomic, copy) NSString * _Nullable dist;
/// The environment used for events if no environment is set on the current scope.
/// @note Default value is “production”.
@property (nonatomic, copy) NSString * _Nonnull environment;
/// Specifies whether this SDK should send events to Sentry. If set to @c false events will be
/// dropped in the client and not sent to Sentry. Default is @c true.
@property (nonatomic) BOOL enabled;
/// Controls the flush duration when calling SentrySDK/close.
@property (nonatomic) NSTimeInterval shutdownTimeInterval;
/// When enabled, the SDK sends crashes to Sentry.
/// @note Disabling this feature disables the SentryWatchdogTerminationTrackingIntegration,
/// because SentryWatchdogTerminationTrackingIntegration would falsely report every crash as watchdog
/// termination.
/// @note Default value is @c true.
/// @note Crash reporting is automatically disabled if a debugger is attached.
@property (nonatomic) BOOL enableCrashHandler;
/// When enabled, the SDK captures uncaught NSExceptions. As this feature uses swizzling, disabling
/// enableSwizzling also disables this feature.
/// @discussion This option registers the <code>NSApplicationCrashOnExceptions</code> UserDefault,
/// so your macOS application crashes when an uncaught exception occurs. As the Cocoa Frameworks are
/// generally not exception-safe on macOS, we recommend this approach because the application could
/// otherwise end up in a corrupted state.
/// @warning Don’t use this in combination with <code>SentryCrashExceptionApplication</code>. Either enable this
/// feature or use the <code>SentryCrashExceptionApplication</code>. Having both enabled can lead to duplicated
/// reports.
/// @note Default value is @c false.
@property (nonatomic) BOOL enableUncaughtNSExceptionReporting;
/// When enabled, the SDK reports SIGTERM signals to Sentry.
/// It’s crucial for developers to understand that the OS sends a SIGTERM to their app as a prelude
/// to a graceful shutdown, before resorting to a SIGKILL. This SIGKILL, which your app can’t catch
/// or ignore, is a direct order to terminate your app’s process immediately. Developers should be
/// aware that their app can receive a SIGTERM in various scenarios, such as CPU or disk overuse,
/// watchdog terminations, or when the OS updates your app.
/// @note The default value is @c false.
@property (nonatomic) BOOL enableSigtermReporting;
/// How many breadcrumbs do you want to keep in memory?
/// @note Default is 100.
@property (nonatomic) NSUInteger maxBreadcrumbs;
/// When enabled, the SDK adds breadcrumbs for each network request. As this feature uses swizzling,
/// disabling enableSwizzling also disables this feature.
/// @discussion If you want to enable or disable network tracking for performance monitoring, please
/// use enableNetworkTracking instead.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableNetworkBreadcrumbs;
/// The maximum number of envelopes to keep in cache.
/// @note Default is 30.
@property (nonatomic) NSUInteger maxCacheItems;
/// This block can be used to modify the event before it will be serialized and sent.
@property (nonatomic, copy) SentryBeforeSendEventCallback _Nullable beforeSend;
/// Use this callback to drop or modify a span before the SDK sends it to Sentry. Return nil to
/// drop the span.
@property (nonatomic, copy) SentryBeforeSendSpanCallback _Nullable beforeSendSpan;
/// When enabled, the SDK sends logs to Sentry. Logs can be captured using the SentrySDK.logger
/// API, which provides structured logging with attributes.
/// @note Default value is @c false.
@property (nonatomic) BOOL enableLogs;
/// Use this callback to drop or modify a log before the SDK sends it to Sentry. Return nil to
/// drop the log.
@property (nonatomic, copy) SentryLog * _Nullable (^ _Nullable beforeSendLog)(SentryLog * _Nonnull);
/// This block can be used to modify the breadcrumb before it will be serialized and sent.
@property (nonatomic, copy) SentryBeforeBreadcrumbCallback _Nullable beforeBreadcrumb;
/// You can use this callback to decide if the SDK should capture a screenshot or not. Return @c true
/// if the SDK should capture a screenshot, return @c false if not. This callback doesn’t work for
/// crashes.
@property (nonatomic, copy) SentryBeforeCaptureScreenshotCallback _Nullable beforeCaptureScreenshot;
/// You can use this callback to decide if the SDK should capture a view hierarchy or not. Return
/// @c true if the SDK should capture a view hierarchy, return @c false if not. This callback doesn’t
/// work for crashes.
@property (nonatomic, copy) SentryBeforeCaptureScreenshotCallback _Nullable beforeCaptureViewHierarchy;
/// A block called shortly after the initialization of the SDK when the last program execution
/// terminated with a crash.
/// @discussion This callback is only executed once during the entire run of the program to avoid
/// multiple callbacks if there are multiple crash events to send. This can happen when the program
/// terminates with a crash before the SDK can send the crash event. You can look into beforeSend
/// if you prefer a callback for every event.
/// @warning It is not guaranteed that this is called on the main thread.
/// @note Crash reporting is automatically disabled if a debugger is attached.
@property (nonatomic, copy) SentryOnCrashedLastRunCallback _Nullable onCrashedLastRun SWIFT_DEPRECATED_MSG("Use onLastRunStatusDetermined instead, which is called regardless of whether the app crashed.");
/// A block called shortly after the initialization of the SDK when the crash status of the
/// last program execution has been determined.
/// This callback is invoked regardless of whether the app crashed or not:
/// <ul>
///   <li>
///     If the last run ended with a crash, <code>status</code> is <code>SentryLastRunStatus/didCrash</code> and
///     <code>crashEvent</code> contains the crash event.
///   </li>
///   <li>
///     If the last run did <em>not</em> end with a crash, <code>status</code> is
///     <code>SentryLastRunStatus/didNotCrash</code> and <code>crashEvent</code> is <code>nil</code>.
///   </li>
/// </ul>
/// This callback is only executed once per <code>SentrySDK/start(configureOptions:)</code> lifecycle.
/// warning:
/// It is not guaranteed that this is called on the main thread.
/// note:
/// Crashes that occur while a debugger is attached are not recorded.
/// In that case, the callback reports <code>SentryLastRunStatus/didNotCrash</code>
/// even though the app did crash.
@property (nonatomic, copy) void (^ _Nullable onLastRunStatusDetermined)(enum SentryLastRunStatus, SentryEvent * _Nullable);
/// Indicates the percentage of events being sent to Sentry.
/// @discussion Specifying 0 discards all events, 1.0 or nil sends all events, 0.01 collects 1% of
/// all events.
/// @note The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets
/// it to the default of 1.0.
/// @note The default is 1.
@property (nonatomic, strong) NSNumber * _Nullable sampleRate;
/// Whether to enable automatic session tracking or not.
/// @note Default is @c true.
@property (nonatomic) BOOL enableAutoSessionTracking;
/// Whether to attach the top level <code>operationName</code> node of HTTP json requests to HTTP breadcrumbs
/// @note Default is @c false.
@property (nonatomic) BOOL enableGraphQLOperationTracking;
/// Whether to enable Watchdog Termination tracking or not.
/// @note This feature requires the SentryCrashIntegration being enabled, otherwise it would
/// falsely report every crash as watchdog termination.
/// @note Default is @c true.
@property (nonatomic) BOOL enableWatchdogTerminationTracking;
/// The interval to end a session after the App goes to the background.
/// @note The default is 30 seconds.
@property (nonatomic) NSUInteger sessionTrackingIntervalMillis;
/// When enabled, stack traces are automatically attached to all messages logged. Stack traces are
/// always attached to exceptions but when this is set stack traces are also sent with messages.
/// Stack traces are only attached for the current thread.
/// @note This feature is enabled by default.
@property (nonatomic) BOOL attachStacktrace;
/// When enabled, all threads are attached with full stack traces to all captured events.
/// This requires suspending all threads briefly to collect their stack traces.
/// When disabled (the default), only the current thread gets a stack trace.
/// @note <code>attachStacktrace</code> must also be enabled for this to have any effect.
/// @note Default is <code>false</code>.
@property (nonatomic) BOOL attachAllThreads;
/// The maximum size for each attachment in bytes.
/// @note Default is 200 MiB (200 ✕ 1024 ✕ 1024 bytes).
/// @note Please also check the maximum attachment size of relay to make sure your attachments don’t
/// get discarded there:
/// https://docs.sentry.io/product/relay/options/
@property (nonatomic) NSUInteger maxAttachmentSize;
/// When enabled, the SDK sends personal identifiable along with events.
/// @note The default is @c false.
/// @discussion When the user of an event doesn’t contain an IP address, and this flag is @c true, the
/// SDK sets sdk.settings.infer_ip to auto to instruct the server to use the connection IP address as
/// the user address. Due to backward compatibility concerns, Sentry sets sdk.settings.infer_ip to
/// auto out of the box for Cocoa. If you want to stop Sentry from using the connections IP address,
/// you have to enable Prevent Storing of IP Addresses in your project settings in Sentry.
@property (nonatomic) BOOL sendDefaultPii;
/// When enabled, the SDK tracks performance for UIViewController subclasses and HTTP requests
/// automatically. It also measures the app start and slow and frozen frames.
/// @note The default is @c true.
/// @note Performance Monitoring must be enabled for this flag to take effect. See:
/// https://docs.sentry.io/platforms/apple/performance/
@property (nonatomic) BOOL enableAutoPerformanceTracing;
/// WARNING: This is an experimental feature and may still have bugs.
/// When enabled, the SDK finishes the ongoing transaction bound to the scope and links them to the
/// crash event when your app crashes. The SDK skips adding profiles to increase the chance of
/// keeping the transaction.
/// @note The default is @c false.
@property (nonatomic) BOOL enablePersistingTracesWhenCrashing;
/// A block that configures the initial scope when starting the SDK.
/// @discussion The block receives a suggested default scope. You can either configure and return
/// this, or create your own scope instead.
/// @note The default simply returns the passed in scope.
@property (nonatomic, copy) SentryScope * _Nonnull (^ _Nonnull initialScope)(SentryScope * _Nonnull);
/// When enabled, the SDK tracks performance for HTTP requests if auto performance tracking and
/// @c enableSwizzling are enabled.
/// @note The default is @c true.
/// @discussion If you want to enable or disable network breadcrumbs, please use
/// @c enableNetworkBreadcrumbs instead.
@property (nonatomic) BOOL enableNetworkTracking;
/// When enabled, the SDK tracks performance for file IO reads and writes with NSData if auto
/// performance tracking and enableSwizzling are enabled.
/// @note The default is @c true.
@property (nonatomic) BOOL enableFileIOTracing;
/// When enabled, the SDK tracks performance for file IO reads and writes with NSData if auto
/// performance tracking and enableSwizzling are enabled.
/// @note The default is @c true.
@property (nonatomic) BOOL enableDataSwizzling;
/// When enabled, the SDK tracks performance for file IO operations with NSFileManager if auto
/// performance tracking and enableSwizzling are enabled.
/// @note The default is @c false.
@property (nonatomic) BOOL enableFileManagerSwizzling;
/// Indicates the percentage of the tracing data that is collected.
/// @discussion Specifying @c 0 or @c nil discards all trace data, @c 1.0 collects all trace data,
/// @c 0.01 collects 1% of all trace data.
/// @note The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets it
/// to the default.
/// @note The default is @c 0 .
@property (nonatomic, strong) NSNumber * _Nullable tracesSampleRate;
/// A callback to a user defined traces sampler function.
/// @discussion Specifying @c 0 or @c nil discards all trace data, @c 1.0 collects all trace data,
/// @c 0.01 collects 1% of all trace data.
/// @note The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets it
/// to the default of @c 0 .
@property (nonatomic, copy) SentryTracesSamplerCallback _Nullable tracesSampler;
/// If tracing is enabled or not.
/// @discussion @c true if @c tracesSampleRate is > @c 0 and <= @c 1
/// or a @c tracesSampler is set, otherwise @c false.
@property (nonatomic, readonly) BOOL isTracingEnabled;
/// A list of string prefixes of framework names that belong to the app.
/// @note By default, this contains @c CFBundleExecutable to mark it as “in-app”.
@property (nonatomic, readonly, copy) NSArray<NSString *> * _Nonnull inAppIncludes;
/// Adds an item to the list of inAppIncludes.
/// \param inAppInclude The prefix of the framework name.
///
- (void)addInAppInclude:(NSString * _Nonnull)inAppInclude;
/// Set as delegate on the URLSession used for all network data-transfer tasks performed by Sentry.
/// The SDK ignores this option when using urlSession.
@property (nonatomic, weak) id <NSURLSessionDelegate> _Nullable urlSessionDelegate;
/// Use this property so the transport uses this URLSession with your configuration for
/// sending requests to Sentry. If not set, the SDK will create a new URLSession with
/// URLSessionConfiguration.ephemeral.
@property (nonatomic, strong) NSURLSession * _Nullable urlSession;
/// Whether the SDK should use swizzling or not.
/// When turned off the following features are disabled: breadcrumbs for touch events and
/// navigation with UIViewControllers, automatic instrumentation for UIViewControllers,
/// automatic instrumentation for HTTP requests, automatic instrumentation for file IO with
/// NSData, and automatically added sentry-trace header to HTTP requests for distributed tracing.
/// Default is @c true.
@property (nonatomic) BOOL enableSwizzling;
/// A set of class names to ignore for swizzling.
/// The SDK checks if a class name of a class to swizzle contains a class name of this array.
/// For example, if you add MyUIViewController to this list, the SDK excludes the following classes
/// from swizzling: YourApp.MyUIViewController, YourApp.MyUIViewControllerA, MyApp.MyUIViewController.
/// Default is an empty set.
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull swizzleClassNameExcludes;
/// When enabled, the SDK tracks the performance of Core Data operations. It requires enabling
/// performance monitoring. The default is @c true.
/// See: https://docs.sentry.io/platforms/apple/performance/
@property (nonatomic) BOOL enableCoreDataTracing;
/// Configuration for the Sentry profiler.
/// @warning: Continuous profiling is an experimental feature and may still contain bugs.
/// @warning: Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic, copy) void (^ _Nullable configureProfiling)(SentryProfileOptions * _Nonnull);
@property (nonatomic, strong) SentryProfileOptions * _Nullable profiling;
- (BOOL)isContinuousProfilingEnabled SWIFT_WARN_UNUSED_RESULT;
- (BOOL)isProfilingCorrelatedToTraces SWIFT_WARN_UNUSED_RESULT;
/// Whether to send client reports, which contain statistics about discarded events.
/// @note The default is @c true.
/// @see <a href="https://develop.sentry.dev/sdk/client-reports/">https://develop.sentry.dev/sdk/client-reports/</a>
@property (nonatomic) BOOL sendClientReports;
/// When enabled, the SDK tracks when the application stops responding for a specific amount of
/// time defined by the @c appHangTimeoutInterval option.
/// On iOS, tvOS and visionOS, the SDK can differentiate between fully-blocking and non-fully
/// blocking app hangs. Important: this feature can’t differentiate between fully-blocking and
/// non-fully-blocking app hangs on macOS.
/// A fully-blocking app hang is when the main thread is stuck completely, and the app can’t render a
/// single frame. A non-fully-blocking app hang is when the app appears stuck to the user but can still
/// render a few frames. Fully-blocking app hangs are more actionable because the stacktrace shows the
/// exact blocking location on the main thread. As the main thread isn’t completely blocked,
/// non-fully-blocking app hangs can have a stacktrace that doesn’t highlight the exact blocking
/// location.
/// You can use @c enableReportNonFullyBlockingAppHangs to ignore non-fully-blocking app hangs.
/// @note The default is @c true.
/// @note App Hang tracking is automatically disabled if a debugger is attached.
@property (nonatomic) BOOL enableAppHangTracking;
/// The minimum amount of time an app should be unresponsive to be classified as an App Hanging.
/// @note The actual amount may be a little longer.
/// @note Avoid using values lower than 100ms, which may cause a lot of app hangs events being
/// transmitted.
/// @note The default value is 2 seconds.
@property (nonatomic) NSTimeInterval appHangTimeoutInterval;
/// When enabled, the SDK adds breadcrumbs for various system events.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableAutoBreadcrumbTracking;
/// When enabled, the SDK propagates the W3C Trace Context HTTP header traceparent on outgoing HTTP
/// requests.
/// @discussion This is useful when the receiving services only support OTel/W3C propagation. The
/// traceparent header is only sent when this option is @c true and the request matches @c
/// tracePropagationTargets.
/// @note Default value is @c false.
@property (nonatomic) BOOL enablePropagateTraceparent;
/// An array of hosts or regexes that determines if outgoing HTTP requests will get
/// extra @c trace_id and @c baggage headers added.
/// @discussion This array can contain instances of @c NSString which should match the URL (using
/// @c contains ), and instances of @c NSRegularExpression, which will be used to check the whole
/// URL.
/// @note The default value adds the header to all outgoing requests.
/// @see https://docs.sentry.io/platforms/apple/configuration/options/#trace-propagation-targets
@property (nonatomic, copy) NSArray * _Nonnull tracePropagationTargets;
/// When enabled, the SDK captures HTTP Client errors.
/// @note This feature requires @c enableSwizzling enabled as well.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableCaptureFailedRequests;
/// The SDK will only capture HTTP Client errors if the HTTP Response status code is within the
/// defined range.
/// @note Defaults to 500 - 599.
/// SentryHttpStatusCodeRange *defaultHttpStatusCodeRange =
@property (nonatomic, copy) NSArray<SentryHttpStatusCodeRange *> * _Nonnull failedRequestStatusCodes;
/// An array of hosts or regexes that determines if HTTP Client errors will be automatically
/// captured.
/// @discussion This array can contain instances of @c NSString which should match the URL (using
/// @c contains ), and instances of @c NSRegularExpression, which will be used to check the whole
/// URL.
/// @note The default value automatically captures HTTP Client errors of all outgoing requests.
@property (nonatomic, copy) NSArray * _Nonnull failedRequestTargets;
/// Use this feature to enable the Sentry MetricKit integration.
/// @brief When enabled, the SDK sends @c MXDiskWriteExceptionDiagnostic, @c MXCPUExceptionDiagnostic
/// and
/// @c MXHangDiagnostic to Sentry. The SDK supports this feature from iOS 15 and later and macOS 12
/// and later because, on these versions, @c MetricKit delivers diagnostic reports immediately, which
/// allows the Sentry SDK to apply the current data from the scope.
/// @note This feature is disabled by default.
@property (nonatomic) BOOL enableMetricKit;
/// When enabled, the SDK adds the raw MXDiagnosticPayloads as an attachment to the converted
/// SentryEvent. You need to enable @c enableMetricKit for this flag to work.
/// @note Default value is @c false.
@property (nonatomic) BOOL enableMetricKitRawPayload;
/// @warning This is an experimental feature and may still have bugs.
/// @brief By enabling this, every UIViewController tracing transaction will wait
/// for a call to @c SentrySDK.reportFullyDisplayed().
/// @discussion Use this in conjunction with @c enableUIViewControllerTracing.
/// If @c SentrySDK.reportFullyDisplayed() is not called, the transaction will finish
/// automatically after 30 seconds and the <code>Time to full display</code> Span will be
/// finished with @c DeadlineExceeded status.
/// @note Default value is <code>false</code>.
@property (nonatomic) BOOL enableTimeToFullDisplayTracing;
/// This feature is only available from Xcode 13 and from macOS 12.0, iOS 15.0, tvOS 15.0,
/// watchOS 8.0.
/// @warning This is an experimental feature and may still have bugs.
/// @brief Stitches the call to Swift Async functions in one consecutive stack trace.
/// @note Default value is @c false.
@property (nonatomic) BOOL swiftAsyncStacktraces;
/// The path to store SDK data, like events, transactions, profiles, raw crash data, etc. We
/// recommend only changing this when the default, e.g., in security environments, can’t be accessed.
/// @note The default is <code>NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, true)</code>.
@property (nonatomic, copy) NSString * _Nonnull cacheDirectoryPath;
/// Whether to enable Spotlight for local development. For more information see
/// https://spotlightjs.com/.
/// @note Only set this option to @c true while developing, not in production!
@property (nonatomic) BOOL enableSpotlight;
/// The Spotlight URL. Defaults to http://localhost:8969/stream. For more information see
/// https://spotlightjs.com/
@property (nonatomic, copy) NSString * _Nonnull spotlightUrl;
/// If set to <code>true</code>, the SDK will only continue a trace if the organization ID of the incoming
/// trace found in the baggage header matches the organization ID of the current Sentry client.
/// The client’s organization ID is extracted from the DSN or can be set with the <code>orgId</code> option.
/// If the organization IDs do not match, the SDK will start a new trace instead of continuing
/// the incoming one. This is useful to prevent traces of unknown third-party services from being
/// continued in your application.
/// @note Default value is @c false.
@property (nonatomic) BOOL strictTraceContinuation;
/// The organization ID for your Sentry project.
/// The SDK will try to extract the organization ID from the DSN. If it cannot be found, or if
/// you need to override it, you can provide the ID with this option. The organization ID is used
/// for trace propagation and for features like <code>strictTraceContinuation</code>.
@property (nonatomic, copy) NSString * _Nullable orgId;
/// Returns the effective organization ID, preferring the explicit <code>orgId</code> option over the
/// DSN-extracted value.
@property (nonatomic, readonly, copy) NSString * _Nullable effectiveOrgId;
/// Options for experimental features that are subject to change.
@property (nonatomic, strong) SentryExperimentalOptions * _Nonnull experimental;
+ (BOOL)isValidSampleRate:(NSNumber * _Nonnull)rate SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull defaultEnvironment;)
+ (NSString * _Nonnull)defaultEnvironment SWIFT_WARN_UNUSED_RESULT;
/// When enabled, the SDK sends metrics to Sentry. Metrics can be captured using the <code>SentrySDK/metrics</code>
/// API, which allows you to send, view and query counters, gauges and measurements.
/// @note Default value is @c true.
@property (nonatomic) BOOL enableMetrics;
@end

SWIFT_CLASS("_TtC6Sentry27PlaceholderProcessInfoClass")
@interface PlaceholderProcessInfoClass : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry28PlaceholderSentryApplication")
@interface PlaceholderSentryApplication : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry23SentryProcessInfoSource_")
@protocol SentryProcessInfoSource
@property (nonatomic, readonly, copy) NSString * _Nonnull processDirectoryPath;
@property (nonatomic, readonly, copy) NSString * _Nullable processPath;
@property (nonatomic, readonly) NSInteger processorCount;
@property (nonatomic, readonly) NSProcessInfoThermalState thermalState;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, NSString *> * _Nonnull environment;
@property (nonatomic, readonly) BOOL isiOSAppOnMac SWIFT_AVAILABILITY(macos,introduced=12.0);
@property (nonatomic, readonly) BOOL isMacCatalystApp SWIFT_AVAILABILITY(macos,introduced=12.0);
@property (nonatomic, readonly) BOOL isiOSAppOnVisionOS;
@property (nonatomic, readonly) BOOL isLowPowerModeEnabled SWIFT_AVAILABILITY(macos,introduced=12.0);
@end

@interface NSProcessInfo (SWIFT_EXTENSION(Sentry)) <SentryProcessInfoSource>
@property (nonatomic, readonly, copy) NSString * _Nonnull processDirectoryPath;
@property (nonatomic, readonly, copy) NSString * _Nullable processPath;
@property (nonatomic, readonly) BOOL isiOSAppOnVisionOS;
@end

/// Parses the custom X-Sentry-Rate-Limits header.
/// This header exists of a multiple quotaLimits separated by “,”.
/// Each quotaLimit exists of retry_after:categories:scope.
/// retry_after: seconds until the rate limit expires.
/// categories: semicolon separated list of categories. If empty, this limit
/// applies to all categories. scope: This can be ignored by SDKs.
SWIFT_CLASS_NAMED("RateLimitParser")
@interface SentryRateLimitParser : NSObject
- (nonnull instancetype)initWithCurrentDateProvider:(id <SentryCurrentDateProvider> _Nonnull)currentDateProvider OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSNumber *, NSDate *> * _Nonnull)parse:(NSString * _Nonnull)header SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Parses value of HTTP header “Retry-After” which in most cases is sent in
/// combination with HTTP status 429 Too Many Requests.
/// For more details see: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.37
SWIFT_CLASS_NAMED("RetryAfterHeaderParser")
@interface SentryRetryAfterHeaderParser : NSObject
/// Parses the HTTP header into a NSDate.
/// \param retryAfterHeader The header value.
///
///
/// returns:
/// NSDate representation of Retry-After. If the date can’t be parsed nil is returned.
- (NSDate * _Nullable)parse:(NSString * _Nullable)retryAfterHeader SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry22SentryANRStoppedResult")
@interface SentryANRStoppedResult : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol SentryANRTrackerDelegate;
SWIFT_CLASS("_TtC6Sentry16SentryANRTracker")
@interface SentryANRTracker : NSObject
- (void)addListener:(id <SentryANRTrackerDelegate> _Nonnull)listener;
- (void)removeListener:(id <SentryANRTrackerDelegate> _Nonnull)listener;
- (void)clear;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

enum SentryANRType : NSInteger;
/// The  methods are called from a  background thread.
SWIFT_PROTOCOL("_TtP6Sentry24SentryANRTrackerDelegate_")
@protocol SentryANRTrackerDelegate
- (void)anrDetectedWithType:(enum SentryANRType)type;
- (void)anrStoppedWithResult:(SentryANRStoppedResult * _Nullable)result;
@end

typedef SWIFT_ENUM(NSInteger, SentryANRType, open) {
  SentryANRTypeFatalFullyBlocking = 0,
  SentryANRTypeFatalNonFullyBlocking = 1,
  SentryANRTypeFullyBlocking = 2,
  SentryANRTypeNonFullyBlocking = 3,
  SentryANRTypeUnknown = 4,
};

SWIFT_CLASS("_TtC6Sentry23SentryAppHangTypeMapper")
@interface SentryAppHangTypeMapper : NSObject
+ (NSString * _Nonnull)getExceptionTypeWithAnrType:(enum SentryANRType)anrType SWIFT_WARN_UNUSED_RESULT;
+ (NSString * _Nonnull)getFatalExceptionTypeWithNonFatalErrorType:(NSString * _Nonnull)nonFatalErrorType SWIFT_WARN_UNUSED_RESULT;
+ (BOOL)isExceptionTypeAppHangWithExceptionType:(NSString * _Nonnull)exceptionType SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry14SentryAppState")
@interface SentryAppState : NSObject <SentrySerializable>
@property (nonatomic, readonly, copy) NSString * _Nullable releaseName;
@property (nonatomic, readonly, copy) NSString * _Nonnull osVersion;
@property (nonatomic, readonly, copy) NSString * _Nullable vendorId;
@property (nonatomic, readonly) BOOL isDebugging;
/// The boot time of the system rounded down to seconds. As the precision of the serialization is
/// only milliseconds and a precision of seconds is enough we round down to seconds. With this we
/// avoid getting different dates before and after serialization.
/// warning:
/// We must not send this information off device because Apple forbids that.
/// We are allowed send the amount of time that has elapsed between events that occurred within the
/// app though. For more information see
/// https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api#4278394.
@property (nonatomic, readonly, copy) NSDate * _Nonnull systemBootTimestamp;
@property (nonatomic) BOOL isActive;
@property (nonatomic) BOOL wasTerminated;
@property (nonatomic) BOOL isANROngoing;
@property (nonatomic) BOOL isSDKRunning;
- (nonnull instancetype)initWithReleaseName:(NSString * _Nullable)releaseName osVersion:(NSString * _Nonnull)osVersion vendorId:(NSString * _Nullable)vendorId isDebugging:(BOOL)isDebugging systemBootTimestamp:(NSDate * _Nonnull)systemBootTimestamp OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithJSONObject:(NSDictionary<NSString *, id> * _Nonnull)jsonObject OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry21SentryAppStateManager")
@interface SentryAppStateManager : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// A typed attribute that can be attached to structured item entries used by Logs & Metrics
/// <code>Attribute</code> provides a type-safe way to store structured data alongside item messages.
/// Supports String, Bool, Int, and Double types.
/// This class exists primarily for Objective-C compatibility, inheriting from <code>NSObject</code> and
/// using <code>@objcMembers</code> to ensure it can be used from Objective-C code. For Swift code, prefer
/// using the <code>SentryAttributeValue</code> protocol instead, which provides a more idiomatic Swift API
/// and allows you to pass native Swift types (String, Bool, Int, Double, Float, and their arrays)
/// directly without wrapping them in a class instance. This Objective-C-compatible class will be
/// removed in a future major version release.
SWIFT_CLASS("_TtC6Sentry15SentryAttribute")
@interface SentryAttribute : NSObject
/// The type identifier for this attribute
/// Can be any of the following:
/// <ul>
///   <li>
///     <code>string</code>
///   </li>
///   <li>
///     <code>boolean</code>
///   </li>
///   <li>
///     <code>integer</code>
///   </li>
///   <li>
///     <code>double</code>
///   </li>
///   <li>
///     <code>string[]</code>
///   </li>
///   <li>
///     <code>boolean[]</code>
///   </li>
///   <li>
///     <code>integer[]</code>
///   </li>
///   <li>
///     <code>double[]</code>
///   </li>
/// </ul>
@property (nonatomic, readonly, copy) NSString * _Nonnull type;
/// The actual value stored in this attribute
@property (nonatomic, readonly) id _Nonnull value;
/// Creates a string attribute with the specified value.
/// \param value The string value to store in the attribute.
///
- (nonnull instancetype)initWithString:(NSString * _Nonnull)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a boolean attribute with the specified value.
/// \param value The boolean value to store in the attribute.
///
- (nonnull instancetype)initWithBoolean:(BOOL)value OBJC_DESIGNATED_INITIALIZER;
/// Creates an integer attribute with the specified value.
/// \param value The integer value to store in the attribute.
///
- (nonnull instancetype)initWithInteger:(NSInteger)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a double attribute with the specified value.
/// \param value The double value to store in the attribute.
///
- (nonnull instancetype)initWithDouble:(double)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a double attribute from a float value
/// \param value The float value to store in the attribute.
///
- (nonnull instancetype)initWithFloat:(float)value OBJC_DESIGNATED_INITIALIZER;
/// Creates a string array attribute with the specified values.
/// \param values The array of string values to store in the attribute.
///
- (nonnull instancetype)initWithStringArray:(NSArray<NSString *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates a boolean array attribute with the specified values.
/// \param values The array of boolean values to store in the attribute.
///
- (nonnull instancetype)initWithBooleanArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates an integer array attribute with the specified values.
/// \param values The array of integer values to store in the attribute.
///
- (nonnull instancetype)initWithIntegerArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates a double array attribute with the specified values.
/// \param values The array of double values to store in the attribute.
///
- (nonnull instancetype)initWithDoubleArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
/// Creates a double attribute from a float value
/// \param values The array of float values to store in the attribute.
///
- (nonnull instancetype)initWithFloatArray:(NSArray<NSNumber *> * _Nonnull)values OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry26SentryBaggageSerialization")
@interface SentryBaggageSerialization : NSObject
+ (NSString * _Nonnull)encodeDictionary:(NSDictionary<NSString *, NSString *> * _Nonnull)dictionary SWIFT_WARN_UNUSED_RESULT;
+ (NSDictionary<NSString *, NSString *> * _Nonnull)decode:(NSString * _Nonnull)baggage SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryBinaryImageInfo;
/// This class listens to <code>SentryCrashBinaryImageCache</code> to keep a copy of the loaded binaries
/// information in a sorted collection that will be used to symbolicate frames with better
/// performance.
SWIFT_CLASS_NAMED("SentryBinaryImageCache")
@interface SentryBinaryImageCache : NSObject
@property (nonatomic, readonly, copy) NSArray<SentryBinaryImageInfo *> * _Nullable cache;
- (void)start:(BOOL)isDebug;
- (void)stop;
- (void)binaryImageAdded:(char const * _Nullable)imageName vmAddress:(uint64_t)vmAddress address:(uint64_t)address size:(uint64_t)size uuid:(uint8_t const * _Nullable)uuid;
- (SentryBinaryImageInfo * _Nullable)imageByAddress:(uint64_t)address SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS_NAMED("SentryBinaryImageInfo")
@interface SentryBinaryImageInfo : NSObject
@property (nonatomic, copy) NSString * _Nonnull name;
@property (nonatomic, copy) NSString * _Nullable uuid;
@property (nonatomic) uint64_t vmAddress;
@property (nonatomic) uint64_t address;
@property (nonatomic) uint64_t size;
- (nonnull instancetype)initWithName:(NSString * _Nonnull)name uuid:(NSString * _Nullable)uuid vmAddress:(uint64_t)vmAddress address:(uint64_t)address size:(uint64_t)size OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryBreadcrumb;
SWIFT_PROTOCOL("_TtP6Sentry24SentryBreadcrumbDelegate_")
@protocol SentryBreadcrumbDelegate <NSObject>
- (void)addBreadcrumb:(SentryBreadcrumb * _Nonnull)crumb;
@end

SWIFT_CLASS("_TtC6Sentry23SentryBreadcrumbTracker")
@interface SentryBreadcrumbTracker : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry26SentryReachabilityObserver_")
@protocol SentryReachabilityObserver <NSObject>
- (void)connectivityChanged:(BOOL)connected typeDescription:(NSString * _Nonnull)typeDescription;
@end

@interface SentryBreadcrumbTracker (SWIFT_EXTENSION(Sentry)) <SentryReachabilityObserver>
- (void)connectivityChanged:(BOOL)connected typeDescription:(NSString * _Nonnull)typeDescription;
@end

/// A custom byte count formatter that provides locale-independent formatting.
/// We need to have a standard description for byte counts but NSByteCountFormatter
/// does not allow choosing a locale, and the result changes according to the device
/// configuration. With our own formatter we can control the result.
SWIFT_CLASS("_TtC6Sentry24SentryByteCountFormatter")
@interface SentryByteCountFormatter : NSObject
/// Returns a human-readable string representation of the given byte count.
/// \param bytes The number of bytes to format.
///
///
/// returns:
/// A formatted string like “1,024 KB” or “512 MB”.
+ (NSString * _Nonnull)bytesCountDescription:(NSUInteger)bytes SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryId;
@class NSException;
@class SentryFeedback;
/// The Sentry client is responsible for capturing events and sending them to Sentry.
SWIFT_CLASS("_TtC6Sentry12SentryClient")
@interface SentryClient : NSObject
/// Initializes a <code>SentryClient</code>. Pass in a dictionary of options.
/// \param options Options dictionary
///
///
/// returns:
/// An initialized <code>SentryClient</code> or <code>nil</code> if an error occurred.
- (nullable instancetype)initWithOptions:(SentryOptions * _Nonnull)options OBJC_DESIGNATED_INITIALIZER;
/// Indicates whether the client is enabled and will send events to Sentry.
@property (nonatomic, readonly) BOOL isEnabled;
/// The options used to configure this client.
@property (nonatomic, strong) SentryOptions * _Nonnull options;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScope:(SentryScope * _Nonnull)scope;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScope:(SentryScope * _Nonnull)scope;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScope:(SentryScope * _Nonnull)scope;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScope:(SentryScope * _Nonnull)scope;
/// Captures a new-style user feedback and sends it to Sentry.
/// \param feedback The user feedback to send to Sentry.
///
/// \param scope The current scope from which to gather contextual information.
///
- (void)captureFeedback:(SentryFeedback * _Nonnull)feedback withScope:(SentryScope * _Nonnull)scope;
/// Captures a log entry and sends it to Sentry.
/// \param log The log entry to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
- (void)captureLog:(SentryLog * _Nonnull)log withScope:(SentryScope * _Nonnull)scope;
/// Waits synchronously for the SDK to flush out all queued and cached items for up to the specified timeout in seconds.
/// If there is no internet connection, the function returns immediately. The SDK doesn’t dispose the client or the hub.
/// \param timeout The time to wait for the SDK to complete the flush.
///
- (void)flush:(NSTimeInterval)timeout;
/// Disables the client and calls flush with <code>SentryOptions.shutdownTimeInterval</code>.
- (void)close;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryDiscardedEvent;
SWIFT_CLASS("_TtC6Sentry18SentryClientReport")
@interface SentryClientReport : NSObject <SentrySerializable>
- (nonnull instancetype)initWithDiscardedEvents:(NSArray<SentryDiscardedEvent *> * _Nonnull)discardedEvents dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryCrashSwift;
/// Facade that bridges the Sentry SDK layer to the SentryCrash subsystem.
/// <code>SentryCrashBridge</code> is the single entry point through which SentryCrash
/// accesses SDK services. It replaces direct <code>SentryDependencyContainer</code>
/// look-ups inside the crash reporter, keeping the dependency direction
/// one-way: <em>Sentry → SentryCrash</em>, never the reverse.
/// <h2>Isolation boundary</h2>
/// This bridge is the first step toward fully isolating SentryCrash from the
/// SDK. Today the two layers still share a handful of model types (e.g.
/// <code>SentryCrashSwift</code>, notification-center wrappers). Future work will replace
/// those shared types with protocol abstractions so that SentryCrash can be
/// built and tested independently.
/// <h2>Exposed services</h2>
/// | Service                        | Used by SentryCrash for                                 |
/// |––––––––––––––––|———————————————————|
/// | <code>notificationCenterWrapper</code>    | Observing app-lifecycle events (foreground, background)  |
/// | <code>dateProvider</code>                 | Timestamping crash reports and session boundaries        |
/// | <code>crashReporter</code>                | Reading system info, crash state, and launch metadata    |
/// | <code>uncaughtExceptionHandler</code>     | Installing / reading the NSException handler             |
/// | <code>activeScreenSize()</code> (UIKit)   | Recording screen dimensions in device context            |
/// <h2>Threading</h2>
/// The bridge is created once during <code>SentryCrashIntegration.install(with:)</code> and
/// is safe to read from any thread after initialization. The
/// <code>uncaughtExceptionHandler</code> property may be written from the SentryCrash
/// installation path and read from the crash-time exception handler.
/// <h2>Usage</h2>
/// The bridge is created by the integration layer and passed down:
/// \code
/// let bridge = SentryCrashBridge(
///     notificationCenterWrapper: notificationCenter,
///     dateProvider: dateProvider,
///     crashReporter: crashReporter
/// )
/// // Passed to SentryCrashWrapper, SentryCrashIntegrationSessionHandler,
/// // and the underlying SentryCrash / SentryCrashInstallation instances.
///
/// \endcode
SWIFT_CLASS("_TtC6Sentry17SentryCrashBridge")
@interface SentryCrashBridge : NSObject
/// Wrapper around <code>NSNotificationCenter</code> used by SentryCrash to observe
/// app-lifecycle transitions (e.g. <code>UIApplicationDidBecomeActiveNotification</code>).
@property (nonatomic, readonly, strong) id <SentryNSNotificationCenterWrapper> _Nonnull notificationCenterWrapper;
/// Provides the current date/time. Used for timestamping crash reports and
/// computing session durations.
@property (nonatomic, readonly, strong) id <SentryCurrentDateProvider> _Nonnull dateProvider;
/// The crash reporter instance that owns system info, crash state, and the
/// on-disk report store. This is the main object SentryCrash interacts with.
@property (nonatomic, readonly, strong) SentryCrashSwift * _Nonnull crashReporter;
/// The C-convention uncaught-exception handler installed by SentryCrash.
/// This is a convenience proxy for <code>crashReporter.uncaughtExceptionHandler</code>.
/// The NSException monitor (<code>SentryCrashMonitor_NSException</code>) writes this
/// during installation so it can be restored if monitoring is later disabled.
@property (nonatomic) void (* _Nullable uncaughtExceptionHandler)(NSException * _Nonnull);
/// Creates a bridge with the SDK services that SentryCrash requires.
/// \param notificationCenterWrapper Wrapper for subscribing to app-lifecycle
/// notifications.
///
/// \param dateProvider Provider for current timestamps.
///
/// \param crashReporter The crash reporter that manages on-disk reports and
/// system info.
///
- (nonnull instancetype)initWithNotificationCenterWrapper:(id <SentryNSNotificationCenterWrapper> _Nonnull)notificationCenterWrapper dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider crashReporter:(SentryCrashSwift * _Nonnull)crashReporter OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry28SentryCrashReportFilterSwift")
@interface SentryCrashReportFilterSwift : NSObject
- (nonnull instancetype)initWithFilterReports:(void (^ _Nonnull)(NSArray * _Nonnull, void (^ _Nonnull)(NSArray * _Nullable, BOOL, NSError * _Nullable)))filter OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry19SentryCrashReporter_")
@protocol SentryCrashReporter <NSObject>
@property (nonatomic, readonly) BOOL crashedLastLaunch;
@property (nonatomic, readonly) NSTimeInterval durationFromCrashStateInitToLastCrash;
@property (nonatomic, readonly) NSTimeInterval activeDurationSinceLastCrash;
@property (nonatomic, readonly) BOOL isBeingTraced;
@property (nonatomic, readonly) BOOL isSimulatorBuild;
@property (nonatomic, readonly) BOOL isApplicationInForeground;
@property (nonatomic, readonly) uint64_t freeMemorySize;
@property (nonatomic, readonly) uint64_t appMemorySize;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nonnull systemInfo;
@property (nonatomic, readonly, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;
- (void)startBinaryImageCache;
- (void)stopBinaryImageCache;
- (void)enrichScope:(SentryScope * _Nonnull)scope;
@end

SWIFT_CLASS("_TtC6Sentry16SentryCrashSwift")
@interface SentryCrashSwift : NSObject
@property (nonatomic, readonly) BOOL crashedLastLaunch;
@property (nonatomic, readonly) NSTimeInterval activeDurationSinceLastCrash;
- (void)setSink:(SentryCrashReportFilterSwift * _Nullable)newValue;
- (void)setupOnCrash;
- (void)removeOnCrash;
@property (nonatomic) void (* _Nullable uncaughtExceptionHandler)(NSException * _Nonnull);
- (void)setBridge:(SentryCrashBridge * _Nonnull)bridge;
@property (nonatomic, copy) NSString * _Nonnull basePath;
- (void)install;
- (void)uninstall;
@property (nonatomic, readonly, copy) NSDictionary * _Nullable systemInfo;
@property (nonatomic, copy) NSDictionary * _Nonnull userInfo;
- (void)sendAllReportsWithCompletion:(void (^ _Nonnull)(NSArray * _Nullable, BOOL, NSError * _Nullable))completion;
@property (nonatomic, readonly) uint32_t monitoring;
- (BOOL)hasOnCrash SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// We need a protocol to expose SentryCurrentDateProvider to tests.
/// Mocking the previous private class from <code>SentryTestUtils</code> stopped working in Xcode 16.
SWIFT_PROTOCOL("_TtP6Sentry25SentryCurrentDateProvider_")
@protocol SentryCurrentDateProvider
- (NSDate * _Nonnull)date SWIFT_WARN_UNUSED_RESULT;
- (NSInteger)timezoneOffset SWIFT_WARN_UNUSED_RESULT;
- (uint64_t)systemTime SWIFT_WARN_UNUSED_RESULT;
- (NSTimeInterval)systemUptime SWIFT_WARN_UNUSED_RESULT;
- (uint64_t)getAbsoluteTime SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry14SentryDateUtil")
@interface SentryDateUtil : NSObject
- (nonnull instancetype)initWithCurrentDateProvider:(id <SentryCurrentDateProvider> _Nonnull)currentDateProvider OBJC_DESIGNATED_INITIALIZER;
- (BOOL)isInFuture:(NSDate * _Nullable)date SWIFT_WARN_UNUSED_RESULT;
+ (NSDate * _Nullable)getMaximumDate:(NSDate * _Nullable)first andOther:(NSDate * _Nullable)second SWIFT_WARN_UNUSED_RESULT;
+ (NSInteger)millisecondsSince1970:(NSDate * _Nonnull)date SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryFrame;
@class SentryDebugMeta;
@class SentryThread;
SWIFT_CLASS("_TtC6Sentry24SentryDebugImageProvider")
@interface SentryDebugImageProvider : NSObject
/// Returns a list of debug images that are being referenced by the given frames.
/// This function uses the @c SentryBinaryImageCache which is significantly faster than @c
/// SentryCrashDefaultBinaryImageProvider for retrieving binary image information.
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesFromCacheForFrames:(NSArray<SentryFrame *> * _Nonnull)frames SWIFT_WARN_UNUSED_RESULT;
/// Returns a list of debug images that are being referenced in the given threads.
/// This function uses the @c SentryBinaryImageCache which is significantly faster than @c
/// SentryCrashDefaultBinaryImageProvider for retrieving binary image information.
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesFromCacheForThreads:(NSArray<SentryThread *> * _Nonnull)threads SWIFT_WARN_UNUSED_RESULT;
/// Returns a list of debug images that are being referenced in the given image addresses.
/// This function uses the @c SentryBinaryImageCache which is significantly faster than @c
/// SentryCrashDefaultBinaryImageProvider for retrieving binary image information.
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesForImageAddressesFromCache:(NSSet<NSString *> * _Nonnull)imageAddresses SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryDebugMeta *> * _Nonnull)getDebugImagesFromCache SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry26SentryDefaultCrashReporter")
@interface SentryDefaultCrashReporter : NSObject <SentryCrashReporter>
@property (nonatomic, readonly, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nonnull systemInfo;
- (nonnull instancetype)initWithProcessInfoWrapper:(id <SentryProcessInfoSource> _Nonnull)processInfoWrapper bridge:(SentryCrashBridge * _Nonnull)bridge OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@interface SentryDefaultCrashReporter (SWIFT_EXTENSION(Sentry))
- (void)startBinaryImageCache;
- (void)stopBinaryImageCache;
@property (nonatomic, readonly) BOOL crashedLastLaunch;
@property (nonatomic, readonly) NSTimeInterval durationFromCrashStateInitToLastCrash;
@property (nonatomic, readonly) NSTimeInterval activeDurationSinceLastCrash;
@property (nonatomic, readonly) BOOL isBeingTraced;
@property (nonatomic, readonly) BOOL isSimulatorBuild;
@property (nonatomic, readonly) BOOL isApplicationInForeground;
@property (nonatomic, readonly) uint64_t freeMemorySize;
@property (nonatomic, readonly) uint64_t appMemorySize;
- (void)enrichScope:(SentryScope * _Nonnull)scope;
@end

SWIFT_CLASS("_TtC6Sentry32SentryDefaultCurrentDateProvider")
@interface SentryDefaultCurrentDateProvider : NSObject <SentryCurrentDateProvider>
- (NSDate * _Nonnull)date SWIFT_WARN_UNUSED_RESULT;
- (NSInteger)timezoneOffset SWIFT_WARN_UNUSED_RESULT;
/// Returns the absolute timestamp, which has no defined reference point or unit
/// as it is platform dependent.
- (uint64_t)systemTime SWIFT_WARN_UNUSED_RESULT;
- (NSTimeInterval)systemUptime SWIFT_WARN_UNUSED_RESULT;
- (uint64_t)getAbsoluteTime SWIFT_WARN_UNUSED_RESULT;
+ (uint64_t)getAbsoluteTime SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Required because we need to call this from Objective-C. It’s just a wrapper around the TelemetryScopeApplier protocol for Objective-C.
SWIFT_PROTOCOL("_TtP6Sentry21SentryLogScopeApplier_")
@protocol SentryLogScopeApplier
- (SentryLog * _Nonnull)applyScope:(SentryScope * _Nonnull)scope toLog:(SentryLog * _Nonnull)log SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry28SentryDefaultLogScopeApplier")
@interface SentryDefaultLogScopeApplier : NSObject <SentryLogScopeApplier>
- (nonnull instancetype)initWithEnvironment:(NSString * _Nonnull)environment releaseName:(NSString * _Nullable)releaseName cacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath sendDefaultPii:(BOOL)sendDefaultPii OBJC_DESIGNATED_INITIALIZER;
- (SentryLog * _Nonnull)applyScope:(SentryScope * _Nonnull)scope toLog:(SentryLog * _Nonnull)log SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry24SentryObjCRuntimeWrapper_")
@protocol SentryObjCRuntimeWrapper
- (char const * _Nonnull * _Nullable)copyClassNamesForImage:(char const * _Nonnull)image amount:(uint32_t * _Nullable)outCount SWIFT_WARN_UNUSED_RESULT;
- (char const * _Nullable)class_getImageName:(Class _Nonnull)cls SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry31SentryDefaultObjCRuntimeWrapper")
@interface SentryDefaultObjCRuntimeWrapper : NSObject <SentryObjCRuntimeWrapper>
- (char const * _Nonnull * _Nullable)copyClassNamesForImage:(char const * _Nonnull)image amount:(uint32_t * _Nullable)outCount SWIFT_WARN_UNUSED_RESULT;
- (char const * _Nullable)class_getImageName:(Class _Nonnull)cls SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryDispatchFactory;
@class SentryNSTimerFactory;
@class SentryFileIOTracker;
@class SentryThreadInspector;
@class SentryReachability;
@class SentryExtraContextProvider;
@protocol SentryEventContextEnricher;
@class SentryFileManager;
@class SentryScopePersistentStore;
@class SentryGlobalEventProcessor;
SWIFT_CLASS("_TtC6Sentry25SentryDependencyContainer")
@interface SentryDependencyContainer : NSObject
@property (nonatomic, strong) SentryOptions * _Nullable startOptions;
+ (SentryDependencyContainer * _Nonnull)sharedInstance SWIFT_WARN_UNUSED_RESULT;
/// Resets all dependencies.
+ (void)reset;
- (id <SentryApplication> _Nullable)application SWIFT_WARN_UNUSED_RESULT;
@property (nonatomic, strong) SentryDispatchQueueWrapper * _Nonnull dispatchQueueWrapper;
@property (nonatomic, strong) id <SentryRandomProtocol> _Nonnull random;
@property (nonatomic, strong) SentryThreadWrapper * _Nonnull threadWrapper;
@property (nonatomic, strong) SentryBinaryImageCache * _Nonnull binaryImageCache;
@property (nonatomic, strong) id <SentryCurrentDateProvider> _Nonnull dateProvider;
@property (nonatomic, strong) id <SentryNSNotificationCenterWrapper> _Nonnull notificationCenterWrapper;
@property (nonatomic, strong) id <SentryProcessInfoSource> _Nonnull processInfoWrapper;
@property (nonatomic, strong) id <SentryCrashReporter> _Nonnull crashWrapper;
@property (nonatomic, strong) SentryDispatchFactory * _Nonnull dispatchFactory;
@property (nonatomic, strong) SentryNSTimerFactory * _Nonnull timerFactory;
@property (nonatomic, strong) SentryFileIOTracker * _Nonnull fileIOTracker;
@property (nonatomic, strong) SentryThreadInspector * _Nonnull threadInspector;
@property (nonatomic, strong) id <SentryRateLimits> _Nonnull rateLimits;
@property (nonatomic, strong) SentryReachability * _Nonnull reachability;
@property (nonatomic, strong) SentrySysctl * _Nonnull sysctlWrapper;
@property (nonatomic, strong) SentryDebugImageProvider * _Nonnull debugImageProvider;
@property (nonatomic, strong) id <SentryObjCRuntimeWrapper> _Nonnull objcRuntimeWrapper;
@property (nonatomic, strong) SentryExtraContextProvider * _Nonnull extraContextProvider;
@property (nonatomic, readonly, strong) id <SentryEventContextEnricher> _Nonnull eventContextEnricher;
@property (nonatomic, strong) SentryFileManager * _Nullable fileManager;
@property (nonatomic, strong) SentryScopePersistentStore * _Nullable scopePersistentStore;
@property (nonatomic, strong) SentryGlobalEventProcessor * _Nonnull globalEventProcessor;
@property (nonatomic, strong) SentryAppStateManager * _Nonnull appStateManager;
@property (nonatomic, strong) SentryCrashSwift * _Nonnull crashReporter;
- (SentryANRTracker * _Nonnull)getANRTracker:(NSTimeInterval)timeout SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry20SentryDiscardedEvent")
@interface SentryDiscardedEvent : NSObject <SentrySerializable>
@property (nonatomic, readonly) NSUInteger quantity;
- (nonnull instancetype)initWithReason:(NSString * _Nonnull)reason category:(NSString * _Nonnull)category quantity:(NSUInteger)quantity OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryDispatchSourceWrapper;
SWIFT_CLASS("_TtC6Sentry21SentryDispatchFactory")
@interface SentryDispatchFactory : NSObject
/// Generate a new @c SentryDispatchQueueWrapper .
- (SentryDispatchQueueWrapper * _Nonnull)queueWithName:(char const * _Nonnull)name attributes:(dispatch_queue_attr_t _Nonnull)attributes SWIFT_WARN_UNUSED_RESULT;
/// Creates a utility QoS queue with the given name and relative priority, wrapped in a @c
/// SentryDispatchQueueWrapper.
/// @note This method is only a factory method and does not keep a reference to the created queue.
/// @param name The name of the queue.
/// @param relativePriority A negative offset from the maximum supported scheduler priority for the
/// given quality-of-service class. This value must be less than 0 and greater than or equal to @c
/// QOS_MIN_RELATIVE_PRIORITY, otherwise throws an assertion and returns an unspecified
/// quality-of-service.
/// @return Unretained reference to the created queue.
- (SentryDispatchQueueWrapper * _Nonnull)createUtilityQueue:(char const * _Nonnull)name relativePriority:(int32_t)relativePriority SWIFT_WARN_UNUSED_RESULT;
/// Generate a @c dispatch_source_t by internally vending the required @c SentryDispatchQueueWrapper.
- (SentryDispatchSourceWrapper * _Nonnull)sourceWithInterval:(NSInteger)interval leeway:(NSInteger)leeway queueName:(char const * _Nonnull)queueName attributes:(dispatch_queue_attr_t _Nonnull)attributes eventHandler:(void (^ _Nonnull)(void))eventHandler SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry26SentryDispatchQueueWrapper")
@interface SentryDispatchQueueWrapper : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithName:(char const * _Nonnull)name OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithName:(char const * _Nonnull)name relativePriority:(int32_t)relativePriority OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithName:(char const * _Nonnull)name attributes:(dispatch_queue_attr_t _Nullable)attributes OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithHighPriority:(char const * _Nonnull)name OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, strong) dispatch_queue_t _Nonnull queue;
- (void)dispatchAsyncWithBlock:(void (^ _Nonnull)(void))block;
- (void)dispatchAsyncOnMainQueueIfNotMainThread:(void (^ _Nonnull)(void))block;
- (void)dispatchSyncOnMainQueue:(void (^ _Nonnull)(void))block;
- (void)dispatchSyncOnMainQueue:(void (^ _Nonnull)(void))block timeout:(double)timeout;
- (void)dispatchAfter:(NSTimeInterval)interval block:(void (^ _Nonnull)(void))block;
- (void)dispatchOnce:(long * _Nonnull)predicate block:(void (^ _Nonnull)(void))block;
@property (nonatomic, readonly) BOOL shouldDispatchCancel;
@property (nonatomic, readonly) BOOL shouldCreateDispatchBlock;
@end

/// A wrapper around a dispatch timer source that can be subclassed for mocking in tests.
SWIFT_CLASS("_TtC6Sentry27SentryDispatchSourceWrapper")
@interface SentryDispatchSourceWrapper : NSObject
- (nonnull instancetype)initWithInterval:(NSInteger)interval leeway:(NSInteger)leeway queue:(SentryDispatchQueueWrapper * _Nonnull)queueWrapper eventHandler:(void (^ _Nonnull)(void))eventHandler OBJC_DESIGNATED_INITIALIZER;
- (void)cancel;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSURL;
@class NSError;
/// Represents a Sentry Data Source Name (DSN) which identifies a Sentry project.
SWIFT_CLASS_NAMED("SentryDsn")
@interface SentryDsn : NSObject
/// The parsed URL from the DSN string.
@property (nonatomic, readonly, copy) NSURL * _Nonnull url;
/// Initializes a SentryDsn from a DSN string.
/// \param dsnString The DSN string to parse.
///
/// \param error An optional error pointer that will be set if the DSN is invalid.
///
///
/// returns:
/// A new SentryDsn instance, or nil if the DSN string is invalid.
- (nullable instancetype)initWithString:(NSString * _Nullable)dsnString didFailWithError:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Generates a SHA1 hash of the DSN URL.
/// note:
/// This is internal SDK API, not for public use.
///
/// returns:
/// A hexadecimal string representation of the hash.
- (NSString * _Nonnull)getHash SWIFT_WARN_UNUSED_RESULT;
/// Returns the envelope endpoint URL for this DSN.
///
/// returns:
/// The envelope endpoint URL.
- (NSURL * _Nonnull)getEnvelopeEndpoint SWIFT_WARN_UNUSED_RESULT;
/// Extracts the organization ID from the DSN host.
/// For example, given a DSN with host <code>o123.ingest.sentry.io</code>, this returns <code>"123"</code>.
/// Returns <code>nil</code> if the host does not match the expected pattern.
@property (nonatomic, readonly, copy) NSString * _Nullable orgId;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry28SentryEnabledFeaturesBuilder")
@interface SentryEnabledFeaturesBuilder : NSObject
+ (NSArray<NSString *> * _Nonnull)getEnabledFeaturesWithOptions:(SentryOptions * _Nullable)options SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentryEnvelopeItem;
@class SentryEnvelopeHeader;
SWIFT_CLASS("_TtC6Sentry14SentryEnvelope")
@interface SentryEnvelope : NSObject
- (nonnull instancetype)initWithId:(SentryId * _Nullable)id singleItem:(SentryEnvelopeItem * _Nonnull)item;
- (nonnull instancetype)initWithHeader:(SentryEnvelopeHeader * _Nonnull)header singleItem:(SentryEnvelopeItem * _Nonnull)item;
- (nonnull instancetype)initWithId:(SentryId * _Nullable)id items:(NSArray<SentryEnvelopeItem *> * _Nonnull)items;
- (nonnull instancetype)initWithHeader:(SentryEnvelopeHeader * _Nonnull)header items:(NSArray<SentryEnvelopeItem *> * _Nonnull)items OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, strong) SentryEnvelopeHeader * _Nonnull header;
@property (nonatomic, readonly, copy) NSArray<SentryEnvelopeItem *> * _Nonnull items;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class SentryTraceContext;
SWIFT_CLASS("_TtC6Sentry20SentryEnvelopeHeader")
@interface SentryEnvelopeHeader : NSObject
/// Initializes a @c SentryEnvelopeHeader object with the specified @c eventId and @c traceContext.
/// @param eventId The identifier of the event. Can be @c nil if no event in the envelope or
/// attachment related to event.
/// @param traceContext Current trace state.
- (nonnull instancetype)initWithId:(SentryId * _Nullable)eventId traceContext:(SentryTraceContext * _Nullable)traceContext;
- (nonnull instancetype)initWithId:(SentryId * _Nullable)eventId sdkInfo:(NSDictionary * _Nullable)sdkInfo;
+ (nonnull instancetype)empty SWIFT_WARN_UNUSED_RESULT;
/// The event identifier, if available.
/// An event id exist if the envelope contains an event of items within it are related. i.e
/// Attachments
@property (nonatomic, readonly, strong) SentryId * _Nullable eventId;
@property (nonatomic, readonly, strong) SentryTraceContext * _Nullable traceContext;
/// The timestamp when the event was sent from the SDK as string in RFC 3339 format. Used
/// for clock drift correction of the event timestamp. The time zone must be UTC.
/// The timestamp should be generated as close as possible to the transmision of the event,
/// so that the delay between sending the envelope and receiving it on the server-side is
/// minimized.
@property (nonatomic, copy) NSDate * _Nullable sentAt;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSData;
@class SentrySession;
@class SentryAttachment;
@class SentryReplayEvent;
@class SentryReplayRecording;
SWIFT_CLASS("_TtC6Sentry18SentryEnvelopeItem")
@interface SentryEnvelopeItem : NSObject
/// The envelope payload.
@property (nonatomic, readonly, copy) NSData * _Nullable data;
- (nonnull instancetype)initWithType:(NSString * _Nonnull)type data:(NSData * _Nullable)data contentType:(NSString * _Nonnull)contentType itemCount:(NSNumber * _Nonnull)itemCount;
- (nonnull instancetype)initWithType:(NSString * _Nonnull)type data:(NSData * _Nullable)data addPlatform:(BOOL)addPlatform;
/// Initializes an envelope item with an event.
- (nonnull instancetype)initWithEvent:(SentryEvent * _Nonnull)event;
/// Initializes an envelope item with a session.
- (nonnull instancetype)initWithSession:(SentrySession * _Nonnull)session;
/// Initializes an envelope item with an attachment.
/// @param attachment The attachment to create the envelope item from.
/// @param maxAttachmentSize The maximum allowed size for the attachment.
/// @return The envelope item or nil if the attachment is too large or cannot be processed.
- (nullable instancetype)initWithAttachment:(SentryAttachment * _Nonnull)attachment maxAttachmentSize:(NSUInteger)maxAttachmentSize;
/// Initializes an envelope item with a client report.
- (nonnull instancetype)initWithClientReport:(SentryClientReport * _Nonnull)clientReport;
/// Initializes an envelope item with replay event and recording data.
- (nullable instancetype)initWithReplayEvent:(SentryReplayEvent * _Nonnull)replayEvent replayRecording:(SentryReplayRecording * _Nonnull)replayRecording video:(NSURL * _Nonnull)video;
- (NSString * _Nonnull)type SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Each item type must have a data category name mapped to it; see SentryDataCategoryMapper
/// While these envelope item types might look similar to the data categories,
/// they are not identical, and have slight differences.
SWIFT_CLASS("_TtC6Sentry23SentryEnvelopeItemTypes")
@interface SentryEnvelopeItemTypes : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull event;)
+ (NSString * _Nonnull)event SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull session;)
+ (NSString * _Nonnull)session SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull feedback;)
+ (NSString * _Nonnull)feedback SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull transaction;)
+ (NSString * _Nonnull)transaction SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull attachment;)
+ (NSString * _Nonnull)attachment SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull clientReport;)
+ (NSString * _Nonnull)clientReport SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull profile;)
+ (NSString * _Nonnull)profile SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull replayVideo;)
+ (NSString * _Nonnull)replayVideo SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull statsd;)
+ (NSString * _Nonnull)statsd SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull profileChunk;)
+ (NSString * _Nonnull)profileChunk SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull log;)
+ (NSString * _Nonnull)log SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull traceMetric;)
+ (NSString * _Nonnull)traceMetric SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Enriches the event context by adding app state information.
SWIFT_PROTOCOL("_TtP6Sentry26SentryEventContextEnricher_")
@protocol SentryEventContextEnricher
/// Enriches the event context dictionary with app state fields (in_foreground and is_active).
/// \param context The current event context dictionary.
///
///
/// returns:
/// The enriched context dictionary with app state information added.
- (NSDictionary<NSString *, id> * _Nonnull)enrichWithAppState:(NSDictionary<NSString *, id> * _Nonnull)context SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry18SentryEventDecoder")
@interface SentryEventDecoder : NSObject
+ (SentryEvent * _Nullable)decodeEventWithJsonData:(NSData * _Nonnull)jsonData SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Options for experimental features that are subject to change or may be removed in future versions.
SWIFT_CLASS("_TtC6Sentry25SentryExperimentalOptions")
@interface SentryExperimentalOptions : NSObject
/// A more reliable way to report unhandled C++ exceptions.
/// This approach hooks into all instances of the <code>__cxa_throw</code> function, which provides a more comprehensive and consistent exception handling across an app’s runtime, regardless of the number of C++ modules or how they’re linked. It helps in obtaining accurate stack traces.
/// note:
/// The mechanism of hooking into <code>__cxa_throw</code> could cause issues with symbolication on iOS due to caching of symbol references.
/// experiment:
/// This is an experimental feature and is therefore disabled by default. We’ll enable it by default in a future major release.
@property (nonatomic) BOOL enableUnhandledCPPExceptionsV2;
/// When enabled, the SDK uses a more efficient mechanism for detecting watchdog terminations.
@property (nonatomic) BOOL enableWatchdogTerminationsV2;
/// Enables network detail capture for Session Replay.
/// When enabled, the SDK can capture request and response headers and bodies for network
/// requests during session replay. You must also configure
/// <code>options.sessionReplay.networkDetailAllowUrls</code> with URL patterns to specify which
/// requests should be captured.
@property (nonatomic) BOOL enableReplayNetworkDetailsCapturing;
/// When enabled, the SDK sends a standalone app start transaction instead of attaching app
/// start data to the first UIViewController transaction.
@property (nonatomic) BOOL enableStandaloneAppStartTracing;
- (void)validateOptions:(NSDictionary<NSString *, id> * _Nullable)options;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Extension point identifiers for common iOS extension types
typedef SWIFT_ENUM(NSInteger, SentryExtensionType, open) {
/// WidgetKit extensions (includes Widgets and Live Activities)
  SentryExtensionTypeWidget = 0,
/// Intents extensions
  SentryExtensionTypeIntent = 1,
/// Action extensions (share, today, etc.)
  SentryExtensionTypeAction = 2,
/// Share extensions
  SentryExtensionTypeShare = 3,
/// Notification Service extensions
  SentryExtensionTypeNotificationService = 4,
};

SWIFT_CLASS("_TtC6Sentry26SentryExtraContextProvider")
@interface SentryExtraContextProvider : NSObject
- (NSDictionary<NSString *, id> * _Nonnull)getExtraContext SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry19SentryExtraPackages")
@interface SentryExtraPackages : NSObject
+ (void)addPackageName:(NSString * _Nullable)name version:(NSString * _Nullable)version;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS_NAMED("SentryFeatureFlagBufferWrapper")
@interface SentryFeatureFlagBufferWrapper : NSObject
+ (SentryFeatureFlagBufferWrapper * _Nonnull)scopeBuffer SWIFT_WARN_UNUSED_RESULT;
+ (SentryFeatureFlagBufferWrapper * _Nonnull)spanBuffer SWIFT_WARN_UNUSED_RESULT;
- (void)removeAll;
- (SentryFeatureFlagBufferWrapper * _Nonnull)copyBuffer SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, id> * _Nullable)serializeForContext SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, id> * _Nonnull)serializeForSpanData SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

enum SentryFeedbackSource : NSInteger;
SWIFT_CLASS("_TtC6Sentry14SentryFeedback")
@interface SentryFeedback : NSObject
@property (nonatomic, readonly, strong) SentryId * _Nonnull eventId;
/// \param associatedEventId The ID for an event you’d like associated with the feedback. 
///
/// \param attachments Attachment objects for any files to include with the feedback. 
///
- (nonnull instancetype)initWithMessage:(NSString * _Nonnull)message name:(NSString * _Nullable)name email:(NSString * _Nullable)email source:(enum SentryFeedbackSource)source associatedEventId:(SentryId * _Nullable)associatedEventId attachments:(NSArray<SentryAttachment *> * _Nullable)attachments OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

typedef SWIFT_ENUM(NSInteger, SentryFeedbackSource, open) {
  SentryFeedbackSourceWidget = 0,
  SentryFeedbackSourceCustom = 1,
};

@interface SentryFeedback (SWIFT_EXTENSION(Sentry)) <SentrySerializable>
@end

@interface SentryFeedback (SWIFT_EXTENSION(Sentry))
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
@end

@interface SentryFeedback (SWIFT_EXTENSION(Sentry))
/// Returns all attachments for inclusion in the feedback envelope.
- (NSArray<SentryAttachment *> * _Nonnull)attachmentsForEnvelope SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry18SentryFileContents")
@interface SentryFileContents : NSObject
@property (nonatomic, readonly, copy) NSString * _Nonnull path;
@property (nonatomic, readonly, copy) NSData * _Nonnull contents;
- (nonnull instancetype)initWithPath:(NSString * _Nonnull)path contents:(NSData * _Nonnull)contents OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry19SentryFileIOTracker")
@interface SentryFileIOTracker : NSObject
- (nonnull instancetype)initWithThreadInspector:(SentryThreadInspector * _Nonnull)threadInspector processInfoWrapper:(id <SentryProcessInfoSource> _Nonnull)processInfoWrapper OBJC_DESIGNATED_INITIALIZER;
- (void)enable;
- (void)disable;
- (BOOL)measureNSData:(NSData * _Nonnull)data writeToFile:(NSString * _Nonnull)path atomically:(BOOL)atomically origin:(NSString * _Nonnull)origin method:(BOOL (^ _Nonnull)(NSString * _Nonnull, BOOL))method;
- (BOOL)measureNSData:(NSData * _Nonnull)data writeToFile:(NSString * _Nonnull)path options:(NSDataWritingOptions)writeOptionsMask origin:(NSString * _Nonnull)origin error:(NSError * _Nullable * _Nullable)error method:(BOOL (^ _Nonnull)(NSString * _Nonnull, NSDataWritingOptions, NSError * _Nullable * _Nullable))method;
- (NSData * _Nullable)measureNSDataFromFile:(NSString * _Nonnull)path origin:(NSString * _Nonnull)origin method:(NSData * _Nullable (^ _Nonnull)(NSString * _Nonnull))method SWIFT_WARN_UNUSED_RESULT;
- (NSData * _Nullable)measureNSDataFromFile:(NSString * _Nonnull)path options:(NSDataReadingOptions)readOptionsMask origin:(NSString * _Nonnull)origin error:(NSError * _Nullable * _Nullable)error method:(NSData * _Nullable (^ _Nonnull)(NSString * _Nonnull, NSDataReadingOptions, NSError * _Nullable * _Nullable))method SWIFT_WARN_UNUSED_RESULT;
- (NSData * _Nullable)measureNSDataFromURL:(NSURL * _Nonnull)url options:(NSDataReadingOptions)readOptionsMask origin:(NSString * _Nonnull)origin error:(NSError * _Nullable * _Nullable)error method:(NSData * _Nullable (^ _Nonnull)(NSURL * _Nonnull, NSDataReadingOptions, NSError * _Nullable * _Nullable))method SWIFT_WARN_UNUSED_RESULT;
- (BOOL)measureNSFileManagerCreateFileAtPath:(NSString * _Nonnull)path data:(NSData * _Nonnull)data attributes:(NSDictionary<NSFileAttributeKey, id> * _Nonnull)attributes origin:(NSString * _Nonnull)origin method:(BOOL (^ _Nonnull)(NSString * _Nonnull, NSData * _Nonnull, NSDictionary<NSFileAttributeKey, id> * _Nonnull))method;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry17SentryFileManager")
@interface SentryFileManager : NSObject
@property (nonatomic, copy) void (^ _Nullable envelopeDeletedCallback)(SentryEnvelopeItem * _Nonnull, NSUInteger);
@property (nonatomic, readonly, copy) NSString * _Nonnull basePath;
@property (nonatomic, readonly, copy) NSString * _Nonnull sentryPath;
@property (nonatomic, readonly, copy) NSString * _Nonnull breadcrumbsFilePathOne;
@property (nonatomic, readonly, copy) NSString * _Nonnull breadcrumbsFilePathTwo;
@property (nonatomic, readonly, copy) NSString * _Nonnull previousBreadcrumbsFilePathOne;
@property (nonatomic, readonly, copy) NSString * _Nonnull previousBreadcrumbsFilePathTwo;
- (nullable instancetype)initWithOptions:(SentryOptions * _Nullable)options dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider dispatchQueueWrapper:(SentryDispatchQueueWrapper * _Nonnull)dispatchQueueWrapper error:(NSError * _Nullable * _Nullable)error;
- (NSString * _Nullable)storeEnvelope:(SentryEnvelope * _Nonnull)envelope;
- (NSString * _Nullable)getEnvelopesPath:(NSString * _Nonnull)filePath SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryFileContents *> * _Nonnull)getAllEnvelopes SWIFT_WARN_UNUSED_RESULT;
- (SentryFileContents * _Nullable)getOldestEnvelope SWIFT_WARN_UNUSED_RESULT;
- (void)deleteOldEnvelopeItems;
- (void)deleteAllEnvelopes;
- (NSURL * _Nonnull)getSentryPathAsURL SWIFT_WARN_UNUSED_RESULT;
- (void)moveState:(NSString * _Nonnull)stateFilePath toPreviousState:(NSString * _Nonnull)previousStateFilePath;
- (void)storeCurrentSession:(SentrySession * _Nonnull)session;
- (SentrySession * _Nullable)readCurrentSession SWIFT_WARN_UNUSED_RESULT;
- (void)deleteCurrentSession;
- (void)storeCrashedSession:(SentrySession * _Nonnull)session;
- (SentrySession * _Nullable)readCrashedSession SWIFT_WARN_UNUSED_RESULT;
- (void)deleteCrashedSession;
- (void)storeAbnormalSession:(SentrySession * _Nonnull)session;
- (SentrySession * _Nullable)readAbnormalSession SWIFT_WARN_UNUSED_RESULT;
- (void)deleteAbnormalSession;
- (void)storeTimestampLastInForeground:(NSDate * _Nonnull)timestamp;
- (NSDate * _Nullable)readTimestampLastInForeground SWIFT_WARN_UNUSED_RESULT;
- (void)deleteTimestampLastInForeground;
- (void)storeAppState:(SentryAppState * _Nonnull)appState;
- (void)moveAppStateToPreviousAppState;
- (SentryAppState * _Nullable)readAppState SWIFT_WARN_UNUSED_RESULT;
- (SentryAppState * _Nullable)readPreviousAppState SWIFT_WARN_UNUSED_RESULT;
- (void)deleteAppState;
- (void)moveBreadcrumbsToPreviousBreadcrumbs;
- (NSArray * _Nonnull)readPreviousBreadcrumbs SWIFT_WARN_UNUSED_RESULT;
- (NSNumber * _Nullable)readTimezoneOffset SWIFT_WARN_UNUSED_RESULT;
- (void)storeTimezoneOffset:(NSInteger)offset;
- (void)deleteTimezoneOffset;
- (void)storeAppHangEvent:(SentryEvent * _Nonnull)event;
- (SentryEvent * _Nullable)readAppHangEvent SWIFT_WARN_UNUSED_RESULT;
- (BOOL)appHangEventExists SWIFT_WARN_UNUSED_RESULT;
- (void)deleteAppHangEvent;
+ (BOOL)createDirectoryAtPath:(NSString * _Nonnull)path error:(NSError * _Nullable * _Nullable)error;
- (void)deleteAllFolders;
- (void)removeFileAtPath:(NSString * _Nonnull)path;
- (NSArray<NSString *> * _Nonnull)allFilesInFolder:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT;
- (BOOL)isDirectory:(NSString * _Nonnull)path SWIFT_WARN_UNUSED_RESULT;
- (NSData * _Nullable)readDataFromPath:(NSString * _Nonnull)path error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (BOOL)writeData:(NSData * _Nonnull)data toPath:(NSString * _Nonnull)toPath;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry25SentryFileManagerProtocol_")
@protocol SentryFileManagerProtocol
- (void)moveState:(NSString * _Nonnull)stateFilePath toPreviousState:(NSString * _Nonnull)previousStateFilePath;
- (NSData * _Nullable)readDataFromPath:(NSString * _Nonnull)path error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (BOOL)writeData:(NSData * _Nonnull)data toPath:(NSString * _Nonnull)path;
- (void)removeFileAtPath:(NSString * _Nonnull)path;
- (NSURL * _Nonnull)getSentryPathAsURL SWIFT_WARN_UNUSED_RESULT;
@end

@interface SentryFileManager (SWIFT_EXTENSION(Sentry)) <SentryFileManagerProtocol>
@end

SWIFT_CLASS("_TtC6Sentry18SentryFrameRemover")
@interface SentryFrameRemover : NSObject
/// Removes Sentry SDK frames until a frame from a different package is found.
/// @discussion When a user includes Sentry as a static library, the package is the same as the
/// application. Therefore removing frames with a package containing “sentry” doesn’t work. We can’t
/// look into the function name as in release builds, the function name can be obfuscated, or we
/// remove functions that are not from this SDK and contain “sentry”. Therefore this logic only works
/// for apps including Sentry dynamically.
+ (NSArray<SentryFrame *> * _Nonnull)removeNonSdkFrames:(NSArray<SentryFrame *> * _Nonnull)frames SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry26SentryFramesDelayResultSPI")
@interface SentryFramesDelayResultSPI : NSObject
@property (nonatomic, readonly) CFTimeInterval delayDuration;
@property (nonatomic, readonly) NSUInteger framesContributingToDelayCount;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry26SentryGlobalEventProcessor")
@interface SentryGlobalEventProcessor : NSObject
- (void)addEventProcessor:(SentryEvent * _Nullable (^ _Nonnull)(SentryEvent * _Nonnull))newProcessor;
- (SentryEvent * _Nullable)reportAll:(SentryEvent * _Nonnull)event;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry32SentryHangTrackerIntegrationObjC")
@interface SentryHangTrackerIntegrationObjC : NSObject
- (void)pauseAppHangTracking;
- (void)resumeAppHangTracking;
- (void)uninstall;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// HTTP status codes used by the Sentry SDK.
/// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status
typedef SWIFT_ENUM_NAMED(NSInteger, SentryHttpStatusCode, "SentryHttpStatusCode", open) {
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200
  SentryHttpStatusCodeOk = 200,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/201
  SentryHttpStatusCodeCreated = 201,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400
  SentryHttpStatusCodeBadRequest = 400,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/412
  SentryHttpStatusCodePreconditionFailed = 412,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/413
  SentryHttpStatusCodeContentTooLarge = 413,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429
  SentryHttpStatusCodeTooManyRequests = 429,
/// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500
  SentryHttpStatusCodeInternalServerError = 500,
};

@class NSURLRequest;
/// Logs error messages for HTTP transport failures.
/// See https://develop.sentry.dev/sdk/expected-features/#dealing-with-network-failures
SWIFT_CLASS_NAMED("SentryHttpTransportHttpStatusCodeLogger")
@interface SentryHttpTransportHttpStatusCodeLogger : NSObject
/// Logs an error if the HTTP status code requires specific error messaging.
/// Currently handles HTTP 413 (Content Too Large) by logging envelope size and item types.
+ (void)logHttpResponseErrorWithStatusCode:(NSInteger)statusCode envelope:(SentryEnvelope * _Nonnull)envelope request:(NSURLRequest * _Nonnull)request;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@protocol SentrySpan;
@class SentryTransactionContext;
@class SentryLogger;
@class SentryUser;
/// The hub is the central manager for SDK configuration, error capture, and scope management.
SWIFT_CLASS("_TtC6Sentry9SentryHub")
@interface SentryHub : NSObject
/// Initializes a <code>SentryHub</code> with the given client and scope.
/// \param client The client to bind to the hub.
///
/// \param scope The scope to use for the hub.
///
- (nonnull instancetype)initWithClient:(SentryClient * _Nullable)client andScope:(SentryScope * _Nullable)scope OBJC_DESIGNATED_INITIALIZER;
/// Starts a new <code>SentrySession</code>. If there’s a running <code>SentrySession</code>, it ends it before starting the new one.
/// You can use this method in combination with <code>endSession</code> to manually track <code>SentrySession</code>s.
/// The SDK uses <code>SentrySession</code> to inform Sentry about release and project associated project health.
- (void)startSession;
/// Ends the current <code>SentrySession</code>. You can use this method in combination with <code>startSession</code> to
/// manually track <code>SentrySession</code>s. The SDK uses <code>SentrySession</code> to inform Sentry about release and
/// project associated project health.
- (void)endSession;
/// Ends the current session with the given timestamp.
/// \param timestamp The timestamp to end the session with.
///
- (void)endSessionWithTimestamp:(NSDate * _Nonnull)timestamp;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScope:(SentryScope * _Nonnull)scope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
- (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScope:(SentryScope * _Nonnull)scope;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScope:(SentryScope * _Nonnull)scope;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
- (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScope:(SentryScope * _Nonnull)scope;
/// Captures a new-style user feedback and sends it to Sentry.
/// \param feedback The user feedback to send to Sentry.
///
- (void)captureFeedback:(SentryFeedback * _Nonnull)feedback;
/// Use this method to modify the <code>Scope</code> of the Hub. The SDK uses the <code>Scope</code> to attach
/// contextual data to events.
/// \param callback The callback for configuring the <code>Scope</code> of the Hub.
///
- (void)configureScope:(void (^ _Nonnull)(SentryScope * _Nonnull))callback;
/// Adds a breadcrumb to the <code>Scope</code> of the Hub.
/// \param crumb The <code>Breadcrumb</code> to add to the <code>Scope</code> of the Hub.
///
- (void)addBreadcrumb:(SentryBreadcrumb * _Nonnull)crumb;
/// Returns a client if there is a bound client on the Hub.
- (SentryClient * _Nullable)getClient SWIFT_WARN_UNUSED_RESULT;
/// Returns either the current scope or a new one if it was <code>nil</code>.
@property (nonatomic, readonly, strong) SentryScope * _Nonnull scope;
/// Returns the logger associated with this Hub.
@property (nonatomic, readonly, strong) SentryLogger * _Nonnull logger;
/// Binds a different client to the hub.
- (void)bindClient:(SentryClient * _Nullable)client;
/// Checks if integration is activated.
- (BOOL)hasIntegration:(NSString * _Nonnull)integrationName SWIFT_WARN_UNUSED_RESULT;
/// Checks if a specific Integration (<code>integrationClass</code>) has been installed.
///
/// returns:
/// <code>true</code> if an instance of <code>integrationClass</code> exists within <code>SentryHub.installedIntegrations</code>.
- (BOOL)isIntegrationInstalled:(Class _Nonnull)integrationClass SWIFT_WARN_UNUSED_RESULT;
/// Set user to the <code>Scope</code> of the Hub.
/// \param user The user to set to the <code>Scope</code>.
///
- (void)setUser:(SentryUser * _Nullable)user;
/// Reports to the ongoing <code>UIViewController</code> transaction that the screen contents are fully loaded and displayed,
/// which will create a new span.
- (void)reportFullyDisplayed;
/// Waits synchronously for the SDK to flush out all queued and cached items for up to the specified timeout in seconds.
/// If there is no internet connection, the function returns immediately. The SDK doesn’t dispose the client or the hub.
/// \param timeout The time to wait for the SDK to complete the flush.
///
- (void)flush:(NSTimeInterval)timeout;
/// Calls flush with <code>SentryOptions/shutdownTimeInterval</code>.
- (void)close;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// This class detects whether a framework belongs to the app or not. We differentiate between three
/// different types of frameworks.
/// First, the main executable of the app, which’s name can be retrieved by @c CFBundleExecutable. To
/// mark this framework as “in-app” the caller needs to pass in the @c CFBundleExecutable to
/// @c inAppIncludes.
/// Next, there are private frameworks embedded in the application bundle. Both app supporting
/// frameworks as CocoaLumberJack, Sentry, RXSwift, etc., and frameworks written by the user fall
/// into this category. These frameworks can be both “in-app” or not. As we expect most frameworks of
/// this category to be supporting frameworks, we mark them not as “in-app”. If a user wants such a
/// framework to be “in-app”, they need to pass the name into @c inAppIncludes. For dynamic
/// frameworks, the location is usually in the bundle under
/// /Frameworks/FrameworkName.framework/FrameworkName. As for static frameworks, the location is the
/// same as the main executable; this class marks all static frameworks as “in-app”. To remove static
/// frameworks from being “in-app”, Sentry uses stack trace grouping rules on the server.
/// Last, this class marks all public frameworks as not “in-app”. Such frameworks are bound
/// dynamically and are usually located at /Library/Frameworks or ~/Library/Frameworks. For
/// simulators, the location can be something like
/// /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/…
SWIFT_CLASS("_TtC6Sentry16SentryInAppLogic")
@interface SentryInAppLogic : NSObject
/// A list of string prefixes of framework names that belong to the app, stored in lowercase.
@property (nonatomic, readonly, copy) NSArray<NSString *> * _Nonnull inAppIncludes;
/// Initializes @c SentryInAppLogic with @c inAppIncludes.
/// To work properly for Apple applications the @c inAppIncludes should contain the
/// @c CFBundleExecutable, which is the name of the bundle’s executable file.
/// @param inAppIncludes A list of string prefixes of framework names that belong to the app.
- (nonnull instancetype)initWithInAppIncludes:(NSArray<NSString *> * _Nonnull)inAppIncludes OBJC_DESIGNATED_INITIALIZER;
/// Determines if the framework belongs to the app by using @c inAppIncludes.
/// Before checking this method lowercases the strings and uses only the @c lastPathComponent of the
/// @c imagePath.
/// @param imagePath the full path of the binary image.
/// @return @c YES if the framework located at the @c imagePath starts with a prefix of
/// @c inAppIncludes. @c NO if the framework located at the @c imagePath doesn’t start with a prefix of
/// @c inAppIncludes.
- (BOOL)isInApp:(NSString * _Nullable)imagePath SWIFT_WARN_UNUSED_RESULT;
/// Determines if the class belongs to the app by getting its framework and checking with
/// @c -[isInApp:]
/// @param targetClass the class to check.
/// @return @c YES if the @c targetClass belongs to a framework included in @c inAppIncludes.
/// @c NO if targetClass does not belong to a framework in @c inAppIncludes.
- (BOOL)isClassInApp:(Class _Nonnull)targetClass SWIFT_WARN_UNUSED_RESULT;
/// Determines if an image name matches a given in-app include prefix.
/// \param imageName The full path of the binary image.
///
/// \param inAppInclude The prefix to check against.
///
///
/// returns:
/// <code>true</code> if the image name’s last path component starts with the given prefix.
+ (BOOL)isImageNameInApp:(NSString * _Nonnull)imageName inAppInclude:(NSString * _Nonnull)inAppInclude SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Manages the installation ID for the Sentry SDK.
/// The installation ID is a unique identifier for the SDK installation,
/// stored in a file in the cache directory. It’s used to identify the
/// device/installation across app launches.
SWIFT_CLASS("_TtC6Sentry18SentryInstallation")
@interface SentryInstallation : NSObject
/// Returns the installation ID for the given cache directory path.
/// If the installation ID is cached in memory, returns it immediately.
/// Otherwise, reads it from disk or generates a new one if it doesn’t exist.
+ (NSString * _Nonnull)idWithCacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath SWIFT_WARN_UNUSED_RESULT;
/// Returns the installation ID from disk without using the cache.
+ (NSString * _Nullable)idWithCacheDirectoryPathNonCached:(NSString * _Nonnull)cacheDirectoryPath SWIFT_WARN_UNUSED_RESULT;
/// Caches the installation ID asynchronously.
/// This method dispatches the ID retrieval to a background queue to avoid
/// blocking the main thread with file I/O operations.
+ (void)cacheIDAsyncWithCacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath;
/// Returns the cached installation ID if it exists in memory.
+ (NSString * _Nullable)cachedIdWithCacheDirectoryPath:(NSString * _Nonnull)cacheDirectoryPath SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry25SentryIntegrationProtocol_")
@protocol SentryIntegrationProtocol <NSObject>
- (void)uninstall;
@end

/// Represents the crash status of the last program execution.
/// Use <code>SentrySDK/lastRunStatus</code> to check if the previous app execution
/// terminated with a crash. Before the SDK is fully initialized, the status
/// is <code>unknown</code> because the crash reporter hasn’t loaded its state yet.
/// note:
/// This enum replaces the <code>crashedLastRun</code> boolean property, which
/// could not distinguish between “did not crash” and “not yet known.”
typedef SWIFT_ENUM(NSInteger, SentryLastRunStatus, open) {
/// The SDK hasn’t determined the crash status yet.
/// This is the value returned before <code>SentrySDK/start(configureOptions:)</code>
/// finishes initializing the crash reporter.
  SentryLastRunStatusUnknown = 0,
/// The last program execution did <em>not</em> end with a crash.
  SentryLastRunStatusDidNotCrash = 1,
/// The last program execution ended with a crash.
  SentryLastRunStatusDidCrash = 2,
};

SWIFT_CLASS("_TtC6Sentry17SentryLevelHelper")
@interface SentryLevelHelper : NSObject
+ (NSString * _Nonnull)nameForLevel:(SentryLevel)level SWIFT_WARN_UNUSED_RESULT;
+ (SentryLevel)levelForName:(NSString * _Nullable)name SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Utility class for locale-related functionality.
SWIFT_CLASS("_TtC6Sentry12SentryLocale")
@interface SentryLocale : NSObject
/// Determines if the current locale uses 24-hour time format.
///
/// returns:
/// <code>true</code> if 24-hour format is used, <code>false</code> if 12-hour (AM/PM) format is used.
+ (BOOL)timeIs24HourFormat SWIFT_WARN_UNUSED_RESULT;
/// Determines if the current locale’s language is a right-to-left language.
///
/// returns:
/// <code>true</code> if the language is RTL, <code>false</code> otherwise.
+ (BOOL)isRightToLeftLanguage SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class SentrySpanId;
enum SentryLogLevel : NSInteger;
/// A structured log entry that captures log data with associated attribute metadata.
/// Use the <code>options.beforeSendLog</code> callback to modify or filter log data.
SWIFT_CLASS("_TtC6Sentry9SentryLog")
@interface SentryLog : NSObject
/// The timestamp when the log event occurred
@property (nonatomic, copy) NSDate * _Nonnull timestamp;
/// The trace ID to associate this log with distributed tracing. This will be set to a valid non-empty value during processing.
@property (nonatomic, strong) SentryId * _Nonnull traceId;
/// The span ID of the span that was active when the log was collected.
@property (nonatomic, strong) SentrySpanId * _Nullable spanId;
/// The severity level of the log entry
@property (nonatomic) enum SentryLogLevel level;
/// The main log message content
@property (nonatomic, copy) NSString * _Nonnull body;
/// A dictionary of structured attributes added to the log entry
@property (nonatomic, copy) NSDictionary<NSString *, SentryAttribute *> * _Nonnull attributes;
/// Numeric representation of the severity level (Int)
@property (nonatomic, strong) NSNumber * _Nullable severityNumber;
/// Creates a log entry with the specified level and message.
/// \param level The severity level of the log entry
///
/// \param body The main log message content
///
- (nonnull instancetype)initWithLevel:(enum SentryLogLevel)level body:(NSString * _Nonnull)body;
/// Creates a log entry with the specified level, message, and attributes.
/// \param level The severity level of the log entry
///
/// \param body The main log message content
///
/// \param attributes A dictionary of structured attributes to add to the log entry
///
- (nonnull instancetype)initWithLevel:(enum SentryLogLevel)level body:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, SentryAttribute *> * _Nonnull)attributes;
/// Adds or updates an attribute in the log entry.
/// \param attribute The attribute value to add
///
/// \param key The key for the attribute
///
- (void)setAttribute:(SentryAttribute * _Nullable)attribute forKey:(NSString * _Nonnull)key;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@interface SentryLog (SWIFT_EXTENSION(Sentry))
@end

/// Represents the severity level of a structured log entry.
/// Log levels are ordered by severity from least (<code>trace</code>) to most severe (<code>fatal</code>).
/// Each level corresponds to a numeric severity value following the OpenTelemetry specification.
typedef SWIFT_ENUM_NAMED(NSInteger, SentryLogLevel, "Level", open) {
/// Trace level for very detailed diagnostic information.
  SentryLogLevelTrace = 0,
/// Debug level for diagnostic information useful during development.
  SentryLogLevelDebug = 1,
/// Info level for general informational messages.
  SentryLogLevelInfo = 2,
/// Warn level for potentially harmful situations.
  SentryLogLevelWarn = 3,
/// Error level for error events that might still allow the application to continue running.
  SentryLogLevelError = 4,
/// Fatal level for severe error events that will presumably lead the application to abort.
  SentryLogLevelFatal = 5,
};

@protocol SentryLoggerDelegate;
/// <code>SentryLogger</code> provides a structured logging interface that captures log entries
/// and sends them to Sentry. Supports multiple log levels (trace, debug, info, warn,
/// error, fatal) and allows attaching arbitrary attributes for enhanced context.
/// <h2>Supported Attribute Types</h2>
/// <ul>
///   <li>
///     <code>String</code>, <code>Bool</code>, <code>Int</code>, <code>Double</code>
///   </li>
///   <li>
///     <code>Float</code> (converted to <code>Double</code>)
///   </li>
///   <li>
///     Other types (converted to string)
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// \code
/// let logger = SentrySDK.logger
/// logger.info("User logged in", attributes: ["userId": "12345"])
/// logger.error("Payment failed", attributes: ["errorCode": 500])
///
/// // Structured string interpolation with automatic type detection
/// logger.info("User \(userId) processed \(count) items with \(percentage)% success")
/// logger.debug("Processing \(itemCount) items, active: \(isActive)")
/// logger.warn("Retry attempt \(currentAttempt) of \(maxAttempts) failed")
///
/// \endcode
SWIFT_CLASS("_TtC6Sentry12SentryLogger")
@interface SentryLogger : NSObject
/// Initializes a logger with the given delegate and date provider.
/// \param delegate The delegate that receives captured log entries.
///
/// \param dateProvider The date provider used to timestamp log entries.
///
- (nonnull instancetype)initWithDelegate:(id <SentryLoggerDelegate> _Nonnull)delegate dateProvider:(id <SentryCurrentDateProvider> _Nonnull)dateProvider OBJC_DESIGNATED_INITIALIZER;
/// Logs a trace-level message.
- (void)trace:(NSString * _Nonnull)body;
/// Logs a trace-level message with additional attributes.
- (void)trace:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs a debug-level message.
- (void)debug:(NSString * _Nonnull)body;
/// Logs a debug-level message with additional attributes.
- (void)debug:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs an info-level message.
- (void)info:(NSString * _Nonnull)body;
/// Logs an info-level message with additional attributes.
- (void)info:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs a warning-level message.
- (void)warn:(NSString * _Nonnull)body;
/// Logs a warning-level message with additional attributes.
- (void)warn:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs an error-level message.
- (void)error:(NSString * _Nonnull)body;
/// Logs an error-level message with additional attributes.
- (void)error:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
/// Logs a fatal-level message.
- (void)fatal:(NSString * _Nonnull)body;
/// Logs a fatal-level message with additional attributes.
- (void)fatal:(NSString * _Nonnull)body attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// A delegate that receives captured log entries from <code>SentryLogger</code>.
SWIFT_PROTOCOL("_TtP6Sentry20SentryLoggerDelegate_")
@protocol SentryLoggerDelegate
/// Captures a log entry and sends it to Sentry.
/// \param log The log entry to capture.
///
- (void)captureLog:(SentryLog * _Nonnull)log;
@end

@class SentryMeasurementUnit;
SWIFT_CLASS("_TtC6Sentry22SentryMeasurementValue")
@interface SentryMeasurementValue : NSObject
@property (nonatomic, readonly, strong) NSNumber * _Nonnull value;
@property (nonatomic, readonly, strong) SentryMeasurementUnit * _Nullable unit;
- (nonnull instancetype)initWithValue:(NSNumber * _Nonnull)value OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithValue:(NSNumber * _Nonnull)value unit:(SentryMeasurementUnit * _Nonnull)unit OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// For proper statistics in release health, we need to make sure we don’t send session updates
/// without sending a session init first. In other words, we can’t drop a session init. The
/// @c SentryFileManager deletes an envelope once the maximum amount of envelopes is stored. When
/// this happens and the envelope to delete contains a session init we look for the next envelope
/// containing a session update for the same session. If such a session envelope is found we migrate
/// the init flag. If none is found we delete the envelope. We don’t migrate other envelope items as
/// events.
SWIFT_CLASS("_TtC6Sentry24SentryMigrateSessionInit")
@interface SentryMigrateSessionInit : NSObject
/// Checks if the envelope of the passed file path contains an envelope item with a session init. If
/// it does it iterates over all envelopes and looks for a session with the same session id. If such
/// a session is found the init flag is set to @c true, the envelope is updated with keeping other
/// envelope items and headers, and the updated envelope is stored to the disk keeping its path.
/// @param envelope The envelope to delete
/// @param envelopesDirPath The path of the directory where the envelopes are stored.
/// @param envelopeFilePaths An array containing the file paths of envelopes to check if they contain
/// a session init.
/// @return @c true if the function migrated the session init. @c false if not.
+ (BOOL)migrateSessionInit:(SentryEnvelope * _Nullable)envelope envelopesDirPath:(NSString * _Nonnull)envelopesDirPath envelopeFilePaths:(NSArray<NSString *> * _Nonnull)envelopeFilePaths;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry27SentryMobileProvisionParser")
@interface SentryMobileProvisionParser : NSObject
@property (nonatomic, readonly) BOOL mobileProvisionProfileProvisionsAllDevices;
/// Whether the provisioning profile allows debugging (<code>get-task-allow</code> entitlement).
/// Its boolean value determines whether a debugger can attach to the app.
/// Development profiles set this to <code>true</code>; distribution profiles set it to <code>false</code>.
/// See: https://developer.apple.com/library/archive/technotes/tn2415/_index.html
/// See: https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles
@property (nonatomic, readonly) BOOL mobileProvisionProfileAllowsDebugging;
- (nonnull instancetype)init;
- (BOOL)hasEmbeddedMobileProvisionProfile SWIFT_WARN_UNUSED_RESULT;
@end

@class NSTimer;
SWIFT_CLASS("_TtC6Sentry20SentryNSTimerFactory")
@interface SentryNSTimerFactory : NSObject
- (NSTimer * _Nonnull)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^ _Nonnull)(NSTimer * _Nonnull))block;
- (NSTimer * _Nonnull)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id _Nonnull)aTarget selector:(SEL _Nonnull)aSelector userInfo:(id _Nullable)userInfo repeats:(BOOL)yesOrNo;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry25SentryNSURLRequestBuilder")
@interface SentryNSURLRequestBuilder : NSObject
- (NSURLRequest * _Nullable)createEnvelopeRequest:(SentryEnvelope * _Nonnull)envelope dsn:(SentryDsn * _Nonnull)dsn error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (NSURLRequest * _Nullable)createEnvelopeRequest:(SentryEnvelope * _Nonnull)envelope url:(NSURL * _Nonnull)url error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// The Telemetry processor is sitting between the client and transport to efficiently deliver telemetry to Sentry (as of 2026-02-04).
/// Currently used for logs and metrics only; planned to cover all telemetry with buffering, rate limiting, client reports, and priority-based sending.
/// Offline caching is still handled by the transport today, but the long-term goal is to move it here so the transport focuses on sending only.
/// This is an Objective-C compatible subset of the telemetry processor protocol.
/// Use <code>SentryTelemetryProcessor</code> instead when working in Swift, which adds support for
/// Swift-only types like <code>SentryMetric</code>.
/// See dev docs for details (work in progress): https://develop.sentry.dev/sdk/telemetry/telemetry-processor/
SWIFT_PROTOCOL("_TtP6Sentry28SentryObjCTelemetryProcessor_")
@protocol SentryObjCTelemetryProcessor
- (void)addLog:(SentryLog * _Nonnull)log;
/// Forwards buffered telemetry data to the transport for sending.
- (NSTimeInterval)forwardTelemetryData SWIFT_WARN_UNUSED_RESULT;
@end

@class NSPredicate;
/// Used to transform an NSPredicate into a human-friendly string.
/// This class is used for CoreData and omits variable values
/// and doesn’t convert CoreData unsupported instructions.
SWIFT_CLASS("_TtC6Sentry25SentryPredicateDescriptor")
@interface SentryPredicateDescriptor : NSObject
- (NSString * _Nonnull)predicateDescription:(NSPredicate * _Nonnull)predicate SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

enum SentryProfileLifecycle : NSInteger;
/// An object containing configuration for the Sentry profiler.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// If either <code>SentryOptions.profilesSampleRate</code> or <code>SentryOptions.profilesSampler</code> are
/// set to a non-nil value such that transaction-based profiling is being used, these settings
/// will have no effect, nor will <code>SentrySDK.startProfiler()</code> or <code>SentrySDK.stopProfiler()</code>.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
SWIFT_CLASS("_TtC6Sentry20SentryProfileOptions")
@interface SentryProfileOptions : NSObject
/// The mode to use for starting and stopping the profiler, either manually or automatically.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// Default: <code>SentryProfileLifecycleManual</code>.
/// note:
/// If either <code>SentryOptions.profilesSampleRate</code> or <code>SentryOptions.profilesSampler</code> are
/// set to a non-nil value such that transaction-based profiling is being used, then setting
/// this property has no effect.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic) enum SentryProfileLifecycle lifecycle;
/// The % of user sessions in which to enable profiling.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// The decision whether or not to sample profiles is computed using this sample rate
/// when the SDK is started, and applies to any requests to start the profiler–regardless of
/// <code>lifecycle</code>– until the app resigns its active status. It is then reevaluated on subsequent
/// foreground events. The duration of time that a sample decision prevails between
/// launch/foreground and background is referred to as a profile session.
/// note:
/// Backgrounding and foregrounding the app starts a new user session and sampling is
/// re-evaluated. If there is no active trace when the app is backgrounded, profiling stops
/// before the app backgrounds. If there is an active trace and profiling is in-flight when the
/// app is foregrounded again, the same profiling session should continue until the last root
/// span in that trace finishes — this means that the re-evaluated sample rate does not actually
/// take effect until the profiler is started again.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic) float sessionSampleRate;
/// Start the profiler as early as possible during the app lifecycle to capture more activity
/// during your app’s launch.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// <code>sessionSampleRate</code> is evaluated on the previous launch and only takes effect when
/// app start profiling activates on the next launch.
/// note:
/// If <code>lifecycle</code> is <code>manual</code>, profiling is started automatically on startup, but you
/// must manually call <code>SentrySDK.stopProfiler()</code> whenever you app startup to be complete. If
/// <code>lifecycle</code> is <code>trace</code>, profiling is started automatically on startup, and will
/// automatically be stopped when the root span that is associated with app startup ends.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
@property (nonatomic) BOOL profileAppStarts;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Different modes for starting and stopping the profiler.
typedef SWIFT_ENUM(NSInteger, SentryProfileLifecycle, open) {
/// Profiling is controlled manually, and is independent of transactions & spans. Developers
/// must use<code>SentrySDK.startProfiler()</code> and <code>SentrySDK.stopProfiler()</code> to manage the profile
/// session. If the session is sampled, <code>SentrySDK.startProfiler()</code> will always start
/// profiling.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
  SentryProfileLifecycleManual = 0,
/// Profiling is automatically started when there is at least 1 active root span, and
/// automatically stopped when there are 0 root spans.
/// warning:
/// Continuous profiling is an experimental feature and may still contain bugs.
/// note:
/// This mode only works if tracing is enabled.
/// note:
/// Profiling respects both <code>SentryProfileOptions.profileSessionSampleRate</code> and
/// the existing sampling configuration for tracing
/// (<code>SentryOptions.tracesSampleRate</code>/<code>SentryOptions.tracesSampler</code>). Sampling will be
/// re-evaluated on a per root span basis.
/// note:
/// If there are multiple overlapping root spans, where some are sampled and some or
/// not, profiling will continue until the end of the last sampled root span. Profiling data
/// will not be linked with spans that are not sampled.
/// note:
/// When the last root span finishes, the profiler will continue running until the
/// end of the current timed interval. If a new root span starts before this interval
/// completes, the profiler will instead continue running until the next root span stops, at
/// which time it will attempt to stop again in the same way.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
  SentryProfileLifecycleTrace = 1,
};

@class SentryTraceHeader;
SWIFT_CLASS("_TtC6Sentry24SentryPropagationContext")
@interface SentryPropagationContext : NSObject
@property (nonatomic, readonly, strong) SentryId * _Nonnull traceId;
@property (nonatomic, readonly, strong) SentryTraceHeader * _Nonnull traceHeader;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithTraceId:(SentryId * _Nonnull)traceId spanId:(SentrySpanId * _Nonnull)spanId OBJC_DESIGNATED_INITIALIZER;
- (NSDictionary<NSString *, NSString *> * _Nonnull)traceContextForEvent SWIFT_WARN_UNUSED_RESULT;
/// Determines whether a trace should be continued based on the incoming baggage org ID
/// and the SDK options.
/// This method is intentionally not called from the Cocoa SDK’s own production code because
/// the Cocoa SDK is a mobile client SDK that does not receive incoming HTTP requests with
/// trace headers. It is exposed as a public utility for:
/// <ul>
///   <li>
///     Hybrid SDKs (React Native, Flutter, Capacitor) that handle inbound trace validation
///     in their JS/Dart layer and use the Cocoa SDK for options storage and outbound propagation
///   </li>
///   <li>
///     Any consumer that needs to validate incoming traces against org ID
///   </li>
/// </ul>
/// Decision matrix:
/// | Baggage org | SDK org | strict=false | strict=true |
/// |———––|———|———––|———––|
/// | 1           | 1       | Continue    | Continue    |
/// | None        | 1       | Continue    | New trace   |
/// | 1           | None    | Continue    | New trace   |
/// | None        | None    | Continue    | Continue    |
/// | 1           | 2       | New trace   | New trace   |
+ (BOOL)shouldContinueTraceWithOptions:(SentryOptions * _Nonnull)options baggageOrgId:(NSString * _Nullable)baggageOrgId SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_PROTOCOL_NAMED("SentryRRWebEventProtocol")
@protocol SentryRRWebEvent <SentrySerializable>
@end

SWIFT_CLASS("_TtC6Sentry16SentryRRWebEvent")
@interface SentryRRWebEvent : NSObject <SentryRRWebEvent>
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nullable data;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry22SentryRRWebCustomEvent")
@interface SentryRRWebCustomEvent : SentryRRWebEvent
@end

SWIFT_CLASS("_TtC6Sentry26SentryRRWebBreadcrumbEvent")
@interface SentryRRWebBreadcrumbEvent : SentryRRWebCustomEvent
- (nonnull instancetype)initWithTimestamp:(NSDate * _Nonnull)timestamp category:(NSString * _Nonnull)category message:(NSString * _Nullable)message data:(NSDictionary<NSString *, id> * _Nullable)data;
- (nonnull instancetype)initWithTimestamp:(NSDate * _Nonnull)timestamp category:(NSString * _Nonnull)category message:(NSString * _Nullable)message level:(SentryLevel)level data:(NSDictionary<NSString *, id> * _Nullable)data OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry20SentryRRWebSpanEvent")
@interface SentryRRWebSpanEvent : SentryRRWebCustomEvent
- (nonnull instancetype)initWithTimestamp:(NSDate * _Nonnull)timestamp endTimestamp:(NSDate * _Nonnull)endTimestamp operation:(NSString * _Nonnull)operation description:(NSString * _Nonnull)description data:(NSDictionary<NSString *, id> * _Nonnull)data OBJC_DESIGNATED_INITIALIZER;
@end

/// Protocol for generating random numbers.
SWIFT_PROTOCOL("_TtP6Sentry20SentryRandomProtocol_")
@protocol SentryRandomProtocol
/// Returns a random number uniformly distributed over the interval [0.0 , 1.0].
- (double)nextNumber SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry12SentryRandom")
@interface SentryRandom : NSObject <SentryRandomProtocol>
/// Returns a random number uniformly distributed over the interval [0.0 , 1.0].
- (double)nextNumber SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry18SentryReachability")
@interface SentryReachability : NSObject
- (void)addObserver:(id <SentryReachabilityObserver> _Nonnull)observer;
- (void)removeObserver:(id <SentryReachabilityObserver> _Nonnull)observer;
- (void)removeAllObservers;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Options for configuring what content should be redacted in session replays.
SWIFT_PROTOCOL("_TtP6Sentry19SentryRedactOptions_")
@protocol SentryRedactOptions
/// Whether all text content should be masked. Defaults to <code>true</code>.
@property (nonatomic, readonly) BOOL maskAllText;
/// Whether all images should be masked. Defaults to <code>true</code>.
@property (nonatomic, readonly) BOOL maskAllImages;
/// Additional view classes that should always be masked.
@property (nonatomic, readonly, copy) NSArray<Class> * _Nonnull maskedViewClasses;
/// View classes that should never be masked, overriding default masking behavior.
@property (nonatomic, readonly, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies.
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing
/// their subtrees to be traversed even if they would otherwise be excluded.
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
@end

SWIFT_CLASS("_TtC6Sentry26SentryRedactDefaultOptions")
@interface SentryRedactDefaultOptions : NSObject <SentryRedactOptions>
@property (nonatomic) BOOL maskAllText;
@property (nonatomic) BOOL maskAllImages;
@property (nonatomic, copy) NSArray<Class> * _Nonnull maskedViewClasses;
@property (nonatomic, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies (e.g., views that activate internal CoreAnimation
/// animations when their layers are accessed).
/// Matching uses partial string containment: if a view’s class name (from <code>type(of: view).description()</code>)
/// contains any of these strings, the subtree will be ignored. For example, “MyView” will match
/// “MyApp.MyView”, “MyViewSubclass”, “Some.MyView.Container”, etc.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing their subtrees
/// to be traversed even if they would otherwise be excluded by default or via <code>excludedViewClasses</code>.
/// Matching uses exact string matching: the view’s class name (from <code>type(of: view).description()</code>)
/// must exactly equal one of these strings. For example, “MyApp.MyView” will only match exactly “MyApp.MyView”,
/// not “MyApp.MyViewSubclass”.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches. For example,
/// if “ChromeCameraUI” is excluded and “Camera” is included, “ChromeCameraUI” will still be excluded
/// because “Camera” doesn’t exactly match “ChromeCameraUI”.
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_PROTOCOL("_TtP6Sentry31SentryReplayBreadcrumbConverter_")
@protocol SentryReplayBreadcrumbConverter <NSObject>
- (id <SentryRRWebEvent> _Nullable)convertFrom:(SentryBreadcrumb * _Nonnull)breadcrumb SWIFT_WARN_UNUSED_RESULT;
@end

enum SentryReplayType : NSInteger;
SWIFT_CLASS("_TtC6Sentry17SentryReplayEvent")
@interface SentryReplayEvent : SentryEvent
@property (nonatomic, readonly, copy) NSDate * _Nonnull replayStartTimestamp;
@property (nonatomic, readonly) enum SentryReplayType replayType;
/// Number of the segment in the replay.
/// This is an incremental number
@property (nonatomic, readonly) NSInteger segmentId;
/// This will be used to store the name of the screens
/// that appear during the duration of the replay segment.
@property (nonatomic, copy) NSArray<NSString *> * _Nullable urls;
- (nonnull instancetype)initWithEventId:(SentryId * _Nonnull)eventId replayStartTimestamp:(NSDate * _Nonnull)replayStartTimestamp replayType:(enum SentryReplayType)replayType segmentId:(NSInteger)segmentId OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
- (nonnull instancetype)initWithLevel:(SentryLevel)level SWIFT_UNAVAILABLE;
@end

/// Main container for network request/response tracking.
/// ObjC callers (SentryNetworkTracker) create this object and populate it
/// via <code>setRequest</code>/<code>setResponse</code>. Swift callers (SentrySRDefaultBreadcrumbConverter)
/// consume it via <code>serialize()</code>.
/// important:
/// <code>setRequest</code> and <code>setResponse</code> can be called concurrently from
/// <code>SentryNetworkTracker</code> because they write to independent properties.
/// Adding shared mutable state between will require adding synchronization.
SWIFT_CLASS("_TtC6Sentry26SentryReplayNetworkDetails")
@interface SentryReplayNetworkDetails : NSObject
/// Key used to store network details in breadcrumb data dictionary.
/// The __sentry key prefix strips this from event serialization.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull replayNetworkDetailsKey;)
+ (NSString * _Nonnull)replayNetworkDetailsKey SWIFT_WARN_UNUSED_RESULT;
/// Creates a new instance with the given HTTP method.
- (nonnull instancetype)initWithMethod:(NSString * _Nullable)method OBJC_DESIGNATED_INITIALIZER;
/// Sets request details from raw body data.
/// Parses the body data based on content type (JSON, form-urlencoded, text)
/// and applies size limits and truncation warnings automatically.
/// \param size Request body size in bytes, or nil if unknown.
///
/// \param bodyData Raw body bytes, or nil if body capture is disabled or unavailable.
///
/// \param contentType MIME content type for body parsing (e.g. “application/json”).
///
/// \param allHeaders All headers from the request (e.g. from <code>NSURLRequest.allHTTPHeaderFields</code>).
///
/// \param configuredHeaders Header names to extract, matched case-insensitively.
///
- (void)setRequestWithSize:(NSNumber * _Nullable)size bodyData:(NSData * _Nullable)bodyData contentType:(NSString * _Nullable)contentType allHeaders:(NSDictionary<NSString *, id> * _Nullable)allHeaders configuredHeaders:(NSArray<NSString *> * _Nullable)configuredHeaders;
/// Sets response details from raw body data.
/// Parses the body data based on content type (JSON, form-urlencoded, text)
/// and applies size limits and truncation warnings automatically.
/// \param statusCode HTTP status code.
///
/// \param size Response body size in bytes, or nil if unknown.
///
/// \param bodyData Raw body bytes, or nil if body capture is disabled or unavailable.
///
/// \param contentType MIME content type for body parsing (e.g. “application/json”).
///
/// \param allHeaders All headers from the response (e.g. from <code>NSHTTPURLResponse.allHeaderFields</code>).
///
/// \param configuredHeaders Header names to extract, matched case-insensitively.
///
- (void)setResponseWithStatusCode:(NSInteger)statusCode size:(NSNumber * _Nullable)size bodyData:(NSData * _Nullable)bodyData contentType:(NSString * _Nullable)contentType allHeaders:(NSDictionary<NSString *, id> * _Nullable)allHeaders configuredHeaders:(NSArray<NSString *> * _Nullable)configuredHeaders;
/// Serializes to dictionary for inclusion in breadcrumb data.
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

enum SentryReplayQuality : NSInteger;
SWIFT_CLASS("_TtC6Sentry19SentryReplayOptions")
@interface SentryReplayOptions : NSObject <SentryRedactOptions>
/// Indicates the percentage in which the replay for the session will be created.
/// note:
/// The value needs to be <code>>= 0.0</code> and <code><= 1.0</code>. When setting a value out of range the SDK sets it
/// to the default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.sessionSegmentDuration</code> for the default duration of the replay.
/// <ul>
///   <li>
///     Specifying @c 0 means never, @c 1.0 means always.
///   </li>
/// </ul>
@property (nonatomic) float sessionSampleRate;
/// Indicates the percentage in which a 30 seconds replay will be send with error events.
/// note:
/// The value needs to be >= 0.0 and <= 1.0. When setting a value out of range the SDK sets it
/// to the default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.errorReplayDuration</code> for the default duration of the replay.
/// <ul>
///   <li>
///     Specifying 0 means never, 1.0 means always.
///   </li>
/// </ul>
@property (nonatomic) float onErrorSampleRate;
/// Indicates whether session replay should redact all text in the app
/// by drawing a black rectangle over it.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.maskAllText</code> for the default value.
@property (nonatomic) BOOL maskAllText;
/// Indicates whether session replay should redact all non-bundled image
/// in the app by drawing a black rectangle over it.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.maskAllImages</code> for the default value.
@property (nonatomic) BOOL maskAllImages;
/// Indicates the quality of the replay.
/// The higher the quality, the higher the CPU and bandwidth usage.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.quality</code> for the default value.
@property (nonatomic) enum SentryReplayQuality quality;
/// A list of custom UIView subclasses that need
/// to be masked during session replay.
/// By default Sentry already mask text and image elements from UIKit
/// Every child of a view that is redacted will also be redacted.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.maskedViewClasses</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull maskedViewClasses;
/// A list of custom UIView subclasses to be ignored
/// during masking step of the session replay.
/// The views of given classes will not be redacted but their children may be.
/// This property has precedence over <code>redactViewTypes</code>.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.unmaskedViewClasses</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies (e.g., views that activate internal CoreAnimation
/// animations when their layers are accessed).
/// Matching uses partial string containment: if a view’s class name (from <code>type(of: view).description()</code>)
/// contains any of these strings, the subtree will be ignored. For example, “MyView” will match
/// “MyApp.MyView”, “MyViewSubclass”, “Some.MyView.Container”, etc.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing their subtrees
/// to be traversed even if they would otherwise be excluded by default or via <code>excludedViewClasses</code>.
/// Matching uses exact string matching: the view’s class name (from <code>type(of: view).description()</code>)
/// must exactly equal one of these strings. For example, “MyApp.MyView” will only match exactly “MyApp.MyView”,
/// not “MyApp.MyViewSubclass”.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+
/// by calling <code>includeViewTypeInSubtreeTraversal("CameraUI.ChromeSwiftUIView")</code>.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches. For example,
/// if “ChromeCameraUI” is excluded and “Camera” is included, “ChromeCameraUI” will still be excluded
/// because “Camera” doesn’t exactly match “ChromeCameraUI”.
@property (nonatomic, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
/// Adds a view type pattern to the excluded set, preventing matching views’ subtrees from being traversed.
/// note:
/// This method adds the pattern to <code>excludedViewClasses</code>, which is then combined with
/// default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and filtered by <code>includedViewClasses</code>
/// to produce the final set.
/// \param viewType The view type identifier pattern (as a string) to exclude from subtree traversal.
/// Matching uses partial string containment: if a view’s class name contains this string,
/// the subtree will be ignored. For example, “MyView” will match “MyApp.MyView”,
/// “MyViewSubclass”, etc.
///
- (void)excludeViewTypeFromSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Adds a view type to the included set, allowing its subtree to be traversed.
/// note:
/// This method adds the view type to <code>includedViewClasses</code>, which filters the combined set
/// of default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and <code>excludedViewClasses</code>.
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches.
/// \param viewType The view type identifier (as a string) to include in subtree traversal.
/// Must exactly match the result of <code>type(of: view).description()</code>.
/// For example, “MyApp.MyView” will only match exactly “MyApp.MyView”.
///
- (void)includeViewTypeInSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Alias for <code>enableViewRendererV2</code>.
/// This flag is deprecated and will be removed in a future version.
/// Please use <code>enableViewRendererV2</code> instead.
@property (nonatomic) BOOL enableExperimentalViewRenderer SWIFT_DEPRECATED_MSG("", "enableViewRendererV2");
/// Enables the up to 5x faster new view renderer used by the Session Replay integration.
/// Enabling this flag will reduce the amount of time it takes to render each frame of the session replay on the main thread, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// <em>up to 4-5x faster rendering</em> (reducing <code>~160ms</code> to <code>~36ms</code> per frame) on older devices.
/// experiment:
/// In case you are noticing issues with the new view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>.
/// Eventually, we will remove this feature flag and use the new view renderer by default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.enableViewRendererV2</code> for the default value.
@property (nonatomic) BOOL enableViewRendererV2;
/// Enables up to 5x faster but incomplete view rendering used by the Session Replay integration.
/// Enabling this flag will reduce the amount of time it takes to render each frame of the session replay on the main thread, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// up to <em>5x faster render times</em> (reducing <code>~160ms</code> to <code>~30ms</code> per frame).
/// This flag controls the way the view hierarchy is drawn into a graphics context for the session replay. By default, the view hierarchy is drawn using
/// the <code>UIView.drawHierarchy(in:afterScreenUpdates:)</code> method, which is the most complete way to render the view hierarchy. However,
/// this method can be slow, especially when rendering complex views, therefore enabling this flag will switch to render the underlying <code>CALayer</code> instead.
/// note:
/// This flag can only be used together with <code>enableViewRendererV2</code> with up to 20% faster render times.
/// warning:
/// Rendering the view hiearchy using the <code>CALayer.render(in:)</code> method can lead to rendering issues, especially when using custom views.
/// For complete rendering, it is recommended to set this option to <code>false</code>. In case you prefer performance over completeness, you can
/// set this option to <code>true</code>.
/// experiment:
/// This is an experimental feature and is therefore disabled by default. In case you are noticing issues with the experimental
/// view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>. Eventually, we will
/// mark this feature as stable and remove the experimental flag, but will keep it disabled by default.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.enableFastViewRendering</code> for the default value.
@property (nonatomic) BOOL enableFastViewRendering;
/// Whether to capture request and response bodies for allowed URLs.
/// When <code>true</code> (default), bodies will be captured and parsed (JSON bodies are
/// parsed for structured display in the Sentry UI).
/// When <code>false</code>, only headers and metadata will be captured for allowed URLs.
/// Default: <code>true</code>
/// note:
/// This setting only applies when <code>networkDetailAllowUrls</code> is non-empty.
/// note:
/// Bodies are automatically truncated to 150KB to prevent excessive memory usage.
/// note:
/// Requires <code>options.experimental.enableReplayNetworkDetailsCapturing</code> to be <code>true</code>.
@property (nonatomic) BOOL networkCaptureBodies;
/// Request headers to capture for allowed URLs during session replay.
/// Specifies which HTTP request headers should be captured and included in session replay
/// network details. Header matching is case-insensitive (e.g., “content-type”, “Content-Type”,
/// and “CoNtEnT-tYpE” are all equivalent).
/// Default (always included): <code>["Content-Type", "Content-Length", "Accept"]</code>
/// Example:
/// \code
/// options.sessionReplay.networkRequestHeaders = [
///     "Authorization",
///     "User-Agent"
/// ]
///
/// \endcodenote:
/// This setting only applies when <code>networkDetailAllowUrls</code> is non-empty.
/// note:
/// Header names preserve the case seen on the request, not the case specified here.
/// note:
/// Requires <code>options.experimental.enableReplayNetworkDetailsCapturing</code> to be <code>true</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nonnull networkRequestHeaders;
/// Response headers to capture for allowed URLs during session replay.
/// Specifies which HTTP response headers should be captured and included in session replay
/// network details. Header matching is case-insensitive (e.g., “content-type”, “Content-Type”,
/// and “CoNtEnT-tYpE” are all equivalent).
/// Default (always included): <code>["Content-Type", "Content-Length", "Accept"]</code>
/// Example:
/// \code
/// options.sessionReplay.networkResponseHeaders = [
///     "Cache-Control",    // Custom header
///     "Set-Cookie"        // Custom header
/// ]
///
/// \endcodenote:
/// This setting only applies when <code>networkDetailAllowUrls</code> is non-empty.
/// note:
/// Header names preserve the case seen on the response, not the case specified here.
/// note:
/// Requires <code>options.experimental.enableReplayNetworkDetailsCapturing</code> to be <code>true</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nonnull networkResponseHeaders;
/// Defines the quality of the session replay.
/// Higher bit rates better quality, but also bigger files to transfer.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.quality</code> for the default value.
@property (nonatomic, readonly) NSInteger replayBitRate;
/// The scale related to the window size at which the replay will be created
/// note:
/// The scale is used to reduce the size of the replay.
@property (nonatomic, readonly) float sizeScale;
/// Number of frames per second of the replay.
/// The more the havier the process is.
/// The minimum is 1, if set to zero this will change to 1.
/// note:
/// See <code>SentryReplayOptions.DefaultValues.frameRate</code> for the default value.
@property (nonatomic) NSUInteger frameRate;
/// The maximum duration of replays for error events.
@property (nonatomic) NSTimeInterval errorReplayDuration;
/// The maximum duration of the segment of a session replay.
@property (nonatomic) NSTimeInterval sessionSegmentDuration;
/// The maximum duration of a replay session.
/// note:
/// See  <code>SentryReplayOptions.DefaultValues.maximumDuration</code> for the default value.
@property (nonatomic) NSTimeInterval maximumDuration;
/// Determines if network detail capture is enabled for a given URL.
/// \param urlString The URL string to check
///
///
/// returns:
/// <code>true</code> if network details should be captured for this URL, <code>false</code> otherwise
- (BOOL)isNetworkDetailCaptureEnabledFor:(NSString * _Nonnull)urlString SWIFT_WARN_UNUSED_RESULT;
/// Initialize session replay options disabled
/// note:
/// This initializer is added for Objective-C compatibility, as constructors with default values
/// are not supported in Objective-C.
/// note:
/// See <code>SentryReplayOptions.DefaultValues</code> for the default values of each parameter.
- (nonnull instancetype)init;
/// Initializes a new instance of <code>SentryReplayOptions</code> using a dictionary.
/// warning:
/// This initializer is primarily used by Hybrid SDKs and is not intended for public use.
/// \param dictionary A dictionary containing the configuration options for the session replay.
///
- (nonnull instancetype)initWithDictionary:(NSDictionary<NSString *, id> * _Nonnull)dictionary;
/// Initializes a new instance of <code>SentryReplayOptions</code> with the specified parameters.
/// note:
/// See <code>SentryReplayOptions.DefaultValues</code> for the default values of each parameter.
/// \param sessionSampleRate Sample rate used to determine the percentage of replays of sessions that will be uploaded.
///
/// \param onErrorSampleRate Sample rate used to determine the percentage of replays of error events that will be uploaded.
///
/// \param maskAllText Flag to redact all text in the app by drawing a rectangle over it.
///
/// \param maskAllImages Flag to redact all images in the app by drawing a rectangle over it.
///
/// \param enableViewRendererV2 Enables the up to 5x faster view renderer.
///
/// \param enableFastViewRendering Enables faster but incomplete view rendering. See <code>SentryReplayOptions.enableFastViewRendering</code> for more information.
///
- (nonnull instancetype)initWithSessionSampleRate:(float)sessionSampleRate onErrorSampleRate:(float)onErrorSampleRate maskAllText:(BOOL)maskAllText maskAllImages:(BOOL)maskAllImages enableViewRendererV2:(BOOL)enableViewRendererV2 enableFastViewRendering:(BOOL)enableFastViewRendering;
@end

/// Enum to define the quality of the session replay.
typedef SWIFT_ENUM(NSInteger, SentryReplayQuality, open) {
/// Video Scale: 80%
/// Bit Rate: 20.000
  SentryReplayQualityLow = 0,
/// Video Scale: 100%
/// Bit Rate: 40.000
  SentryReplayQualityMedium = 1,
/// Video Scale: 100%
/// Bit Rate: 60.000
  SentryReplayQualityHigh = 2,
};

@class SentryVideoInfo;
SWIFT_CLASS("_TtC6Sentry21SentryReplayRecording")
@interface SentryReplayRecording : NSObject
- (nonnull instancetype)initWithSegmentId:(NSInteger)segmentId video:(SentryVideoInfo * _Nonnull)video extraEvents:(NSArray<id <SentryRRWebEvent>> * _Nonnull)extraEvents;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

typedef SWIFT_ENUM(NSInteger, SentryReplayType, open) {
  SentryReplayTypeSession = 0,
  SentryReplayTypeBuffer = 1,
};

/// The main entry point for the Sentry SDK.
/// We recommend using <code>start(configureOptions:)</code> to initialize Sentry.
SWIFT_CLASS("_TtC6Sentry9SentrySDK")
@interface SentrySDK : NSObject
/// The current active transaction or span bound to the scope.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) id <SentrySpan> _Nullable span;)
+ (id <SentrySpan> _Nullable)span SWIFT_WARN_UNUSED_RESULT;
/// Indicates whether the Sentry SDK is enabled.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) BOOL isEnabled;)
+ (BOOL)isEnabled SWIFT_WARN_UNUSED_RESULT;
/// API to access Sentry logs
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryLogger * _Nonnull logger;)
+ (SentryLogger * _Nonnull)logger SWIFT_WARN_UNUSED_RESULT;
/// Inits and configures Sentry (<code>SentryHub</code>, <code>SentryClient</code>) and sets up all integrations. Make sure to
/// set a valid DSN.
/// note:
/// Call this method on the main thread. When calling it from a background thread, the
/// SDK starts on the main thread async.
+ (void)startWithOptions:(SentryOptions * _Nonnull)options;
/// Inits and configures Sentry (<code>SentryHub</code>, <code>SentryClient</code>) and sets up all integrations. Make sure to
/// set a valid DSN.
/// note:
/// Call this method on the main thread. When calling it from a background thread, the
/// SDK starts on the main thread async.
+ (void)startWithConfigureOptions:(void (^ _Nonnull)(SentryOptions * _Nonnull))configureOptions;
/// Captures a manually created event and sends it to Sentry.
/// \param event The event to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event;
/// Captures a manually created event and sends it to Sentry. Only the data in this scope object will
/// be added to the event. The global scope will be ignored.
/// \param event The event to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScope:(SentryScope * _Nonnull)scope;
/// Captures a manually created event and sends it to Sentry. Maintains the global scope but mutates
/// scope data for only this call.
/// \param event The event to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures a manually created event and sends it to Sentry, with a per-call override for
/// attaching all threads with stack traces.
/// \param event The event to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureEvent:(SentryEvent * _Nonnull)event attachAllThreads:(BOOL)attachAllThreads;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param name The transaction name.
///
/// \param operation Short code identifying the type of operation the span is measuring.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithName:(NSString * _Nonnull)name operation:(NSString * _Nonnull)operation bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param bindToScope Indicates whether the SDK should bind the new transaction to the scope.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext bindToScope:(BOOL)bindToScope customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Creates a transaction, binds it to the hub and returns the instance.
/// \param transactionContext The transaction context.
///
/// \param customSamplingContext Additional information about the sampling context.
///
///
/// returns:
/// The created transaction.
+ (id <SentrySpan> _Nonnull)startTransactionWithContext:(SentryTransactionContext * _Nonnull)transactionContext customSamplingContext:(NSDictionary<NSString *, id> * _Nonnull)customSamplingContext;
/// Captures an error event and sends it to Sentry.
/// \param error The error to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error;
/// Captures an error event and sends it to Sentry. Only the data in this scope object will be added
/// to the event. The global scope will be ignored.
/// \param error The error to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScope:(SentryScope * _Nonnull)scope;
/// Captures an error event and sends it to Sentry. Maintains the global scope but mutates scope data
/// for only this call.
/// \param error The error to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures an error event and sends it to Sentry, with a per-call override for attaching all
/// threads with stack traces.
/// \param error The error to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureError:(NSError * _Nonnull)error attachAllThreads:(BOOL)attachAllThreads;
/// Captures an exception event and sends it to Sentry.
/// \param exception The exception to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception;
/// Captures an exception event and sends it to Sentry. Only the data in this scope object will be
/// added to the event. The global scope will be ignored.
/// \param exception The exception to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScope:(SentryScope * _Nonnull)scope;
/// Captures an exception event and sends it to Sentry. Maintains the global scope but mutates scope
/// data for only this call.
/// \param exception The exception to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures an exception event and sends it to Sentry, with a per-call override for attaching
/// all threads with stack traces.
/// \param exception The exception to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureException:(NSException * _Nonnull)exception attachAllThreads:(BOOL)attachAllThreads;
/// Captures a message event and sends it to Sentry.
/// \param message The message to send to Sentry.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message;
/// Captures a message event and sends it to Sentry. Only the data in this scope object will be added
/// to the event. The global scope will be ignored.
/// \param message The message to send to Sentry.
///
/// \param scope The scope containing event metadata.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScope:(SentryScope * _Nonnull)scope;
/// Captures a message event and sends it to Sentry. Maintains the global scope but mutates scope
/// data for only this call.
/// \param message The message to send to Sentry.
///
/// \param block The block mutating the scope only for this call.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message withScopeBlock:(void (^ _Nonnull)(SentryScope * _Nonnull))block;
/// Captures a message event and sends it to Sentry, with a per-call override for attaching all
/// threads with stack traces.
/// \param message The message to send to Sentry.
///
/// \param attachAllThreads Whether to attach all threads with full stack traces. Overrides <code>Options.attachAllThreads</code>.
///
///
/// returns:
/// The <code>SentryId</code> of the event or <code>SentryId.empty</code> if the event is not sent.
+ (SentryId * _Nonnull)captureMessage:(NSString * _Nonnull)message attachAllThreads:(BOOL)attachAllThreads;
/// Captures user feedback that was manually gathered and sends it to Sentry.
/// warning:
/// This is an experimental feature and may still have bugs.
/// note:
/// If you’d prefer not to build the UI required to gather the feedback from the user,
/// configure the managed form with <code>SentryOptions.configureUserFeedback</code> and present it with
/// <code>SentrySDK.feedback.show()</code>, <code>SentrySDK.FeedbackForm</code>, or SwiftUI’s
/// <code>sentryFeedback(isPresented:)</code>. See https://docs.sentry.io/platforms/apple/user-feedback/
/// for more information.
/// \param feedback The feedback to send to Sentry.
///
+ (void)captureFeedback:(SentryFeedback * _Nonnull)feedback;
/// Adds a <code>Breadcrumb</code> to the current <code>Scope</code> of the current <code>Hub</code>. If the total number of breadcrumbs
/// exceeds the <code>SentryOptions.maxBreadcrumbs</code> the SDK removes the oldest breadcrumb.
/// \param crumb The <code>Breadcrumb</code> to add to the current <code>Scope</code> of the current <code>Hub</code>.
///
+ (void)addBreadcrumb:(SentryBreadcrumb * _Nonnull)crumb;
/// Use this method to modify the current <code>Scope</code> of the current <code>Hub</code>. The SDK uses the <code>Scope</code> to attach
/// contextual data to events.
/// \param callback The callback for configuring the current <code>Scope</code> of the current <code>Hub</code>.
///
+ (void)configureScope:(void (^ _Nonnull)(SentryScope * _Nonnull))callback;
/// Checks if the last program execution terminated with a crash.
/// warning:
/// This property returns <code>false</code> both when the app did not crash <em>and</em> when
/// the crash status is not yet known (before the SDK finishes initialization). Use
/// <code>lastRunStatus</code> instead, which distinguishes between these cases.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) BOOL crashedLastRun SWIFT_DEPRECATED_MSG("Use lastRunStatus instead, which distinguishes between 'did not crash' and 'unknown'.");)
+ (BOOL)crashedLastRun SWIFT_WARN_UNUSED_RESULT;
/// Returns the crash status of the last program execution.
/// Before <code>SentrySDK/start(configureOptions:)</code> finishes initializing the crash reporter,
/// this property returns <code>SentryLastRunStatus/unknown</code>. After initialization it returns
/// either <code>SentryLastRunStatus/didCrash</code> or <code>SentryLastRunStatus/didNotCrash</code>.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) enum SentryLastRunStatus lastRunStatus;)
+ (enum SentryLastRunStatus)lastRunStatus SWIFT_WARN_UNUSED_RESULT;
/// Checks if the SDK detected a start-up crash during SDK initialization.
/// note:
/// The SDK init waits synchronously for up to 5 seconds to flush out events if the app crashes
/// within 2 seconds after the SDK init.
///
/// returns:
/// true if the SDK detected a start-up crash and false if not.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) BOOL detectedStartUpCrash;)
+ (BOOL)detectedStartUpCrash SWIFT_WARN_UNUSED_RESULT;
/// Set <code>user</code> to the current <code>Scope</code> of the current <code>Hub</code>.
/// note:
/// You must start the SDK before calling this method, otherwise it doesn’t set the user.
/// \param user The user to set to the current <code>Scope</code>.
///
+ (void)setUser:(SentryUser * _Nullable)user;
/// Starts a new <code>SentrySession</code>. If there’s a running <code>SentrySession</code>, it ends it before starting the
/// new one. You can use this method in combination with <code>endSession</code> to manually track
/// sessions. The SDK uses <code>SentrySession</code> to inform Sentry about release and project
/// associated project health.
+ (void)startSession;
/// Ends the current <code>SentrySession</code>. You can use this method in combination with <code>startSession</code> to
/// manually track <code>SentrySessions</code>. The SDK uses <code>SentrySession</code> to inform Sentry about release and
/// project associated project health.
+ (void)endSession;
/// This forces a crash, useful to test the <code>SentryCrash</code> integration.
/// note:
/// The SDK can’t report a crash when a debugger is attached. Your application needs to run
/// without a debugger attached to capture the crash and send it to Sentry the next time you launch
/// your application.
+ (void)crash;
/// Reports to the ongoing <code>UIViewController</code> transaction
/// that the screen contents are fully loaded and displayed,
/// which will create a new span.
/// seealso:
///
/// https://docs.sentry.io/platforms/cocoa/performance/instrumentation/automatic-instrumentation/#time-to-full-display
+ (void)reportFullyDisplayed;
/// Pauses sending detected app hangs to Sentry.
/// This method doesn’t close the detection of app hangs. Instead, the app hang detection
/// will ignore detected app hangs until you call <code>resumeAppHangTracking</code>.
+ (void)pauseAppHangTracking;
/// Resumes sending detected app hangs to Sentry.
+ (void)resumeAppHangTracking;
/// Waits synchronously for the SDK to flush out all queued and cached items for up to the specified
/// timeout in seconds. If there is no internet connection, the function returns immediately. The SDK
/// doesn’t dispose the client or the hub.
/// note:
/// This might take slightly longer than the specified timeout if there are many batched logs to capture.
/// \param timeout The time to wait for the SDK to complete the flush.
///
+ (void)flush:(NSTimeInterval)timeout;
/// Closes the SDK, uninstalls all the integrations, and calls <code>flush</code> with
/// <code>SentryOptions.shutdownTimeInterval</code>.
+ (void)close;
/// Start a new continuous profiling session if one is not already running.
/// warning:
/// Continuous profiling mode is experimental and may still contain bugs.
/// note:
/// Unlike transaction-based profiling, continuous profiling does not take into account
/// <code>SentryOptions.profilesSampleRate</code> or <code>SentryOptions.profilesSampler</code>. If either of those
/// options are set, this method does nothing.
/// note:
/// Taking into account the above note, if <code>SentryOptions.configureProfiling</code> is not set,
/// calls to this method will always start a profile if one is not already running.
/// note:
/// If neither <code>SentryOptions.profilesSampleRate</code> nor <code>SentryOptions.profilesSampler</code> are
/// set, and <code>SentryOptions.configureProfiling</code> is set, this method does nothing if the profiling
/// session is not sampled with respect to <code>SentryOptions.profileSessionSampleRate</code>, or if it is
/// sampled but the profiler is already running.
/// note:
/// If neither <code>SentryOptions.profilesSampleRate</code> nor <code>SentryOptions.profilesSampler</code> are
/// set, and <code>SentryOptions.configureProfiling</code> is set, this method does nothing if
/// <code>SentryOptions.profileLifecycle</code> is set to <code>trace</code>. In this scenario, the profiler is
/// automatically started and stopped depending on whether there is an active sampled span, so it is
/// not permitted to manually start profiling.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
/// seealso:
/// https://docs.sentry.io/platforms/apple/guides/ios/profiling/#continuous-profiling
+ (void)startProfiler;
/// Stop a continuous profiling session if there is one ongoing.
/// warning:
/// Continuous profiling mode is experimental and may still contain bugs.
/// note:
/// Does nothing if <code>SentryOptions.profileLifecycle</code> is set to <code>trace</code>.
/// note:
/// Does not immediately stop the profiler. Profiling data is uploaded at regular timed
/// intervals; when the current interval completes, then the profiler stops and the data gathered
/// during that last interval is uploaded.
/// note:
/// If a new call to <code>startProfiler</code> that would start the profiler is made before the last
/// interval completes, the profiler will continue running until another call to stop is made.
/// note:
/// Profiling is automatically disabled if a thread sanitizer is attached.
/// seealso:
/// https://docs.sentry.io/platforms/apple/guides/ios/profiling/#continuous-profiling
+ (void)stopProfiler;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) SentryOptions * _Nullable startOption;)
+ (SentryOptions * _Nullable)startOption SWIFT_WARN_UNUSED_RESULT;
+ (void)setStartWith:(SentryOptions * _Nullable)option;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// A note on the thread safety:
/// The methods configure and log don’t use synchronization mechanisms, meaning they aren’t strictly speaking thread-safe.
/// Still, you can use log from multiple threads. The problem is that when you call configure while
/// calling log from multiple threads, you experience a race condition. It can take a bit until all
/// threads know the new config. As the SDK should only call configure once when starting, we do accept
/// this race condition. Adding locks for evaluating the log level for every log invocation isn’t
/// acceptable, as this adds a significant overhead for every log call. Therefore, we exclude SentryLog
/// from the ThreadSanitizer as it produces false positives. The tests call configure multiple times,
/// and the thread sanitizer would surface these race conditions. We accept these race conditions for
/// the log messages in the tests over adding locking for all log messages.
SWIFT_CLASS("_TtC6Sentry12SentrySDKLog")
@interface SentrySDKLog : NSObject
+ (void)logWithMessage:(NSString * _Nonnull)message andLevel:(SentryLevel)level;
/// @return @c YES if the current logging configuration will log statements at the current level,
/// @c NO if not.
+ (BOOL)willLogAtLevel:(SentryLevel)level SWIFT_WARN_UNUSED_RESULT;
/// Sets a custom log output handler. This allows hybrid SDKs (React Native, Flutter, etc.)
/// to intercept SDK log messages and forward them to their respective consoles.
/// note:
/// Exposed through <code>PrivateSentrySDKOnly.setLogOutput</code> for hybrid SDK consumption.
/// \param output A closure to handle log output. If <code>nil</code> is passed (which can happen
/// from Objective-C callers despite nullability annotations), the default <code>print</code> handler is used.
///
+ (void)setOutput:(void (^ _Nullable)(NSString * _Nonnull))output;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry19SentrySDKLogSupport")
@interface SentrySDKLogSupport : NSObject
+ (void)configure:(BOOL)isDebug diagnosticLevel:(SentryLevel)diagnosticLevel;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry34SentrySRDefaultBreadcrumbConverter")
@interface SentrySRDefaultBreadcrumbConverter : NSObject <SentryReplayBreadcrumbConverter>
/// This function will convert the SDK breadcrumbs to session replay breadcrumbs in a format that the front-end understands.
/// Any deviation in the information will cause the breadcrumb or the information itself to be discarded
/// in order to avoid unknown behavior in the front-end.
- (id <SentryRRWebEvent> _Nullable)convertFrom:(SentryBreadcrumb * _Nonnull)breadcrumb SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// A storage class to hold the data associated with a single profiler sample.
SWIFT_CLASS("_TtC6Sentry12SentrySample")
@interface SentrySample : NSObject
@property (nonatomic) uint64_t absoluteTimestamp;
@property (nonatomic) NSTimeInterval absoluteNSDateInterval;
@property (nonatomic, strong) NSNumber * _Nonnull stackIndex;
@property (nonatomic) uint64_t threadID;
@property (nonatomic, copy) NSString * _Nullable queueAddress;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry21SentrySamplerDecision")
@interface SentrySamplerDecision : NSObject
@property (nonatomic, readonly) SentrySampleDecision decision;
@property (nonatomic, readonly, strong) NSNumber * _Nullable sampleRand;
@property (nonatomic, readonly, strong) NSNumber * _Nullable sampleRate;
- (nonnull instancetype)initWithDecision:(SentrySampleDecision)decision forSampleRate:(NSNumber * _Nullable)sampleRate withSampleRand:(NSNumber * _Nullable)sampleRand OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_PROTOCOL("_TtP6Sentry19SentryScopeObserver_")
@protocol SentryScopeObserver <NSObject>
- (void)setUser:(SentryUser * _Nullable)user;
- (void)setTags:(NSDictionary<NSString *, NSString *> * _Nullable)tags;
- (void)setExtras:(NSDictionary<NSString *, id> * _Nullable)extras;
- (void)setContext:(NSDictionary<NSString *, NSDictionary<NSString *, id> *> * _Nullable)context;
- (void)setTraceContext:(NSDictionary<NSString *, id> * _Nullable)traceContext;
- (void)setDist:(NSString * _Nullable)dist;
- (void)setEnvironment:(NSString * _Nullable)environment;
- (void)setFingerprint:(NSArray<NSString *> * _Nullable)fingerprint;
- (void)setLevel:(SentryLevel)level;
- (void)setAttributes:(NSDictionary<NSString *, id> * _Nullable)attributes;
- (void)addSerializedBreadcrumb:(NSDictionary<NSString *, id> * _Nonnull)serializedBreadcrumb;
- (void)clearBreadcrumbs;
- (void)clear;
@optional
- (void)setCurrentScreen:(NSString * _Nullable)currentScreen;
@end

SWIFT_CLASS("_TtC6Sentry26SentryScopePersistentStore")
@interface SentryScopePersistentStore : NSObject
- (void)moveAllCurrentStateToPreviousState;
- (NSDictionary<NSString *, NSDictionary<NSString *, id> *> * _Nullable)readPreviousContextFromDisk SWIFT_WARN_UNUSED_RESULT;
- (SentryUser * _Nullable)readPreviousUserFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)readPreviousDistFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)readPreviousEnvironmentFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, NSString *> * _Nullable)readPreviousTagsFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, id> * _Nullable)readPreviousExtrasFromDisk SWIFT_WARN_UNUSED_RESULT;
- (NSArray<NSString *> * _Nullable)readPreviousFingerprintFromDisk SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry17SentrySdkInfoObjC")
@interface SentrySdkInfoObjC : NSObject
+ (NSDictionary<NSString *, id> * _Nonnull)optionsToDict:(SentryOptions * _Nonnull)options SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry16SentrySdkPackage")
@interface SentrySdkPackage : NSObject
+ (NSDictionary<NSString *, NSString *> * _Nullable)global SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry24SentrySerializationSwift")
@interface SentrySerializationSwift : NSObject
+ (SentrySession * _Nullable)sessionWithData:(NSData * _Nonnull)data SWIFT_WARN_UNUSED_RESULT;
+ (SentryAppState * _Nullable)appStateWithData:(NSData * _Nonnull)data SWIFT_WARN_UNUSED_RESULT;
+ (NSData * _Nullable)dataWithJSONObject:(id _Nonnull)jsonObject SWIFT_WARN_UNUSED_RESULT;
+ (NSData * _Nullable)dataWithEnvelope:(SentryEnvelope * _Nonnull)envelope SWIFT_WARN_UNUSED_RESULT;
+ (NSData * _Nullable)dataWithSession:(SentrySession * _Nonnull)session SWIFT_WARN_UNUSED_RESULT;
+ (SentryEnvelope * _Nullable)envelopeWithData:(NSData * _Nonnull)data SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSUUID;
/// The SDK uses SentrySession to inform Sentry about release and project associated project health.
SWIFT_CLASS("_TtC6Sentry13SentrySession")
@interface SentrySession : NSObject <NSCopying>
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// Designated initializer.
- (nonnull instancetype)initWithReleaseName:(NSString * _Nonnull)releaseName distinctId:(NSString * _Nonnull)distinctId OBJC_DESIGNATED_INITIALIZER;
/// Initializes @c SentrySession from a JSON object.
/// @param jsonObject The @c jsonObject containing the session.
/// @return The @c SentrySession or @c nil if @c jsonObject contains an error.
- (nullable instancetype)initWithJSONObject:(NSDictionary<NSString *, id> * _Nonnull)jsonObject OBJC_DESIGNATED_INITIALIZER;
- (void)endSessionExitedWithTimestamp:(NSDate * _Nonnull)timestamp;
- (void)endSessionCrashedWithTimestamp:(NSDate * _Nonnull)timestamp;
- (void)endSessionAbnormalWithTimestamp:(NSDate * _Nonnull)timestamp;
- (void)incrementErrors;
- (void)setFlagInit;
- (NSDictionary<NSString *, id> * _Nonnull)serialize SWIFT_WARN_UNUSED_RESULT;
- (id _Nonnull)copyWithZone:(struct _NSZone * _Nullable)zone SWIFT_WARN_UNUSED_RESULT;
@property (nonatomic, readonly, copy) NSUUID * _Nonnull sessionId;
@property (nonatomic, readonly, copy) NSDate * _Nonnull started;
@property (nonatomic) NSUInteger errors;
@property (nonatomic, readonly) NSUInteger sequence;
@property (nonatomic, readonly, copy) NSString * _Nonnull distinctId;
@property (nonatomic, readonly, strong) NSNumber * _Nullable flagInit;
@property (nonatomic, readonly, copy) NSDate * _Nullable timestamp;
@property (nonatomic, readonly, strong) NSNumber * _Nullable duration;
@property (nonatomic, readonly, copy) NSString * _Nullable releaseName;
@property (nonatomic, copy) NSString * _Nullable environment;
@property (nonatomic, copy) NSString * _Nullable abnormalMechanism;
@end

SWIFT_PROTOCOL("_TtP6Sentry21SentrySessionListener_")
@protocol SentrySessionListener
/// Called on the main thread when a session ends.
- (void)sentrySessionEndedWithSession:(SentrySession * _Nonnull)session;
/// Called on the main thread when a session starts.
- (void)sentrySessionStartedWithSession:(SentrySession * _Nonnull)session;
@end

/// Detects shake gestures by swizzling <code>UIWindow.motionEnded(_:with:)</code> on iOS/iPadOS.
/// When a shake gesture is detected, posts a <code>.SentryShakeDetected</code> notification.
/// Use <code>enable()</code> to start detection and <code>disable()</code> to stop it.
/// Swizzling is performed at most once regardless of how many times <code>enable()</code> is called.
/// On non-iOS platforms (macOS, tvOS, watchOS), these methods are no-ops.
SWIFT_CLASS_NAMED("SentryShakeDetector")
@interface SentryShakeDetector : NSObject
/// The notification name posted on shake, exposed for ObjC consumers.
/// In Swift, prefer using <code>.SentryShakeDetected</code> on <code>NSNotification.Name</code> directly.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) NSNotificationName _Nonnull shakeDetectedNotification;)
+ (NSNotificationName _Nonnull)shakeDetectedNotification SWIFT_WARN_UNUSED_RESULT;
/// No-op on non-iOS platforms.
+ (void)enable;
/// No-op on non-iOS platforms.
+ (void)disable;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry31SentrySwiftIntegrationInstaller")
@interface SentrySwiftIntegrationInstaller : NSObject
+ (void)installWith:(SentryOptions * _Nonnull)options;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry29SentrySwizzleClassNameExclude")
@interface SentrySwizzleClassNameExclude : NSObject
+ (BOOL)shouldExcludeClassWithClassName:(NSString * _Nonnull)className swizzleClassNameExcludes:(NSSet<NSString *> * _Nonnull)swizzleClassNameExcludes SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// A wrapper around sysctl for testability.
SWIFT_CLASS("_TtC6Sentry12SentrySysctl")
@interface SentrySysctl : NSObject
/// Returns the time the system was booted with a precision of microseconds.
/// @warning We must not send this information off device because Apple forbids that.
/// We are allowed send the amount of time that has elapsed between events that occurred within the
/// app though. For more information see
/// https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api#4278394.
@property (nonatomic, readonly, copy) NSDate * _Nonnull systemBootTimestamp;
@property (nonatomic, readonly, copy) NSDate * _Nonnull processStartTimestamp;
/// The system time that the process started, as measured in @c SentrySysctl.load, essentially the
/// earliest time we can record a system timestamp, which is the number of nanoseconds since the
/// device booted, which is why we can’t simply convert @c processStartTimestamp to the nanosecond
/// representation of its @c timeIntervalSinceReferenceDate .
@property (nonatomic, readonly) uint64_t runtimeInitSystemTimestamp;
@property (nonatomic, readonly, copy) NSDate * _Nonnull runtimeInitTimestamp;
@property (nonatomic, readonly, copy) NSDate * _Nonnull moduleInitializationTimestamp;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@protocol SentryTelemetryProcessorTransport;
/// Factory for creating telemetry processors.
/// Unlike integrations (e.g., <code>SentryMetricsIntegration</code>), this factory cannot yet use the full dependency injection pattern
/// because the <code>SentryTelemetryProcessorTransport</code> is created in <code>SentryClient</code> (Objective-C) and must be passed in explicitly.
/// <em>Current approach:</em>
/// <ul>
///   <li>
///     Public method: <code>getProcessor(transport:dependencies:)</code> - called from Objective-C with concrete <code>SentryDependencyContainer</code>
///   </li>
///   <li>
///     Internal method: <code>getProcessorInternal(transport:dependencies:)</code> - uses protocol-constrained generics for testability
///   </li>
/// </ul>
/// <em>Future migration path:</em>
/// Once the transport is resolved via DI, we can refactor to match the integration pattern:
/// \code
/// init?(transport: SentryTelemetryProcessorTransport, dependencies: Dependencies)
///
/// \endcodeThe internal method is already structured to make this transition straightforward.
SWIFT_CLASS("_TtC6Sentry31SentryTelemetryProcessorFactory")
@interface SentryTelemetryProcessorFactory : NSObject
+ (id <SentryObjCTelemetryProcessor> _Nonnull)getProcessorWithTransport:(id <SentryTelemetryProcessorTransport> _Nonnull)transport dependencies:(SentryDependencyContainer * _Nonnull)dependencies SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Lightweight transport abstraction used by the telemetry processor to send envelopes.
/// Exists because using the Objective-C <code>SentryTransport</code> adapter directly from Swift pulls in many ObjC dependencies
/// and caused build/compile issues; we only need envelope sending here, so this protocol keeps it minimal.
SWIFT_PROTOCOL("_TtP6Sentry33SentryTelemetryProcessorTransport_")
@protocol SentryTelemetryProcessorTransport
- (void)sendEnvelopeWithEnvelope:(SentryEnvelope * _Nonnull)envelope;
@end

SWIFT_PROTOCOL("_TtP6Sentry22SentryThreadInspecting_")
@protocol SentryThreadInspecting
- (NSArray<SentryThread *> * _Nonnull)getCurrentThreadsWithStackTrace SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)getThreadName:(NSUInteger)thread SWIFT_WARN_UNUSED_RESULT;
@end

@class SentryStacktrace;
SWIFT_CLASS("_TtC6Sentry21SentryThreadInspector")
@interface SentryThreadInspector : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
- (SentryStacktrace * _Nullable)stacktraceForCurrentThreadAsyncUnsafe SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryThread *> * _Nonnull)getCurrentThreadsWithStackTrace SWIFT_WARN_UNUSED_RESULT;
- (NSArray<SentryThread *> * _Nonnull)getCurrentThreads SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)getThreadName:(NSUInteger)thread SWIFT_WARN_UNUSED_RESULT;
@end

SWIFT_CLASS("_TtC6Sentry19SentryThreadWrapper")
@interface SentryThreadWrapper : NSObject
- (void)sleepForTimeInterval:(NSTimeInterval)timeInterval;
- (void)threadStarted:(NSUUID * _Nonnull)threadID;
- (void)threadFinished:(NSUUID * _Nonnull)threadID;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Describes the source of the transaction name.
/// This is used to indicate how the transaction name was determined, which affects
/// how Sentry processes and groups transactions.
typedef SWIFT_ENUM(NSInteger, SentryTransactionNameSource, open) {
/// The name was set manually by the user.
  kSentryTransactionNameSourceCustom SWIFT_COMPILE_NAME("custom") = 0,
/// The name was derived from the request URL.
  kSentryTransactionNameSourceUrl SWIFT_COMPILE_NAME("url") = 1,
/// The name was derived from a routing framework.
  kSentryTransactionNameSourceRoute SWIFT_COMPILE_NAME("route") = 2,
/// The name was derived from a UI view or screen.
  kSentryTransactionNameSourceView SWIFT_COMPILE_NAME("view") = 3,
/// The name was derived from a UI component.
  kSentryTransactionNameSourceComponent SWIFT_COMPILE_NAME("component") = 4,
/// The name was derived from a background task.
  kSentryTransactionNameSourceTask SWIFT_COMPILE_NAME("sourceTask") = 5,
};

/// Use this protocol to customize the name used in the automatic
/// UIViewController performance tracker, view hierarchy, and breadcrumbs.
SWIFT_PROTOCOL("_TtP6Sentry32SentryUIViewControllerDescriptor_")
@protocol SentryUIViewControllerDescriptor <NSObject>
/// The custom name of the UIViewController
/// that the Sentry SDK uses for transaction names, breadcrumbs, and
/// view hierarchy.
@property (nonatomic, readonly, copy) NSString * _Nonnull sentryName;
@end

SWIFT_CLASS("_TtC6Sentry15SentryVideoInfo")
@interface SentryVideoInfo : NSObject
@property (nonatomic, readonly, copy) NSURL * _Nonnull path;
@property (nonatomic, readonly, copy) NSDate * _Nonnull start;
@property (nonatomic, readonly, copy) NSDate * _Nonnull end;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry27SentryViewScreenshotOptions")
@interface SentryViewScreenshotOptions : NSObject <SentryRedactOptions>
/// Enables the up to 5x faster new view renderer.
/// Enabling this flag will reduce the amount of time it takes to render the screenshot on the main thread, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// <em>up to 4-5x faster rendering</em> (reducing <code>~160ms</code> to <code>~36ms</code>) on older devices.
/// experiment:
/// In case you are noticing issues with the new view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>.
/// Eventually, we will remove this feature flag and use the new view renderer by default.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL enableViewRendererV2;
/// Enables up to 5x faster but incomplete view rendering.
/// Enabling this flag will reduce the amount of time it takes to render the screenshot, therefore reducing
/// interruptions and visual lag. <a href="https://github.com/getsentry/sentry-cocoa/pull/4940">Our benchmarks</a> have shown a significant improvement of
/// up to <em>5x faster render times</em> (reducing <code>~160ms</code> to <code>~30ms</code>) on older devices.
/// This flag controls the way the view hierarchy is drawn into a graphics context. By default, the view hierarchy is drawn using
/// the <code>UIView.drawHierarchy(in:afterScreenUpdates:)</code> method, which is the most complete way to render the view hierarchy. However,
/// this method can be slow, especially when rendering complex views, therefore enabling this flag will switch to render the underlying <code>CALayer</code> instead.
/// note:
/// This flag can only be used together with <code>enableViewRendererV2</code> with up to 20% faster render times.
/// warning:
/// Rendering the view hierarchy using the <code>CALayer.render(in:)</code> method can lead to rendering issues, especially when using custom views.
/// For complete rendering, it is recommended to set this option to <code>false</code>. In case you prefer performance over completeness, you can
/// set this option to <code>true</code>.
/// experiment:
/// This is an experimental feature and is therefore disabled by default. In case you are noticing issues with the experimental
/// view renderer, please report the issue on <a href="https://github.com/getsentry/sentry-cocoa">GitHub</a>. Eventually, we will
/// mark this feature as stable and remove the experimental flag, but will keep it disabled by default.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL enableFastViewRendering;
/// Indicates whether the screenshot should redact all non-bundled image
/// in the app by drawing a black rectangle over it.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL maskAllImages;
/// Indicates whether the screenshot should redact all text in the app
/// by drawing a black rectangle over it.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic) BOOL maskAllText;
/// A list of custom UIView subclasses that need
/// to be masked during the screenshot.
/// By default Sentry already mask text and image elements from UIKit
/// Every child of a view that is redacted will also be redacted.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull maskedViewClasses;
/// A list of custom UIView subclasses to be ignored
/// during masking step of the screenshot.
/// The views of given classes will not be redacted but their children may be.
/// This property has precedence over <code>redactViewTypes</code>.
/// note:
/// See <code>SentryViewScreenshotOptions.init</code> for the default value.
@property (nonatomic, copy) NSArray<Class> * _Nonnull unmaskedViewClasses;
/// A set of view type identifier strings that should be excluded from subtree traversal.
/// Views matching these types will have their subtrees skipped during redaction to avoid crashes
/// caused by traversing problematic view hierarchies (e.g., views that activate internal CoreAnimation
/// animations when their layers are accessed).
/// Matching uses partial string containment: if a view’s class name (from <code>type(of: view).description()</code>)
/// contains any of these strings, the subtree will be ignored. For example, “MyView” will match
/// “MyApp.MyView”, “MyViewSubclass”, “Some.MyView.Container”, etc.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull excludedViewClasses;
/// A set of view type identifier strings that should be included in subtree traversal.
/// View types exactly matching these strings will be removed from the excluded set, allowing their subtrees
/// to be traversed even if they would otherwise be excluded by default or via <code>excludedViewClasses</code>.
/// Matching uses exact string matching: the view’s class name (from <code>type(of: view).description()</code>)
/// must exactly equal one of these strings. For example, “MyApp.MyView” will only match exactly “MyApp.MyView”,
/// not “MyApp.MyViewSubclass”.
/// note:
/// You should use the methods <code>excludeViewTypeFromSubtreeTraversal(_:)</code> and <code>includeViewTypeInSubtreeTraversal(_:)</code>
/// to add and remove view types, so you do not accidentally remove our defaults.
/// note:
/// The final set of excluded view types is computed by <code>SentryViewSubtreeTraversal</code> using the formula:
/// <em>Default View Classes + Excluded View Classes - Included View Classes</em>
/// Default view classes are defined in <code>SentryViewSubtreeTraversal</code> (e.g., <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+).
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+
/// by calling <code>includeViewTypeInSubtreeTraversal("CameraUI.ChromeSwiftUIView")</code>.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches. For example,
/// if “ChromeCameraUI” is excluded and “Camera” is included, “ChromeCameraUI” will still be excluded
/// because “Camera” doesn’t exactly match “ChromeCameraUI”.
@property (nonatomic, readonly, copy) NSSet<NSString *> * _Nonnull includedViewClasses;
/// Adds a view type pattern to the excluded set, preventing matching views’ subtrees from being traversed.
/// note:
/// This method adds the pattern to <code>excludedViewClasses</code>, which is then combined with
/// default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and filtered by <code>includedViewClasses</code>
/// to produce the final set.
/// \param viewType The view type identifier pattern (as a string) to exclude from subtree traversal.
/// Matching uses partial string containment: if a view’s class name contains this string,
/// the subtree will be ignored. For example, “MyView” will match “MyApp.MyView”,
/// “MyViewSubclass”, etc.
///
- (void)excludeViewTypeFromSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Adds a view type to the included set, allowing its subtree to be traversed.
/// note:
/// This method adds the view type to <code>includedViewClasses</code>, which filters the combined set
/// of default excluded types (defined in <code>SentryViewSubtreeTraversal</code>) and <code>excludedViewClasses</code>.
/// For example, you can use this to re-enable traversal for <code>CameraUI.ChromeSwiftUIView</code> on iOS 26+.
/// note:
/// Included patterns use exact matching (not partial) to prevent accidental matches.
/// \param viewType The view type identifier (as a string) to include in subtree traversal.
/// Must exactly match the result of <code>type(of: view).description()</code>.
/// For example, “MyApp.MyView” will only match exactly “MyApp.MyView”.
///
- (void)includeViewTypeInSubtreeTraversal:(NSString * _Nonnull)viewType;
/// Initialize screenshot options disabled
/// note:
/// This initializer is added for Objective-C compatibility, as constructors with default values
/// are not supported in Objective-C.
/// note:
/// See <code>SentryViewScreenshotOptions.DefaultValues</code> for the default values of each parameter.
- (nonnull instancetype)init;
/// Initializes a new instance of <code>SentryViewScreenshotOptions</code> with the specified parameters.
/// note:
/// See <code>SentryViewScreenshotOptions.DefaultValues</code> for the default values of each parameter.
/// \param enableViewRendererV2 Enables the up to 5x faster view renderer.
///
/// \param enableFastViewRendering Enables faster but incomplete view rendering. See <code>SentryViewScreenshotOptions.enableFastViewRendering</code> for more information.
///
/// \param maskAllText Flag to redact all text in the app by drawing a rectangle over it.
///
/// \param maskAllImages Flag to redact all images in the app by drawing a rectangle over it.
///
/// \param maskedViewClasses A list of custom UIView subclasses that need to be masked during the screenshot.
///
/// \param unmaskedViewClasses A list of custom UIView subclasses to be ignored during masking step of the screenshot.
///
/// \param excludedViewClasses A set of view type identifiers that should be excluded from subtree traversal.
///
/// \param includedViewClasses A set of view type identifiers that should be included in subtree traversal.
///
- (nonnull instancetype)initWithEnableViewRendererV2:(BOOL)enableViewRendererV2 enableFastViewRendering:(BOOL)enableFastViewRendering maskAllText:(BOOL)maskAllText maskAllImages:(BOOL)maskAllImages maskedViewClasses:(NSArray<Class> * _Nonnull)maskedViewClasses unmaskedViewClasses:(NSArray<Class> * _Nonnull)unmaskedViewClasses excludedViewClasses:(NSSet<NSString *> * _Nonnull)excludedViewClasses includedViewClasses:(NSSet<NSString *> * _Nonnull)includedViewClasses OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
@end

SWIFT_CLASS("_TtC6Sentry44SentryWatchdogTerminationAttributesProcessor")
@interface SentryWatchdogTerminationAttributesProcessor : NSObject
- (void)clear;
- (void)setContext:(NSDictionary<NSString *, NSDictionary<NSString *, id> *> * _Nullable)context;
- (void)setUser:(SentryUser * _Nullable)user;
- (void)setDist:(NSString * _Nullable)dist;
- (void)setEnvironment:(NSString * _Nullable)environment;
- (void)setTags:(NSDictionary<NSString *, NSString *> * _Nullable)tags;
- (void)setExtras:(NSDictionary<NSString *, id> * _Nullable)extras;
- (void)setFingerprint:(NSArray<NSString *> * _Nullable)fingerprint;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

SWIFT_CLASS("_TtC6Sentry34SentryWatchdogTerminationConstants")
@interface SentryWatchdogTerminationConstants : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ExceptionType;)
+ (NSString * _Nonnull)ExceptionType SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull ExceptionValue;)
+ (NSString * _Nonnull)ExceptionValue SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull MechanismType;)
+ (NSString * _Nonnull)MechanismType SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

SWIFT_CLASS("_TtC6Sentry15SwiftDescriptor")
@interface SwiftDescriptor : NSObject
+ (NSString * _Nonnull)getObjectClassName:(id _Nonnull)object SWIFT_WARN_UNUSED_RESULT;
+ (NSString * _Nullable)getSwiftErrorDescription:(NSError * _Nonnull)error SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSURLSessionTask;
SWIFT_CLASS("_TtC6Sentry20URLSessionTaskHelper")
@interface URLSessionTaskHelper : NSObject
+ (NSString * _Nullable)getGraphQLOperationNameFrom:(NSURLSessionTask * _Nullable)task SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSURLQueryItem;
SWIFT_CLASS("_TtC6Sentry12UrlSanitized")
@interface UrlSanitized : NSObject
@property (nonatomic, readonly, copy) NSString * _Nullable query;
@property (nonatomic, readonly, copy) NSArray<NSURLQueryItem *> * _Nullable queryItems;
@property (nonatomic, readonly, copy) NSString * _Nullable fragment;
- (nonnull instancetype)initWithURL:(NSURL * _Nonnull)url OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly, copy) NSString * _Nullable sanitizedUrl;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Global function to finish and save transaction when a crash occurs.
/// This function is called from C crash reporting code.
SWIFT_EXTERN void sentry_finishAndSaveTransaction(void) SWIFT_NOEXCEPT;

/// Recursively sanitizes an NSDictionary, converting non-serializable values to strings.
SWIFT_EXTERN NSDictionary * _Nullable sentry_sanitize_dictionary(NSDictionary * _Nullable dictionary) SWIFT_NOEXCEPT SWIFT_WARN_UNUSED_RESULT;

#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
