181 lines
5.8 KiB
Objective-C
181 lines
5.8 KiB
Objective-C
#import <Foundation/Foundation.h>
|
|
|
|
#ifdef __cplusplus
|
|
# define SENTRY_EXTERN extern "C" __attribute__((visibility("default")))
|
|
#else
|
|
# define SENTRY_EXTERN extern __attribute__((visibility("default")))
|
|
#endif
|
|
|
|
#ifndef TARGET_OS_VISION
|
|
# define TARGET_OS_VISION 0
|
|
#endif
|
|
|
|
// SENTRY_UIKIT_AVAILABLE basically means: are we on a platform where we can link UIKit?
|
|
#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
|
|
# define SENTRY_UIKIT_AVAILABLE 1
|
|
#else
|
|
# define SENTRY_UIKIT_AVAILABLE 0
|
|
#endif
|
|
|
|
// SENTRY_HAS_UIKIT means we're on a platform that can link UIKit and we're building a configuration
|
|
// that will allow it to be autolinked. SENTRY_NO_UIKIT is set in GCC_PREPROCESSOR_DEFINITIONS
|
|
// for configurations that we will not allow to link UIKit by setting CLANG_MODULES_AUTOLINK to NO.
|
|
#if SENTRY_UIKIT_AVAILABLE && !SENTRY_NO_UIKIT
|
|
# define SENTRY_HAS_UIKIT 1
|
|
#else
|
|
# define SENTRY_HAS_UIKIT 0
|
|
#endif
|
|
|
|
#if TARGET_OS_OSX || TARGET_OS_MACCATALYST
|
|
# define SENTRY_TARGET_MACOS 1
|
|
#else
|
|
# define SENTRY_TARGET_MACOS 0
|
|
#endif
|
|
|
|
#if (TARGET_OS_OSX || TARGET_OS_MACCATALYST) && !SENTRY_NO_UIKIT
|
|
# define SENTRY_TARGET_MACOS_HAS_UI 1
|
|
#else
|
|
# define SENTRY_TARGET_MACOS_HAS_UI 0
|
|
#endif
|
|
|
|
#if TARGET_OS_IOS || SENTRY_TARGET_MACOS
|
|
# define SENTRY_HAS_METRIC_KIT 1
|
|
#else
|
|
# define SENTRY_HAS_METRIC_KIT 0
|
|
#endif
|
|
|
|
#if SENTRY_HAS_UIKIT && !TARGET_OS_VISION
|
|
# define SENTRY_TARGET_REPLAY_SUPPORTED 1
|
|
#else
|
|
# define SENTRY_TARGET_REPLAY_SUPPORTED 0
|
|
#endif
|
|
|
|
#define SENTRY_NO_INIT \
|
|
-(instancetype)init NS_UNAVAILABLE; \
|
|
+(instancetype) new NS_UNAVAILABLE;
|
|
|
|
#if !TARGET_OS_WATCH && !(TARGET_OS_VISION && SENTRY_NO_UIKIT == 1)
|
|
# define SENTRY_HAS_REACHABILITY 1
|
|
#else
|
|
# define SENTRY_HAS_REACHABILITY 0
|
|
#endif
|
|
|
|
@class SentryBreadcrumb;
|
|
@class SentryEvent;
|
|
@class SentrySamplingContext;
|
|
@class SentryUserFeedbackConfiguration;
|
|
@protocol SentrySpan;
|
|
|
|
/**
|
|
* Block used for returning after a request finished
|
|
*/
|
|
typedef void (^SentryRequestFinished)(NSError *_Nullable error);
|
|
|
|
/**
|
|
* Block used for request operation finished, @c shouldDiscardEvent is @c YES if event
|
|
* should be deleted regardless if an error occurred or not
|
|
*/
|
|
typedef void (^SentryRequestOperationFinished)(
|
|
NSHTTPURLResponse *_Nullable response, NSError *_Nullable error);
|
|
/**
|
|
* Block can be used to mutate a breadcrumb before it's added to the scope.
|
|
* To avoid adding the breadcrumb altogether, return @c nil instead.
|
|
*/
|
|
typedef SentryBreadcrumb *_Nullable (^SentryBeforeBreadcrumbCallback)(
|
|
SentryBreadcrumb *_Nonnull breadcrumb);
|
|
|
|
/**
|
|
* Block can be used to mutate event before its send.
|
|
* To avoid sending the event altogether, return nil instead.
|
|
*/
|
|
typedef SentryEvent *_Nullable (^SentryBeforeSendEventCallback)(SentryEvent *_Nonnull event);
|
|
|
|
/**
|
|
* Use this block to drop or modify a span before the SDK sends it to Sentry. Return @c nil to drop
|
|
* the span.
|
|
*/
|
|
typedef id<SentrySpan> _Nullable (^SentryBeforeSendSpanCallback)(id<SentrySpan> _Nonnull span);
|
|
|
|
/**
|
|
* Block can be used 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.
|
|
*/
|
|
typedef BOOL (^SentryBeforeCaptureScreenshotCallback)(SentryEvent *_Nonnull event);
|
|
|
|
/**
|
|
* Block can be used 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.
|
|
*/
|
|
typedef BOOL (^SentryBeforeCaptureViewHierarchyCallback)(SentryEvent *_Nonnull event);
|
|
|
|
/**
|
|
* A callback to be notified when the last program execution terminated with a crash.
|
|
*/
|
|
typedef void (^SentryOnCrashedLastRunCallback)(SentryEvent *_Nonnull event);
|
|
|
|
/**
|
|
* Block can be used to determine if an event should be queued and stored
|
|
* locally. It will be tried to send again after next successful send. Note that
|
|
* this will only be called once the event is created and send manually. Once it
|
|
* has been queued once it will be discarded if it fails again.
|
|
*/
|
|
typedef BOOL (^SentryShouldQueueEvent)(
|
|
NSHTTPURLResponse *_Nullable response, NSError *_Nullable error);
|
|
|
|
/**
|
|
* Function pointer for a sampler callback.
|
|
* @param samplingContext context of the sampling.
|
|
* @return A sample rate that is >= @c 0.0 and \<= @c 1.0 or @c nil if no sampling decision has
|
|
* been taken. When returning a value out of range the SDK uses the default of @c 0.
|
|
*/
|
|
typedef NSNumber *_Nullable (^SentryTracesSamplerCallback)(
|
|
SentrySamplingContext *_Nonnull samplingContext);
|
|
|
|
/**
|
|
* Function pointer for span manipulation.
|
|
* @param span The span to be used.
|
|
*/
|
|
typedef void (^SentrySpanCallback)(id<SentrySpan> _Nullable span);
|
|
|
|
/**
|
|
* Log level.
|
|
*/
|
|
typedef NS_ENUM(NSInteger, SentryLogLevel) {
|
|
kSentryLogLevelNone = 1,
|
|
kSentryLogLevelError,
|
|
kSentryLogLevelDebug,
|
|
kSentryLogLevelVerbose
|
|
};
|
|
|
|
/**
|
|
* Sentry level.
|
|
*/
|
|
typedef NS_ENUM(NSUInteger,
|
|
SentryLevel); // This is a forward declaration, the actual enum is implemented in Swift.
|
|
|
|
/**
|
|
* Static internal helper to convert enum to string.
|
|
*/
|
|
static DEPRECATED_MSG_ATTRIBUTE(
|
|
"Use nameForSentryLevel() instead.") NSString *_Nonnull const SentryLevelNames[]
|
|
= {
|
|
@"none",
|
|
@"debug",
|
|
@"info",
|
|
@"warning",
|
|
@"error",
|
|
@"fatal",
|
|
};
|
|
|
|
static NSUInteger const defaultMaxBreadcrumbs = 100;
|
|
|
|
static NSString *_Nonnull const kSentryTrueString = @"true";
|
|
static NSString *_Nonnull const kSentryFalseString = @"false";
|
|
|
|
/**
|
|
* Transaction name source.
|
|
*/
|
|
typedef NS_ENUM(NSInteger, SentryTransactionNameSource); // This is a forward declaration, the
|
|
// actual enum is implemented in Swift.
|