-
-
Notifications
You must be signed in to change notification settings - Fork 340
/
Copy pathSentryDefines.h
201 lines (173 loc) · 6.73 KB
/
SentryDefines.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#import <Foundation/Foundation.h>
// SentryDefines.h is a key header and will be checked early,
// ensuring this error appears first during the compile process.
//
// Setting APPLICATION_EXTENSION_API_ONLY to YES has a side effect of
// including all Swift classes in the `Sentry-Swift.h` header which is
// required for the SDK to work.
//
// https://github.com/getsentry/sentry-cocoa/issues/4426
//
// This mainly came up in RN SDK, because
// some libraries advice to users
// to set APPLICATION_EXTENSION_API_ONLY_NO
// for all cocoapods targets, instead of
// only to their pod.
// https://github.com/getsentry/sentry-react-native/issues/3908
#if APPLICATION_EXTENSION_API_ONLY_NO
# error "Set APPLICATION_EXTENSION_API_ONLY to YES in the Sentry build settings.\
Setting the flag to YES is required for the SDK to work.\
For more information, visit https://docs.sentry.io/platforms/apple/troubleshooting/#unknown-receiver-somereceiver-use-of-undeclared-identifier-someidentifier
#endif
#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.